@allbridge/bridge-core-sdk 3.25.0 → 3.26.0-alpha.10

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.
Files changed (65) hide show
  1. package/dist/browser/index.js +6 -1
  2. package/dist/browser/index.js.map +4 -4
  3. package/dist/cjs/index.js +6 -1
  4. package/dist/cjs/index.js.map +4 -4
  5. package/dist/esm/index.js +6 -1
  6. package/dist/esm/index.js.map +4 -4
  7. package/dist/src/chains/chain.enums.d.ts +7 -2
  8. package/dist/src/chains/chain.enums.js +5 -0
  9. package/dist/src/chains/chain.enums.js.map +1 -1
  10. package/dist/src/chains/index.js +6 -0
  11. package/dist/src/chains/index.js.map +1 -1
  12. package/dist/src/client/core-api/core-api-mapper.js +1 -0
  13. package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
  14. package/dist/src/client/core-api/core-api.model.d.ts +1 -0
  15. package/dist/src/client/core-api/core-api.model.js.map +1 -1
  16. package/dist/src/services/bridge/alg/index.d.ts +15 -0
  17. package/dist/src/services/bridge/alg/index.js +157 -0
  18. package/dist/src/services/bridge/alg/index.js.map +1 -0
  19. package/dist/src/services/bridge/index.js +16 -0
  20. package/dist/src/services/bridge/index.js.map +1 -1
  21. package/dist/src/services/bridge/models/bridge.model.d.ts +1 -0
  22. package/dist/src/services/bridge/models/bridge.model.js.map +1 -1
  23. package/dist/src/services/bridge/sui/index.js.map +1 -1
  24. package/dist/src/services/bridge/utils.d.ts +3 -1
  25. package/dist/src/services/bridge/utils.js +72 -15
  26. package/dist/src/services/bridge/utils.js.map +1 -1
  27. package/dist/src/services/liquidity-pool/alg/index.d.ts +19 -0
  28. package/dist/src/services/liquidity-pool/alg/index.js +141 -0
  29. package/dist/src/services/liquidity-pool/alg/index.js.map +1 -0
  30. package/dist/src/services/liquidity-pool/index.js +16 -0
  31. package/dist/src/services/liquidity-pool/index.js.map +1 -1
  32. package/dist/src/services/liquidity-pool/sui/index.js.map +1 -1
  33. package/dist/src/services/liquidity-pool/trx/index.js.map +1 -1
  34. package/dist/src/services/models/alg/BridgeClient.d.ts +2718 -0
  35. package/dist/src/services/models/alg/BridgeClient.js +2633 -0
  36. package/dist/src/services/models/alg/BridgeClient.js.map +1 -0
  37. package/dist/src/services/models/alg/PoolClient.d.ts +2265 -0
  38. package/dist/src/services/models/alg/PoolClient.js +2176 -0
  39. package/dist/src/services/models/alg/PoolClient.js.map +1 -0
  40. package/dist/src/services/models/index.d.ts +6 -5
  41. package/dist/src/services/models/index.js.map +1 -1
  42. package/dist/src/services/token/alg/index.d.ts +17 -0
  43. package/dist/src/services/token/alg/index.js +46 -0
  44. package/dist/src/services/token/alg/index.js.map +1 -0
  45. package/dist/src/services/token/index.js +16 -0
  46. package/dist/src/services/token/index.js.map +1 -1
  47. package/dist/src/services/token/sui/index.js.map +1 -1
  48. package/dist/src/services/utils/alg/index.d.ts +18 -0
  49. package/dist/src/services/utils/alg/index.js +94 -0
  50. package/dist/src/services/utils/alg/index.js.map +1 -0
  51. package/dist/src/services/utils/trx/index.js.map +1 -1
  52. package/dist/src/services/yield/index.js +4 -0
  53. package/dist/src/services/yield/index.js.map +1 -1
  54. package/dist/src/tokens-info/tokens-info.model.d.ts +4 -0
  55. package/dist/src/tokens-info/tokens-info.model.js.map +1 -1
  56. package/dist/src/utils/alg/index.d.ts +21 -0
  57. package/dist/src/utils/alg/index.js +67 -0
  58. package/dist/src/utils/alg/index.js.map +1 -0
  59. package/dist/src/utils/index.d.ts +3 -0
  60. package/dist/src/utils/index.js +3 -0
  61. package/dist/src/utils/index.js.map +1 -1
  62. package/dist/src/version.d.ts +1 -1
  63. package/dist/src/version.js +1 -1
  64. package/dist/src/version.js.map +1 -1
  65. package/package.json +5 -2
@@ -1,4 +1,9 @@
1
- var Bs=Object.create;var Ui=Object.defineProperty;var Is=Object.getOwnPropertyDescriptor;var Rs=Object.getOwnPropertyNames;var vs=Object.getPrototypeOf,ks=Object.prototype.hasOwnProperty;var Bt=(s,i)=>()=>(s&&(i=s(s=0)),i);var Jr=(s,i)=>()=>(i||s((i={exports:{}}).exports,i),i.exports);var xs=(s,i,r,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let o of Rs(i))!ks.call(s,o)&&o!==r&&Ui(s,o,{get:()=>i[o],enumerable:!(a=Is(i,o))||a.enumerable});return s};var He=(s,i,r)=>(r=s!=null?Bs(vs(s)):{},xs(i||!s||!s.__esModule?Ui(r,"default",{value:s,enumerable:!0}):r,s));var g=Bt(()=>{});function Fs(s,i){this.fun=s,this.array=i}function Gi(s){var i=Math.floor((Date.now()-It.now())*.001),r=It.now()*.001,a=Math.floor(r)+i,o=Math.floor(r%1*1e9);return s&&(a=a-s[0],o=o-s[1],o<0&&(a--,o+=Xr)),[a,o]}var Yc,It,Lr,Xr,Vi=Bt(()=>{g();y();f();Fs.prototype.run=function(){this.fun.apply(null,this.array)};Yc={PATH:"/usr/bin",LANG:typeof navigator<"u"?navigator.language+".UTF-8":void 0,PWD:"/",HOME:"/home",TMP:"/tmp"},It={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};It.now===void 0&&(Lr=Date.now(),It.timing&&It.timing.navigationStart&&(Lr=It.timing.navigationStart),It.now=()=>Date.now()-Lr);Xr=1e9;Gi.bigint=function(s){var i=Gi(s);return typeof BigInt>"u"?i[0]*Xr+i[1]:BigInt(i[0]*Xr)+BigInt(i[1])}});var f=Bt(()=>{Vi()});function Ms(){if(ji)return un;ji=!0,un.byteLength=p,un.toByteArray=T,un.fromByteArray=x;for(var s=[],i=[],r=typeof Uint8Array<"u"?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,u=a.length;o<u;++o)s[o]=a[o],i[a.charCodeAt(o)]=o;i[45]=62,i[95]=63;function m(v){var M=v.length;if(M%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=v.indexOf("=");k===-1&&(k=M);var D=k===M?0:4-k%4;return[k,D]}function p(v){var M=m(v),k=M[0],D=M[1];return(k+D)*3/4-D}function h(v,M,k){return(M+k)*3/4-k}function T(v){var M,k=m(v),D=k[0],N=k[1],F=new r(h(v,D,N)),W=0,U=N>0?D-4:D,_;for(_=0;_<U;_+=4)M=i[v.charCodeAt(_)]<<18|i[v.charCodeAt(_+1)]<<12|i[v.charCodeAt(_+2)]<<6|i[v.charCodeAt(_+3)],F[W++]=M>>16&255,F[W++]=M>>8&255,F[W++]=M&255;return N===2&&(M=i[v.charCodeAt(_)]<<2|i[v.charCodeAt(_+1)]>>4,F[W++]=M&255),N===1&&(M=i[v.charCodeAt(_)]<<10|i[v.charCodeAt(_+1)]<<4|i[v.charCodeAt(_+2)]>>2,F[W++]=M>>8&255,F[W++]=M&255),F}function S(v){return s[v>>18&63]+s[v>>12&63]+s[v>>6&63]+s[v&63]}function w(v,M,k){for(var D,N=[],F=M;F<k;F+=3)D=(v[F]<<16&16711680)+(v[F+1]<<8&65280)+(v[F+2]&255),N.push(S(D));return N.join("")}function x(v){for(var M,k=v.length,D=k%3,N=[],F=16383,W=0,U=k-D;W<U;W+=F)N.push(w(v,W,W+F>U?U:W+F));return D===1?(M=v[k-1],N.push(s[M>>2]+s[M<<4&63]+"==")):D===2&&(M=(v[k-2]<<8)+v[k-1],N.push(s[M>>10]+s[M>>4&63]+s[M<<2&63]+"=")),N.join("")}return un}function Os(){if(_i)return En;_i=!0;return En.read=function(s,i,r,a,o){var u,m,p=o*8-a-1,h=(1<<p)-1,T=h>>1,S=-7,w=r?o-1:0,x=r?-1:1,v=s[i+w];for(w+=x,u=v&(1<<-S)-1,v>>=-S,S+=p;S>0;u=u*256+s[i+w],w+=x,S-=8);for(m=u&(1<<-S)-1,u>>=-S,S+=a;S>0;m=m*256+s[i+w],w+=x,S-=8);if(u===0)u=1-T;else{if(u===h)return m?NaN:(v?-1:1)*(1/0);m=m+Math.pow(2,a),u=u-T}return(v?-1:1)*m*Math.pow(2,u-a)},En.write=function(s,i,r,a,o,u){var m,p,h,T=u*8-o-1,S=(1<<T)-1,w=S>>1,x=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,v=a?0:u-1,M=a?1:-1,k=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(p=isNaN(i)?1:0,m=S):(m=Math.floor(Math.log(i)/Math.LN2),i*(h=Math.pow(2,-m))<1&&(m--,h*=2),m+w>=1?i+=x/h:i+=x*Math.pow(2,1-w),i*h>=2&&(m++,h/=2),m+w>=S?(p=0,m=S):m+w>=1?(p=(i*h-1)*Math.pow(2,o),m=m+w):(p=i*Math.pow(2,w-1)*Math.pow(2,o),m=0));o>=8;s[r+v]=p&255,v+=M,p/=256,o-=8);for(m=m<<o|p,T+=o;T>0;s[r+v]=m&255,v+=M,m/=256,T-=8);s[r+v-M]|=k*128},En}function $i(){if(Zi)return Rt;Zi=!0;let s=Ms(),i=Os(),r=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Rt.Buffer=m,Rt.SlowBuffer=N,Rt.INSPECT_MAX_BYTES=50;let a=2147483647;Rt.kMaxLength=a,m.TYPED_ARRAY_SUPPORT=o(),!m.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 o(){try{let l=new Uint8Array(1),c={foo:function(){return 42}};return Object.setPrototypeOf(c,Uint8Array.prototype),Object.setPrototypeOf(l,c),l.foo()===42}catch{return!1}}Object.defineProperty(m.prototype,"parent",{enumerable:!0,get:function(){if(m.isBuffer(this))return this.buffer}}),Object.defineProperty(m.prototype,"offset",{enumerable:!0,get:function(){if(m.isBuffer(this))return this.byteOffset}});function u(l){if(l>a)throw new RangeError('The value "'+l+'" is invalid for option "size"');let c=new Uint8Array(l);return Object.setPrototypeOf(c,m.prototype),c}function m(l,c,A){if(typeof l=="number"){if(typeof c=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return S(l)}return p(l,c,A)}m.poolSize=8192;function p(l,c,A){if(typeof l=="string")return w(l,c);if(ArrayBuffer.isView(l))return v(l);if(l==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l);if(rt(l,ArrayBuffer)||l&&rt(l.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(rt(l,SharedArrayBuffer)||l&&rt(l.buffer,SharedArrayBuffer)))return M(l,c,A);if(typeof l=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let d=l.valueOf&&l.valueOf();if(d!=null&&d!==l)return m.from(d,c,A);let b=k(l);if(b)return b;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof l[Symbol.toPrimitive]=="function")return m.from(l[Symbol.toPrimitive]("string"),c,A);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l)}m.from=function(l,c,A){return p(l,c,A)},Object.setPrototypeOf(m.prototype,Uint8Array.prototype),Object.setPrototypeOf(m,Uint8Array);function h(l){if(typeof l!="number")throw new TypeError('"size" argument must be of type number');if(l<0)throw new RangeError('The value "'+l+'" is invalid for option "size"')}function T(l,c,A){return h(l),l<=0?u(l):c!==void 0?typeof A=="string"?u(l).fill(c,A):u(l).fill(c):u(l)}m.alloc=function(l,c,A){return T(l,c,A)};function S(l){return h(l),u(l<0?0:D(l)|0)}m.allocUnsafe=function(l){return S(l)},m.allocUnsafeSlow=function(l){return S(l)};function w(l,c){if((typeof c!="string"||c==="")&&(c="utf8"),!m.isEncoding(c))throw new TypeError("Unknown encoding: "+c);let A=F(l,c)|0,d=u(A),b=d.write(l,c);return b!==A&&(d=d.slice(0,b)),d}function x(l){let c=l.length<0?0:D(l.length)|0,A=u(c);for(let d=0;d<c;d+=1)A[d]=l[d]&255;return A}function v(l){if(rt(l,Uint8Array)){let c=new Uint8Array(l);return M(c.buffer,c.byteOffset,c.byteLength)}return x(l)}function M(l,c,A){if(c<0||l.byteLength<c)throw new RangeError('"offset" is outside of buffer bounds');if(l.byteLength<c+(A||0))throw new RangeError('"length" is outside of buffer bounds');let d;return c===void 0&&A===void 0?d=new Uint8Array(l):A===void 0?d=new Uint8Array(l,c):d=new Uint8Array(l,c,A),Object.setPrototypeOf(d,m.prototype),d}function k(l){if(m.isBuffer(l)){let c=D(l.length)|0,A=u(c);return A.length===0||l.copy(A,0,0,c),A}if(l.length!==void 0)return typeof l.length!="number"||Yr(l.length)?u(0):x(l);if(l.type==="Buffer"&&Array.isArray(l.data))return x(l.data)}function D(l){if(l>=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return l|0}function N(l){return+l!=l&&(l=0),m.alloc(+l)}m.isBuffer=function(c){return c!=null&&c._isBuffer===!0&&c!==m.prototype},m.compare=function(c,A){if(rt(c,Uint8Array)&&(c=m.from(c,c.offset,c.byteLength)),rt(A,Uint8Array)&&(A=m.from(A,A.offset,A.byteLength)),!m.isBuffer(c)||!m.isBuffer(A))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(c===A)return 0;let d=c.length,b=A.length;for(let C=0,R=Math.min(d,b);C<R;++C)if(c[C]!==A[C]){d=c[C],b=A[C];break}return d<b?-1:b<d?1:0},m.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}},m.concat=function(c,A){if(!Array.isArray(c))throw new TypeError('"list" argument must be an Array of Buffers');if(c.length===0)return m.alloc(0);let d;if(A===void 0)for(A=0,d=0;d<c.length;++d)A+=c[d].length;let b=m.allocUnsafe(A),C=0;for(d=0;d<c.length;++d){let R=c[d];if(rt(R,Uint8Array))C+R.length>b.length?(m.isBuffer(R)||(R=m.from(R)),R.copy(b,C)):Uint8Array.prototype.set.call(b,R,C);else if(m.isBuffer(R))R.copy(b,C);else throw new TypeError('"list" argument must be an Array of Buffers');C+=R.length}return b};function F(l,c){if(m.isBuffer(l))return l.length;if(ArrayBuffer.isView(l)||rt(l,ArrayBuffer))return l.byteLength;if(typeof l!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof l);let A=l.length,d=arguments.length>2&&arguments[2]===!0;if(!d&&A===0)return 0;let b=!1;for(;;)switch(c){case"ascii":case"latin1":case"binary":return A;case"utf8":case"utf-8":return $r(l).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A*2;case"hex":return A>>>1;case"base64":return Ei(l).length;default:if(b)return d?-1:$r(l).length;c=(""+c).toLowerCase(),b=!0}}m.byteLength=F;function W(l,c,A){let d=!1;if((c===void 0||c<0)&&(c=0),c>this.length||((A===void 0||A>this.length)&&(A=this.length),A<=0)||(A>>>=0,c>>>=0,A<=c))return"";for(l||(l="utf8");;)switch(l){case"hex":return Ze(this,c,A);case"utf8":case"utf-8":return ye(this,c,A);case"ascii":return Be(this,c,A);case"latin1":case"binary":return _e(this,c,A);case"base64":return Me(this,c,A);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return De(this,c,A);default:if(d)throw new TypeError("Unknown encoding: "+l);l=(l+"").toLowerCase(),d=!0}}m.prototype._isBuffer=!0;function U(l,c,A){let d=l[c];l[c]=l[A],l[A]=d}m.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 A=0;A<c;A+=2)U(this,A,A+1);return this},m.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 A=0;A<c;A+=4)U(this,A,A+3),U(this,A+1,A+2);return this},m.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 A=0;A<c;A+=8)U(this,A,A+7),U(this,A+1,A+6),U(this,A+2,A+5),U(this,A+3,A+4);return this},m.prototype.toString=function(){let c=this.length;return c===0?"":arguments.length===0?ye(this,0,c):W.apply(this,arguments)},m.prototype.toLocaleString=m.prototype.toString,m.prototype.equals=function(c){if(!m.isBuffer(c))throw new TypeError("Argument must be a Buffer");return this===c?!0:m.compare(this,c)===0},m.prototype.inspect=function(){let c="",A=Rt.INSPECT_MAX_BYTES;return c=this.toString("hex",0,A).replace(/(.{2})/g,"$1 ").trim(),this.length>A&&(c+=" ... "),"<Buffer "+c+">"},r&&(m.prototype[r]=m.prototype.inspect),m.prototype.compare=function(c,A,d,b,C){if(rt(c,Uint8Array)&&(c=m.from(c,c.offset,c.byteLength)),!m.isBuffer(c))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof c);if(A===void 0&&(A=0),d===void 0&&(d=c?c.length:0),b===void 0&&(b=0),C===void 0&&(C=this.length),A<0||d>c.length||b<0||C>this.length)throw new RangeError("out of range index");if(b>=C&&A>=d)return 0;if(b>=C)return-1;if(A>=d)return 1;if(A>>>=0,d>>>=0,b>>>=0,C>>>=0,this===c)return 0;let R=C-b,J=d-A,se=Math.min(R,J),ie=this.slice(b,C),oe=c.slice(A,d);for(let ne=0;ne<se;++ne)if(ie[ne]!==oe[ne]){R=ie[ne],J=oe[ne];break}return R<J?-1:J<R?1:0};function _(l,c,A,d,b){if(l.length===0)return-1;if(typeof A=="string"?(d=A,A=0):A>2147483647?A=2147483647:A<-2147483648&&(A=-2147483648),A=+A,Yr(A)&&(A=b?0:l.length-1),A<0&&(A=l.length+A),A>=l.length){if(b)return-1;A=l.length-1}else if(A<0)if(b)A=0;else return-1;if(typeof c=="string"&&(c=m.from(c,d)),m.isBuffer(c))return c.length===0?-1:L(l,c,A,d,b);if(typeof c=="number")return c=c&255,typeof Uint8Array.prototype.indexOf=="function"?b?Uint8Array.prototype.indexOf.call(l,c,A):Uint8Array.prototype.lastIndexOf.call(l,c,A):L(l,[c],A,d,b);throw new TypeError("val must be string, number or Buffer")}function L(l,c,A,d,b){let C=1,R=l.length,J=c.length;if(d!==void 0&&(d=String(d).toLowerCase(),d==="ucs2"||d==="ucs-2"||d==="utf16le"||d==="utf-16le")){if(l.length<2||c.length<2)return-1;C=2,R/=2,J/=2,A/=2}function se(oe,ne){return C===1?oe[ne]:oe.readUInt16BE(ne*C)}let ie;if(b){let oe=-1;for(ie=A;ie<R;ie++)if(se(l,ie)===se(c,oe===-1?0:ie-oe)){if(oe===-1&&(oe=ie),ie-oe+1===J)return oe*C}else oe!==-1&&(ie-=ie-oe),oe=-1}else for(A+J>R&&(A=R-J),ie=A;ie>=0;ie--){let oe=!0;for(let ne=0;ne<J;ne++)if(se(l,ie+ne)!==se(c,ne)){oe=!1;break}if(oe)return ie}return-1}m.prototype.includes=function(c,A,d){return this.indexOf(c,A,d)!==-1},m.prototype.indexOf=function(c,A,d){return _(this,c,A,d,!0)},m.prototype.lastIndexOf=function(c,A,d){return _(this,c,A,d,!1)};function we(l,c,A,d){A=Number(A)||0;let b=l.length-A;d?(d=Number(d),d>b&&(d=b)):d=b;let C=c.length;d>C/2&&(d=C/2);let R;for(R=0;R<d;++R){let J=parseInt(c.substr(R*2,2),16);if(Yr(J))return R;l[A+R]=J}return R}function le(l,c,A,d){return Nn($r(c,l.length-A),l,A,d)}function Ve(l,c,A,d){return Nn(Ss(c),l,A,d)}function je(l,c,A,d){return Nn(Ei(c),l,A,d)}function Ke(l,c,A,d){return Nn(Ps(c,l.length-A),l,A,d)}m.prototype.write=function(c,A,d,b){if(A===void 0)b="utf8",d=this.length,A=0;else if(d===void 0&&typeof A=="string")b=A,d=this.length,A=0;else if(isFinite(A))A=A>>>0,isFinite(d)?(d=d>>>0,b===void 0&&(b="utf8")):(b=d,d=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let C=this.length-A;if((d===void 0||d>C)&&(d=C),c.length>0&&(d<0||A<0)||A>this.length)throw new RangeError("Attempt to write outside buffer bounds");b||(b="utf8");let R=!1;for(;;)switch(b){case"hex":return we(this,c,A,d);case"utf8":case"utf-8":return le(this,c,A,d);case"ascii":case"latin1":case"binary":return Ve(this,c,A,d);case"base64":return je(this,c,A,d);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ke(this,c,A,d);default:if(R)throw new TypeError("Unknown encoding: "+b);b=(""+b).toLowerCase(),R=!0}},m.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Me(l,c,A){return c===0&&A===l.length?s.fromByteArray(l):s.fromByteArray(l.slice(c,A))}function ye(l,c,A){A=Math.min(l.length,A);let d=[],b=c;for(;b<A;){let C=l[b],R=null,J=C>239?4:C>223?3:C>191?2:1;if(b+J<=A){let se,ie,oe,ne;switch(J){case 1:C<128&&(R=C);break;case 2:se=l[b+1],(se&192)===128&&(ne=(C&31)<<6|se&63,ne>127&&(R=ne));break;case 3:se=l[b+1],ie=l[b+2],(se&192)===128&&(ie&192)===128&&(ne=(C&15)<<12|(se&63)<<6|ie&63,ne>2047&&(ne<55296||ne>57343)&&(R=ne));break;case 4:se=l[b+1],ie=l[b+2],oe=l[b+3],(se&192)===128&&(ie&192)===128&&(oe&192)===128&&(ne=(C&15)<<18|(se&63)<<12|(ie&63)<<6|oe&63,ne>65535&&ne<1114112&&(R=ne))}}R===null?(R=65533,J=1):R>65535&&(R-=65536,d.push(R>>>10&1023|55296),R=56320|R&1023),d.push(R),b+=J}return Oe(d)}let Ce=4096;function Oe(l){let c=l.length;if(c<=Ce)return String.fromCharCode.apply(String,l);let A="",d=0;for(;d<c;)A+=String.fromCharCode.apply(String,l.slice(d,d+=Ce));return A}function Be(l,c,A){let d="";A=Math.min(l.length,A);for(let b=c;b<A;++b)d+=String.fromCharCode(l[b]&127);return d}function _e(l,c,A){let d="";A=Math.min(l.length,A);for(let b=c;b<A;++b)d+=String.fromCharCode(l[b]);return d}function Ze(l,c,A){let d=l.length;(!c||c<0)&&(c=0),(!A||A<0||A>d)&&(A=d);let b="";for(let C=c;C<A;++C)b+=ws[l[C]];return b}function De(l,c,A){let d=l.slice(c,A),b="";for(let C=0;C<d.length-1;C+=2)b+=String.fromCharCode(d[C]+d[C+1]*256);return b}m.prototype.slice=function(c,A){let d=this.length;c=~~c,A=A===void 0?d:~~A,c<0?(c+=d,c<0&&(c=0)):c>d&&(c=d),A<0?(A+=d,A<0&&(A=0)):A>d&&(A=d),A<c&&(A=c);let b=this.subarray(c,A);return Object.setPrototypeOf(b,m.prototype),b};function G(l,c,A){if(l%1!==0||l<0)throw new RangeError("offset is not uint");if(l+c>A)throw new RangeError("Trying to access beyond buffer length")}m.prototype.readUintLE=m.prototype.readUIntLE=function(c,A,d){c=c>>>0,A=A>>>0,d||G(c,A,this.length);let b=this[c],C=1,R=0;for(;++R<A&&(C*=256);)b+=this[c+R]*C;return b},m.prototype.readUintBE=m.prototype.readUIntBE=function(c,A,d){c=c>>>0,A=A>>>0,d||G(c,A,this.length);let b=this[c+--A],C=1;for(;A>0&&(C*=256);)b+=this[c+--A]*C;return b},m.prototype.readUint8=m.prototype.readUInt8=function(c,A){return c=c>>>0,A||G(c,1,this.length),this[c]},m.prototype.readUint16LE=m.prototype.readUInt16LE=function(c,A){return c=c>>>0,A||G(c,2,this.length),this[c]|this[c+1]<<8},m.prototype.readUint16BE=m.prototype.readUInt16BE=function(c,A){return c=c>>>0,A||G(c,2,this.length),this[c]<<8|this[c+1]},m.prototype.readUint32LE=m.prototype.readUInt32LE=function(c,A){return c=c>>>0,A||G(c,4,this.length),(this[c]|this[c+1]<<8|this[c+2]<<16)+this[c+3]*16777216},m.prototype.readUint32BE=m.prototype.readUInt32BE=function(c,A){return c=c>>>0,A||G(c,4,this.length),this[c]*16777216+(this[c+1]<<16|this[c+2]<<8|this[c+3])},m.prototype.readBigUInt64LE=gt(function(c){c=c>>>0,Gt(c,"offset");let A=this[c],d=this[c+7];(A===void 0||d===void 0)&&An(c,this.length-8);let b=A+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24,C=this[++c]+this[++c]*2**8+this[++c]*2**16+d*2**24;return BigInt(b)+(BigInt(C)<<BigInt(32))}),m.prototype.readBigUInt64BE=gt(function(c){c=c>>>0,Gt(c,"offset");let A=this[c],d=this[c+7];(A===void 0||d===void 0)&&An(c,this.length-8);let b=A*2**24+this[++c]*2**16+this[++c]*2**8+this[++c],C=this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+d;return(BigInt(b)<<BigInt(32))+BigInt(C)}),m.prototype.readIntLE=function(c,A,d){c=c>>>0,A=A>>>0,d||G(c,A,this.length);let b=this[c],C=1,R=0;for(;++R<A&&(C*=256);)b+=this[c+R]*C;return C*=128,b>=C&&(b-=Math.pow(2,8*A)),b},m.prototype.readIntBE=function(c,A,d){c=c>>>0,A=A>>>0,d||G(c,A,this.length);let b=A,C=1,R=this[c+--b];for(;b>0&&(C*=256);)R+=this[c+--b]*C;return C*=128,R>=C&&(R-=Math.pow(2,8*A)),R},m.prototype.readInt8=function(c,A){return c=c>>>0,A||G(c,1,this.length),this[c]&128?(255-this[c]+1)*-1:this[c]},m.prototype.readInt16LE=function(c,A){c=c>>>0,A||G(c,2,this.length);let d=this[c]|this[c+1]<<8;return d&32768?d|4294901760:d},m.prototype.readInt16BE=function(c,A){c=c>>>0,A||G(c,2,this.length);let d=this[c+1]|this[c]<<8;return d&32768?d|4294901760:d},m.prototype.readInt32LE=function(c,A){return c=c>>>0,A||G(c,4,this.length),this[c]|this[c+1]<<8|this[c+2]<<16|this[c+3]<<24},m.prototype.readInt32BE=function(c,A){return c=c>>>0,A||G(c,4,this.length),this[c]<<24|this[c+1]<<16|this[c+2]<<8|this[c+3]},m.prototype.readBigInt64LE=gt(function(c){c=c>>>0,Gt(c,"offset");let A=this[c],d=this[c+7];(A===void 0||d===void 0)&&An(c,this.length-8);let b=this[c+4]+this[c+5]*2**8+this[c+6]*2**16+(d<<24);return(BigInt(b)<<BigInt(32))+BigInt(A+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24)}),m.prototype.readBigInt64BE=gt(function(c){c=c>>>0,Gt(c,"offset");let A=this[c],d=this[c+7];(A===void 0||d===void 0)&&An(c,this.length-8);let b=(A<<24)+this[++c]*2**16+this[++c]*2**8+this[++c];return(BigInt(b)<<BigInt(32))+BigInt(this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+d)}),m.prototype.readFloatLE=function(c,A){return c=c>>>0,A||G(c,4,this.length),i.read(this,c,!0,23,4)},m.prototype.readFloatBE=function(c,A){return c=c>>>0,A||G(c,4,this.length),i.read(this,c,!1,23,4)},m.prototype.readDoubleLE=function(c,A){return c=c>>>0,A||G(c,8,this.length),i.read(this,c,!0,52,8)},m.prototype.readDoubleBE=function(c,A){return c=c>>>0,A||G(c,8,this.length),i.read(this,c,!1,52,8)};function pe(l,c,A,d,b,C){if(!m.isBuffer(l))throw new TypeError('"buffer" argument must be a Buffer instance');if(c>b||c<C)throw new RangeError('"value" argument is out of bounds');if(A+d>l.length)throw new RangeError("Index out of range")}m.prototype.writeUintLE=m.prototype.writeUIntLE=function(c,A,d,b){if(c=+c,A=A>>>0,d=d>>>0,!b){let J=Math.pow(2,8*d)-1;pe(this,c,A,d,J,0)}let C=1,R=0;for(this[A]=c&255;++R<d&&(C*=256);)this[A+R]=c/C&255;return A+d},m.prototype.writeUintBE=m.prototype.writeUIntBE=function(c,A,d,b){if(c=+c,A=A>>>0,d=d>>>0,!b){let J=Math.pow(2,8*d)-1;pe(this,c,A,d,J,0)}let C=d-1,R=1;for(this[A+C]=c&255;--C>=0&&(R*=256);)this[A+C]=c/R&255;return A+d},m.prototype.writeUint8=m.prototype.writeUInt8=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,1,255,0),this[A]=c&255,A+1},m.prototype.writeUint16LE=m.prototype.writeUInt16LE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,2,65535,0),this[A]=c&255,this[A+1]=c>>>8,A+2},m.prototype.writeUint16BE=m.prototype.writeUInt16BE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,2,65535,0),this[A]=c>>>8,this[A+1]=c&255,A+2},m.prototype.writeUint32LE=m.prototype.writeUInt32LE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,4,4294967295,0),this[A+3]=c>>>24,this[A+2]=c>>>16,this[A+1]=c>>>8,this[A]=c&255,A+4},m.prototype.writeUint32BE=m.prototype.writeUInt32BE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,4,4294967295,0),this[A]=c>>>24,this[A+1]=c>>>16,this[A+2]=c>>>8,this[A+3]=c&255,A+4};function Wn(l,c,A,d,b){Ni(c,d,b,l,A,7);let C=Number(c&BigInt(4294967295));l[A++]=C,C=C>>8,l[A++]=C,C=C>>8,l[A++]=C,C=C>>8,l[A++]=C;let R=Number(c>>BigInt(32)&BigInt(4294967295));return l[A++]=R,R=R>>8,l[A++]=R,R=R>>8,l[A++]=R,R=R>>8,l[A++]=R,A}function Fi(l,c,A,d,b){Ni(c,d,b,l,A,7);let C=Number(c&BigInt(4294967295));l[A+7]=C,C=C>>8,l[A+6]=C,C=C>>8,l[A+5]=C,C=C>>8,l[A+4]=C;let R=Number(c>>BigInt(32)&BigInt(4294967295));return l[A+3]=R,R=R>>8,l[A+2]=R,R=R>>8,l[A+1]=R,R=R>>8,l[A]=R,A+8}m.prototype.writeBigUInt64LE=gt(function(c,A=0){return Wn(this,c,A,BigInt(0),BigInt("0xffffffffffffffff"))}),m.prototype.writeBigUInt64BE=gt(function(c,A=0){return Fi(this,c,A,BigInt(0),BigInt("0xffffffffffffffff"))}),m.prototype.writeIntLE=function(c,A,d,b){if(c=+c,A=A>>>0,!b){let se=Math.pow(2,8*d-1);pe(this,c,A,d,se-1,-se)}let C=0,R=1,J=0;for(this[A]=c&255;++C<d&&(R*=256);)c<0&&J===0&&this[A+C-1]!==0&&(J=1),this[A+C]=(c/R>>0)-J&255;return A+d},m.prototype.writeIntBE=function(c,A,d,b){if(c=+c,A=A>>>0,!b){let se=Math.pow(2,8*d-1);pe(this,c,A,d,se-1,-se)}let C=d-1,R=1,J=0;for(this[A+C]=c&255;--C>=0&&(R*=256);)c<0&&J===0&&this[A+C+1]!==0&&(J=1),this[A+C]=(c/R>>0)-J&255;return A+d},m.prototype.writeInt8=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,1,127,-128),c<0&&(c=255+c+1),this[A]=c&255,A+1},m.prototype.writeInt16LE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,2,32767,-32768),this[A]=c&255,this[A+1]=c>>>8,A+2},m.prototype.writeInt16BE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,2,32767,-32768),this[A]=c>>>8,this[A+1]=c&255,A+2},m.prototype.writeInt32LE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,4,2147483647,-2147483648),this[A]=c&255,this[A+1]=c>>>8,this[A+2]=c>>>16,this[A+3]=c>>>24,A+4},m.prototype.writeInt32BE=function(c,A,d){return c=+c,A=A>>>0,d||pe(this,c,A,4,2147483647,-2147483648),c<0&&(c=4294967295+c+1),this[A]=c>>>24,this[A+1]=c>>>16,this[A+2]=c>>>8,this[A+3]=c&255,A+4},m.prototype.writeBigInt64LE=gt(function(c,A=0){return Wn(this,c,A,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),m.prototype.writeBigInt64BE=gt(function(c,A=0){return Fi(this,c,A,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Mi(l,c,A,d,b,C){if(A+d>l.length)throw new RangeError("Index out of range");if(A<0)throw new RangeError("Index out of range")}function Oi(l,c,A,d,b){return c=+c,A=A>>>0,b||Mi(l,c,A,4),i.write(l,c,A,d,23,4),A+4}m.prototype.writeFloatLE=function(c,A,d){return Oi(this,c,A,!0,d)},m.prototype.writeFloatBE=function(c,A,d){return Oi(this,c,A,!1,d)};function Di(l,c,A,d,b){return c=+c,A=A>>>0,b||Mi(l,c,A,8),i.write(l,c,A,d,52,8),A+8}m.prototype.writeDoubleLE=function(c,A,d){return Di(this,c,A,!0,d)},m.prototype.writeDoubleBE=function(c,A,d){return Di(this,c,A,!1,d)},m.prototype.copy=function(c,A,d,b){if(!m.isBuffer(c))throw new TypeError("argument should be a Buffer");if(d||(d=0),!b&&b!==0&&(b=this.length),A>=c.length&&(A=c.length),A||(A=0),b>0&&b<d&&(b=d),b===d||c.length===0||this.length===0)return 0;if(A<0)throw new RangeError("targetStart out of bounds");if(d<0||d>=this.length)throw new RangeError("Index out of range");if(b<0)throw new RangeError("sourceEnd out of bounds");b>this.length&&(b=this.length),c.length-A<b-d&&(b=c.length-A+d);let C=b-d;return this===c&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(A,d,b):Uint8Array.prototype.set.call(c,this.subarray(d,b),A),C},m.prototype.fill=function(c,A,d,b){if(typeof c=="string"){if(typeof A=="string"?(b=A,A=0,d=this.length):typeof d=="string"&&(b=d,d=this.length),b!==void 0&&typeof b!="string")throw new TypeError("encoding must be a string");if(typeof b=="string"&&!m.isEncoding(b))throw new TypeError("Unknown encoding: "+b);if(c.length===1){let R=c.charCodeAt(0);(b==="utf8"&&R<128||b==="latin1")&&(c=R)}}else typeof c=="number"?c=c&255:typeof c=="boolean"&&(c=Number(c));if(A<0||this.length<A||this.length<d)throw new RangeError("Out of range index");if(d<=A)return this;A=A>>>0,d=d===void 0?this.length:d>>>0,c||(c=0);let C;if(typeof c=="number")for(C=A;C<d;++C)this[C]=c;else{let R=m.isBuffer(c)?c:m.from(c,b),J=R.length;if(J===0)throw new TypeError('The value "'+c+'" is invalid for argument "value"');for(C=0;C<d-A;++C)this[C+A]=R[C%J]}return this};let Ut={};function Zr(l,c,A){Ut[l]=class extends A{constructor(){super(),Object.defineProperty(this,"message",{value:c.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${l}]`,this.stack,delete this.name}get code(){return l}set code(b){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:b,writable:!0})}toString(){return`${this.name} [${l}]: ${this.message}`}}}Zr("ERR_BUFFER_OUT_OF_BOUNDS",function(l){return l?`${l} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Zr("ERR_INVALID_ARG_TYPE",function(l,c){return`The "${l}" argument must be of type number. Received type ${typeof c}`},TypeError),Zr("ERR_OUT_OF_RANGE",function(l,c,A){let d=`The value of "${l}" is out of range.`,b=A;return Number.isInteger(A)&&Math.abs(A)>2**32?b=Wi(String(A)):typeof A=="bigint"&&(b=String(A),(A>BigInt(2)**BigInt(32)||A<-(BigInt(2)**BigInt(32)))&&(b=Wi(b)),b+="n"),d+=` It must be ${c}. Received ${b}`,d},RangeError);function Wi(l){let c="",A=l.length,d=l[0]==="-"?1:0;for(;A>=d+4;A-=3)c=`_${l.slice(A-3,A)}${c}`;return`${l.slice(0,A)}${c}`}function hs(l,c,A){Gt(c,"offset"),(l[c]===void 0||l[c+A]===void 0)&&An(c,l.length-(A+1))}function Ni(l,c,A,d,b,C){if(l>A||l<c){let R=typeof c=="bigint"?"n":"",J;throw c===0||c===BigInt(0)?J=`>= 0${R} and < 2${R} ** ${(C+1)*8}${R}`:J=`>= -(2${R} ** ${(C+1)*8-1}${R}) and < 2 ** ${(C+1)*8-1}${R}`,new Ut.ERR_OUT_OF_RANGE("value",J,l)}hs(d,b,C)}function Gt(l,c){if(typeof l!="number")throw new Ut.ERR_INVALID_ARG_TYPE(c,"number",l)}function An(l,c,A){throw Math.floor(l)!==l?(Gt(l,A),new Ut.ERR_OUT_OF_RANGE("offset","an integer",l)):c<0?new Ut.ERR_BUFFER_OUT_OF_BOUNDS:new Ut.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${c}`,l)}let Ts=/[^+/0-9A-Za-z-_]/g;function bs(l){if(l=l.split("=")[0],l=l.trim().replace(Ts,""),l.length<2)return"";for(;l.length%4!==0;)l=l+"=";return l}function $r(l,c){c=c||1/0;let A,d=l.length,b=null,C=[];for(let R=0;R<d;++R){if(A=l.charCodeAt(R),A>55295&&A<57344){if(!b){if(A>56319){(c-=3)>-1&&C.push(239,191,189);continue}else if(R+1===d){(c-=3)>-1&&C.push(239,191,189);continue}b=A;continue}if(A<56320){(c-=3)>-1&&C.push(239,191,189),b=A;continue}A=(b-55296<<10|A-56320)+65536}else b&&(c-=3)>-1&&C.push(239,191,189);if(b=null,A<128){if((c-=1)<0)break;C.push(A)}else if(A<2048){if((c-=2)<0)break;C.push(A>>6|192,A&63|128)}else if(A<65536){if((c-=3)<0)break;C.push(A>>12|224,A>>6&63|128,A&63|128)}else if(A<1114112){if((c-=4)<0)break;C.push(A>>18|240,A>>12&63|128,A>>6&63|128,A&63|128)}else throw new Error("Invalid code point")}return C}function Ss(l){let c=[];for(let A=0;A<l.length;++A)c.push(l.charCodeAt(A)&255);return c}function Ps(l,c){let A,d,b,C=[];for(let R=0;R<l.length&&!((c-=2)<0);++R)A=l.charCodeAt(R),d=A>>8,b=A%256,C.push(b),C.push(d);return C}function Ei(l){return s.toByteArray(bs(l))}function Nn(l,c,A,d){let b;for(b=0;b<d&&!(b+A>=c.length||b>=l.length);++b)c[b+A]=l[b];return b}function rt(l,c){return l instanceof c||l!=null&&l.constructor!=null&&l.constructor.name!=null&&l.constructor.name===c.name}function Yr(l){return l!==l}let ws=function(){let l="0123456789abcdef",c=new Array(256);for(let A=0;A<16;++A){let d=A*16;for(let b=0;b<16;++b)c[d+b]=l[A]+l[b]}return c}();function gt(l){return typeof BigInt>"u"?Cs:l}function Cs(){throw new Error("BigInt not supported")}return Rt}var un,ji,En,_i,Rt,Zi,Yi=Bt(()=>{g();y();f();un={},ji=!1;En={},_i=!1;Rt={},Zi=!1});var vt,P,nA,rA,Ji=Bt(()=>{g();y();f();Yi();vt=$i();vt.Buffer;vt.SlowBuffer;vt.INSPECT_MAX_BYTES;vt.kMaxLength;P=vt.Buffer,nA=vt.INSPECT_MAX_BYTES,rA=vt.kMaxLength});var y=Bt(()=>{Ji()});import{bcs as Fe}from"@mysten/sui/bcs";function uo(s,i=["<",">"]){let[r,a]=i,o=[],u="",m=0;for(let p=0;p<s.length;p++){let h=s[p];if(h===r&&m++,h===a&&m--,m===0&&h===","){o.push(u.trim()),u="";continue}u+=h}return o.push(u.trim()),o}function Se(s){if(typeof s!="string")throw new Error(`Illegal type passed as a name of the type: ${s}`);let[i,r]=["<",">"],a=s.indexOf(i),o=Array.from(s).reverse().indexOf(r);if(a===-1&&o===-1)return{typeName:s,typeArgs:[]};if(a===-1||o===-1)throw new Error(`Unclosed generic in name '${s}'`);let u=s.slice(0,a),m=uo(s.slice(a+1,s.length-o-1),[i,r]);return{typeName:u,typeArgs:m}}function Fa(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function $(s,i){return Fa(i)?i:s.object(i)}function Le(s,i,r){if(Fa(i))return $(s,i);function a(T){let{typeName:S,typeArgs:w}=Se(T);switch(S){case"bool":return Fe.Bool;case"u8":return Fe.U8;case"u16":return Fe.U16;case"u32":return Fe.U32;case"u64":return Fe.U64;case"u128":return Fe.U128;case"u256":return Fe.U256;case"address":return Fe.Address;case"0x1::string::String":case"0x1::ascii::String":return Fe.String;case"0x2::object::ID":return Fe.Address;case"0x1::option::Option":return Fe.option(a(w[0]));case"vector":return Fe.vector(a(w[0]));default:throw new Error(`invalid primitive type ${T}`)}}function o(T){for(let S of T){if(typeof S>"u"||S===null)return!0;if(Array.isArray(S))return o(S)}return!1}function u(T){for(let S of T){if(!Array.isArray(S)){if(S===null)continue;switch(typeof S){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return u(S)}return!0}function m(T){for(let S of T){if(!Array.isArray(S))switch(typeof S){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return m(S)}return!1}let{typeName:p,typeArgs:h}=Se(r);switch(p){case"0x1::option::Option":if(i===null)return s.pure.option("bool",null);if(u([i]))return s.pure(a(r).serialize(i));if(m([i]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[h[0]],arguments:[Le(s,i,h[0])]});case"vector":if(!Array.isArray(i))throw new Error("expected an array for vector type");if(i.length===0)return s.pure(Fe.vector(Fe.Bool).serialize([]));if(o(i))throw new Error("the provided array contains undefined or null values");if(u(i))return s.pure(a(r).serialize(i));if(m(i))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:h[0],elements:i});default:return s.pure(a(r).serialize(i))}}function mo(s){let i=s.split("0x").join("");for(let r=0;r<i.length;r++)if(i[r]!=="0")return`0x${i.substring(r)}`;return"0x0"}function V(s){let{typeName:i,typeArgs:r}=Se(s);switch(i){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return i;case"vector":return`vector<${V(r[0])}>`;default:{let a=i.split("::");a[0]=mo(a[0]);let o=a.join("::");return r.length>0?`${o}<${r.map(u=>V(u)).join(",")}>`:o}}}function ee(s,...i){return i.length>0?`${s}<${i.join(", ")}>`:s}var he=Bt(()=>{"use strict";g();y();f()});var Tt=Jr((cp,Ma)=>{"use strict";g();y();f();he();var Ai=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return V(s.$PACKAGE_ID)}get PUBLISHED_AT(){return V(s.$PUBLISHED_AT)}get PKG_V1(){return V(s.$PKG_V[1])}setPackageId(i){s.$PACKAGE_ID=i}setPublishedAt(i){s.$PUBLISHED_AT=i}setPkgV(i,r){s.$PKG_V[i]=r}setAddress(i,r){s.$PACKAGE_ID=i,s.$PUBLISHED_AT=i,s.$PKG_V[1]=r||i}},lo=new Ai;Ma.exports=lo});var di=Jr((hp,Ga)=>{"use strict";g();y();f();he();var li=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return V(s.$PACKAGE_ID)}get PUBLISHED_AT(){return V(s.$PUBLISHED_AT)}get PKG_V1(){return V(s.$PKG_V[1])}setPackageId(i){s.$PACKAGE_ID=i}setPublishedAt(i){s.$PUBLISHED_AT=i}setPkgV(i,r){s.$PKG_V[i]=r}setAddress(i,r){s.$PACKAGE_ID=i,s.$PUBLISHED_AT=i,s.$PKG_V[1]=r||i}},po=new li;Ga.exports=po});var fi=Jr((vp,ja)=>{"use strict";g();y();f();he();var gi=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return V(s.$PACKAGE_ID)}get PUBLISHED_AT(){return V(s.$PUBLISHED_AT)}get PKG_V1(){return V(s.$PKG_V[1])}setPackageId(i){s.$PACKAGE_ID=i}setPublishedAt(i){s.$PUBLISHED_AT=i}setPkgV(i,r){s.$PKG_V[i]=r}setAddress(i,r){s.$PACKAGE_ID=i,s.$PUBLISHED_AT=i,s.$PKG_V[1]=r||i}},go=new gi;ja.exports=go});g();y();f();g();y();f();g();y();f();var Un={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",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},uA={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},mA={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"};g();y();f();g();y();f();g();y();f();import{TronWeb as Ro}from"tronweb";import{Web3 as vo}from"web3";g();y();f();g();y();f();g();y();f();var ce=class extends Error{errorCode;constructor(i,r){super(r),this.errorCode=i}},O=class extends ce{constructor(i){super("SdkError",i)}},ut=class extends ce{constructor(i){super("InvalidAmountError",i)}},Vt=class extends ce{constructor(i){super("AmountNotEnoughError",i)}},mt=class extends ce{constructor(i){super("InsufficientPoolLiquidityError",i)}},Te=class extends ce{constructor(i){super("JupiterError",i)}},mn=class extends ce{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},Gn=class extends ce{constructor(i){super("InvalidMessengerOptionError",i)}},Ae=class extends ce{constructor(i){super("MethodNotSupportedError",i)}},ln=class extends ce{constructor(i){super("VerifyTxError",i)}},jt=class extends ce{constructor(i){super("InvalidTxError",i)}},Vn=class extends ce{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},jn=class extends ce{constructor(i,r,a){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${r}' cannot be greater than '${a}'`)}},dn=class extends ce{constructor(i){super("TimeoutError",i)}},_n=class extends ce{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},Ie=class extends ce{constructor(i){super("CCTPDoesNotSupportedError",i)}},Re=class extends ce{constructor(i){super("OFTDoesNotSupportedError",i)}},Zn=class extends ce{constructor(i){super("YieldDoesNotSupportedError",i)}},$n=class extends ce{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ds=(F=>(F.SDK_ERROR="SdkError",F.INVALID_AMOUNT_ERROR="InvalidAmountError",F.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",F.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",F.JUPITER_ERROR="JupiterError",F.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",F.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",F.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",F.VERIFY_TX_ERROR="VerifyTxError",F.INVALID_TX_ERROR="InvalidTxError",F.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",F.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",F.TIMEOUT_ERROR="TimeoutError",F.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",F.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",F.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",F.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",F.TX_TOO_LARGE="TxTooLargeError",F))(Ds||{});g();y();f();var $e=(k=>(k.BSC="BSC",k.ETH="ETH",k.BAS="BAS",k.SOL="SOL",k.TRX="TRX",k.POL="POL",k.ARB="ARB",k.CEL="CEL",k.AVA="AVA",k.SRB="SRB",k.STLR="STLR",k.OPT="OPT",k.SUI="SUI",k.SNC="SNC",k.UNI="UNI",k))($e||{}),re=(u=>(u.EVM="EVM",u.SOLANA="SOLANA",u.TRX="TRX",u.SRB="SRB",u.SUI="SUI",u))(re||{});var Ws={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},Ns={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"},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"}},X=(()=>{let s={...Ns};return{addChainsProperties(i){s={...s,...i}},getChainProperty(i){let r=s[i];if(!r)throw new O(`Cannot find chain properties for ${i}`);return r},getChainsProperties(){return s},getChainDecimalsByType(i){return Ws[i]}}})();g();y();f();var Kr=(m=>(m.OK="OK",m.INVALID="INVALID",m.FORBIDDEN="FORBIDDEN",m.UNINITIALIZED="UNINITIALIZED",m.CONTRACT_ADDRESS="CONTRACT_ADDRESS",m.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",m))(Kr||{});var Ye=(u=>(u[u.ALLBRIDGE=1]="ALLBRIDGE",u[u.WORMHOLE=2]="WORMHOLE",u[u.CCTP=3]="CCTP",u[u.CCTP_V2=4]="CCTP_V2",u[u.OFT=5]="OFT",u))(Ye||{});g();y();f();import{Big as Li}from"big.js";async function ge(s,i){return await s.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function K(s){if(Li(s).lte(0))throw new ut("Amount must be greater than zero")}function z(s,i,r){let a=Li(i).toFixed(),[o,u]=a.split(".");if(u&&u.length>r)throw new jn(s,u.length,r)}async function Yn(s,i,r){return await Promise.race([s,new Promise((a,o)=>{setTimeout(()=>o(new dn(i)),r)})])}async function Hr(s,i,r,a){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await Yn(s(),i,a)}catch{if(++o>=r)throw new dn(i)}}async function Xi(s,i,r,a=1.5,o=!1){let u=[],m=0,p=await s();if(u.push(p),!i(p))return u;let h=new Date(Date.now()+r*1e3).valueOf(),T=1e3,S=T;for(;Date.now()<h;){let w=u[u.length-1];if(w===void 0||!i(w))break;m++,o&&console.info(`Waiting ${T}ms before trying again (bringing the total wait time to ${S}ms so far, of total ${r*1e3}ms)`),await new Promise(v=>setTimeout(v,T)),T=T*a,new Date(Date.now()+T).valueOf()>h&&(T=h-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${T}ms`)),S=T+S;let x=await s(w);u.push(x),o&&i(x)&&console.info(`${m}. Called ${s.name}; ${u.length} prev attempts. Most recent: ${JSON.stringify(u[u.length-1],null,2)}`)}return u}g();y();f();import{Big as Ks}from"big.js";g();y();f();var Es={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"}]},Ki=Es;g();y();f();var Us={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:"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:"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"}]},Hi=Us;g();y();f();var Gs={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"}]},Qi=Gs;g();y();f();import*as Xn from"@project-serum/anchor";import{PublicKey as ya}from"@solana/web3.js";g();y();f();import*as be from"@project-serum/anchor";import{PublicKey as ve}from"@solana/web3.js";async function Qe(s,i){return be.utils.token.associatedAddress({mint:i,owner:s})}async function ft(s){let[i]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("config")],s);return i}async function zi(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],i);return r}async function pn(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],i);return r}async function _t(s){let i=await ft(s),[r]=await ve.findProgramAddress([i.toBuffer()],s);return r}async function qi(s,i){let[r]=await ve.findProgramAddress([s.toBuffer()],i);return r}async function Zt(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("token"),s.toBytes()],i);return r}async function ea(s,i,r){let[a]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("other_bridge_token"),P.from([s]),i],r);return a}async function Qr(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],i);return r}async function zr(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],i);return r}async function ta(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("sent_message"),s],i);return r}async function qr(s,i,r){let[a]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),s.toBytes()],r);return a}async function na(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],i);return r}async function ra(s,i){let[r]=await ve.findProgramAddress([be.utils.bytes.utf8.encode("token"),s.toBytes()],i);return r}function ia(s,i){let[r]=ve.findProgramAddressSync([be.utils.bytes.utf8.encode("lock"),i.toBuffer()],s);return r}function aa(s,i,r,a){let o=kt("message_transmitter",r),u=kt("token_messenger",a),m=kt("__event_authority",a),p=kt("token_minter",a),h=kt("local_token",a,[i]),T=kt("remote_token_messenger",a,[s.toString()]),S=kt("sender_authority",a);return{messageTransmitterAccount:o,tokenMessenger:u,tokenMessengerEventAuthority:m,tokenMinter:p,localToken:h,remoteTokenMessengerKey:T,authorityPda:S}}function kt(s,i,r=[]){let a=[P.from(be.utils.bytes.utf8.encode(s))];for(let u of r)typeof u=="string"?a.push(P.from(be.utils.bytes.utf8.encode(u))):Array.isArray(u)?a.push(P.from(Uint8Array.from(u))):P.isBuffer(u)?a.push(P.from(Uint8Array.from(u))):a.push(P.from(Uint8Array.from(u.toBuffer())));return ve.findProgramAddressSync(a,i)[0]}g();y();f();import{AnchorProvider as Vs}from"@project-serum/anchor";import{Connection as js,PublicKey as _s}from"@solana/web3.js";function yt(s,i){let r=new js(s,"confirmed"),a=new _s(i);return new Vs(r,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}g();y();f();import{PublicKey as Zs}from"@solana/web3.js";import{Address as $s}from"@stellar/stellar-sdk";import{Big as Ne}from"big.js";import pa from"randombytes";import{utils as la}from"tronweb";g();y();f();import{Big as E}from"big.js";import ei from"bn.js";g();y();f();function ti(s,i){return E(100).minus(E(100).times(i).div(s)).toNumber()}function xt(s,i){return Je(s,i,3).round(0,E.roundDown)}function We(s,i){return Je(s,3,i)}function Je(s,i,r){let a=E(r).minus(i).toNumber();return E(s).times(gn(a))}function gn(s){return E(10).pow(s)}function Z(s,i){return E(s).times(gn(i))}function j(s,i){let r=E(s);return r.eq(0)?E(0):E(r).div(gn(i))}function ke(s){return j(E(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function it(s,{feeShare:i,decimals:r},a){let o=E(s);if(o.lte(0))return"0";let u=o.times(i),m=o.minus(u),p=xt(m,r),h=E(a.tokenBalance).plus(p),T=at(h,a.aValue,a.dValue);return E(a.vUsdBalance).minus(T).round(0,E.roundDown).toFixed()}function fn(s,{feeShare:i,decimals:r},a){let o=E(s);if(o.lte(0))return E(0).toFixed();let u=o.plus(a.vUsdBalance),m=at(u,a.aValue,a.dValue),p=We(E(a.tokenBalance).minus(m),r),h=E(p).times(i);return E(p).minus(h).round(0,E.roundDown).toFixed()}function sa(s,i){let r=E(s);if(r.lte(0))return i;let a=r.plus(i.vUsdBalance),o=at(a,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:o.toFixed(0),vUsdBalance:a.toFixed(0)}}function oa(s,{feeShare:i,decimals:r},a){if(E(s).lte(0))return E(0);let o=E(a.vUsdBalance).minus(s);if(o.lte(0))throw new mt;let u=at(o,a.aValue,a.dValue),m=E(u).minus(a.tokenBalance),p=We(m,r),h=E(i).div(E(1).minus(i)),T=E(p).times(h).round(0,E.roundUp);return E(p).plus(T).round(0,E.roundDown)}function ca(s,{feeShare:i,decimals:r},a){if(E(s).lte(0))return E(0);let o=E(i).div(E(1).minus(i)),u=E(s).times(o).round(0,E.roundUp),m=E(s).plus(u),p=xt(m,r),h=E(a.tokenBalance).minus(p);if(h.lte(0))throw new mt;let T=at(h,a.aValue,a.dValue);return E(T).minus(a.vUsdBalance).round(0,E.roundDown)}function at(s,i,r){let a=E(4).times(i).times(E(r).minus(s)).minus(r),o=E(r).pow(3),u=a.pow(2),m=E(s).times(E(s).times(u).plus(E(4).times(i).times(o))).sqrt().round(0,E.roundDown),p=E(8).times(i).times(s),h=a.times(s).plus(m).div(p).round(0,E.roundDown);return h.eq(0)?E(0):h.plus(1)}function Aa(s,i,r,a){let o=new ei(s),u=new ei(r),m=new ei(i);return o.mul(u).shrn(a).sub(m).toString()}function ua(s){return E(s).gt(0)?`${Number(E(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ma(s,i,r){let a=E(i).times(r),o=E(i).plus(r),u=E(8).times(s).times(a).times(o),m=a.times(E(16).times(s).minus(4)).div(3),p=u.times(u),h=m.times(m).times(m),T=p.plus(h),S=E(T).sqrt(),w=E(Math.cbrt(+u.plus(S).toFixed())),x=E(Math.cbrt(+u.minus(S).toFixed()));return w.plus(x).toFixed()}function lt(s,i,r){let a;switch(i){case"EVM":{a=da(s);break}case"SOLANA":{a=new Zs(s).toBuffer();break}case"TRX":{a=Ys(s);break}case"SRB":{a=new $s(s).toBuffer();break}case"SUI":{a=da(s);break}}switch(r){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a;case"SRB":return a.toJSON().data;case"SUI":return"0x"+a.toString("hex")}}function ze(s){return s.replace(/^0x/i,"")}function ga(s){return P.from(s.replace(/^0x/i,""),"hex")}function da(s){let r=ga(s);return P.concat([P.alloc(32-r.length,0),r],32)}function Ys(s){let i=yn(s),r=ga(i);return Js(r,32)}function yn(s){let i=la.crypto.decodeBase58Address(s);return i?la.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function Js(s,i){if(s.length>=i)return s;let r=P.alloc(i,0);return s.copy(r,i-s.length),r}function Jn(){return pa(32)}function st(){let s=pa(32).readBigInt64BE();return s<0?s*-1n:s}function ot(s,i){let r={},a=i.sourceToken;if(r.amount=Z(i.amount,a.decimals).toFixed(),r.contractAddress=a.bridgeAddress,r.fromAccountAddress=i.fromAccountAddress,s==="SUI"){if(!a.originTokenAddress)throw new O("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=a.originTokenAddress}else r.fromTokenAddress=lt(a.tokenAddress,s,s);if(r.toAccountAddress=i.toAccountAddress,s==="SUI"){if(!i.destinationToken.originTokenAddress)throw new O("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=i.destinationToken.originTokenAddress}else r.toTokenAddress=lt(i.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=i.minimumReceiveAmount?Z(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",r}async function qe(s,i,r){let a={};a.fromChainId=i.sourceToken.allbridgeChainId,a.fromChainSymbol=i.sourceToken.chainSymbol;let o=X.getChainProperty(i.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!i.sourceToken.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");a.fromTokenAddress=i.sourceToken.originTokenAddress}else a.fromTokenAddress=i.sourceToken.tokenAddress;a.toChainId=i.destinationToken.allbridgeChainId,a.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let u=i.sourceToken;switch(i.messenger){case 3:if(!u.cctpAddress||!i.destinationToken.cctpAddress)throw new Ie("Such route does not support CCTP protocol");a.contractAddress=u.cctpAddress;break;case 4:if(!u.cctpV2Address||!i.destinationToken.cctpV2Address)throw new Ie("Such route does not support CCTP V2 protocol");a.contractAddress=u.cctpV2Address;break;case 5:if(!u.oftBridgeAddress||!i.destinationToken.oftBridgeAddress||u.oftId!==i.destinationToken.oftId)throw new Re("Such route does not support OFT protocol");a.contractAddress=u.oftBridgeAddress;break;case 1:case 2:a.contractAddress=u.bridgeAddress;break}a.messenger=i.messenger,a.fromAccountAddress=i.fromAccountAddress,a.amount=Z(i.amount,u.decimals).toFixed();let{fee:m,feeFormat:p}=i;if(!m){let w=(await ni(i.sourceToken,a.toChainId,a.messenger,r))[a.gasFeePaymentMethod];if(!w)throw new mn;m=w.int,p="int"}if(p=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=Z(m,X.getChainDecimalsByType(u.chainType)).toFixed(0);break;case"stablecoin":a.fee=Z(m,u.decimals).toFixed(0);break}else a.fee=m;let{extraGas:h,extraGasFormat:T}=i;if(h&&+h>0){let S=await ri(u,i.destinationToken,a.messenger,r),w,x;switch(a.gasFeePaymentMethod){case"native":w=X.getChainDecimalsByType(u.chainType),x=Ne(S.exchangeRate);break;case"stablecoin":w=u.decimals,x=Ne(S.exchangeRate).div(S.sourceNativeTokenPrice);break}switch(T??"int"){case"float":{a.extraGas=Z(h,w).toFixed(0);let v=x.mul(h);a.extraGasDest=Z(v,X.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,Ne.roundDown);break}case"int":{a.extraGas=h;let v=j(a.extraGas,X.getChainDecimalsByType(u.chainType)),M=x.mul(v);a.extraGasDest=Z(M,X.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,Ne.roundDown);break}}Xs(a.extraGas,a.gasFeePaymentMethod,S)}return s!=="SUI"&&(a.fromTokenAddress=lt(a.fromTokenAddress,s,s)),a.toAccountAddress=lt(i.toAccountAddress,o,s),a.toTokenAddress=lt(a.toTokenAddress,o,s),a.gasFeePaymentMethod=="stablecoin"&&Ls(a.amount,u.decimals,a.fee,a.extraGas),a}function Ls(s,i,r,a){let o=Ne(s).minus(r).minus(a??0);if(o.lte(0))throw new Vt(`Amount not enough to pay fee, ${j(Ne(o).minus(1).neg(),i).toFixed()} stables is missing`)}async function ni(s,i,r,a){let o=await a.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:i,messenger:r,sourceToken:s.tokenAddress}),u={native:{int:o.fee,float:j(o.fee,X.getChainDecimalsByType(s.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let m=Je(new Ne(o.fee).mul(o.sourceNativeTokenPrice),X.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,Ne.roundUp);u.stablecoin={int:m,float:j(m,s.decimals).toFixed()}}return u}function Xs(s,i,r){let a=r.extraGasMax[i];if(!a)throw new mn(`Impossible to pay extra gas by '${i}' payment method`);let o=a.int;if(Ne(s).gt(o))throw new Vn(`Extra gas ${s} in int format, exceeded limit ${o} for '${i}' payment method`)}async function ri(s,i,r,a){let o={},u=await a.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:r,sourceToken:s.tokenAddress}),m=i.txCostAmount.maxAmount,p=j(m,X.getChainDecimalsByType(i.chainType)).toFixed(),h=Ne(p).div(u.exchangeRate).toFixed(X.getChainDecimalsByType(s.chainType),Ne.roundDown),T=Z(h,X.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:T,float:h},u.sourceNativeTokenPrice){let S=Ne(h).mul(u.sourceNativeTokenPrice).toFixed(s.decimals,Ne.roundDown);o.stablecoin={int:Z(S,s.decimals).toFixed(0),float:S}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:m,float:p},swap:{int:i.txCostAmount.swap,float:j(i.txCostAmount.swap,X.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:j(i.txCostAmount.transfer,X.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:u.exchangeRate,sourceNativeTokenPrice:u.sourceNativeTokenPrice}}function fa(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function Kn(s,i,r,a){let o,u=new ya(i),m=new ya(r),p=await Qe(u,m),h=yt(a,i);Xn.setProvider(h);let T=await Xn.Spl.token(h).account.token.fetchNullable(p);if(T?.authority.equals(u))o=lt(p.toBase58(),"SOLANA",s);else{let S=await h.connection.getTokenAccountsByOwner(u,{mint:m});if(S.value.length===0&&!T)o=lt(p.toBase58(),"SOLANA",s);else if(S.value.length>0){let w=S.value[0];if(!w?.pubkey)throw new O("First token account or its public key is undefined");o=lt(w.pubkey.toBase58(),"SOLANA",s)}else throw new O("Associated account has wrong owner")}return o}g();y();f();g();y();f();var Ee=class{};var hn=class extends Ee{constructor(r,a,o){super();this.web3=r;this.api=a;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(r){let a=await this.buildRawTransactionSend(r);return this.sendRawTransaction(a)}async buildRawTransactionSwap(r){let a=ot(this.chainType,r);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(r){let{amount:a,contractAddress:o,fromAccountAddress:u,fromTokenAddress:m,toAccountAddress:p,toTokenAddress:h,minimumReceiveAmount:T}=r,w=this.getBridgeContract(o).methods.swap(a,m,h,p,T);return Promise.resolve({from:u,to:o,data:w.encodeABI()})}async buildRawTransactionSend(r){let a=await qe(this.chainType,r,this.api),{amount:o,contractAddress:u,fromAccountAddress:m,fromTokenAddress:p,toChainId:h,toAccountAddress:T,toTokenAddress:S,messenger:w,fee:x,gasFeePaymentMethod:v,extraGas:M,extraGasDest:k}=a,D="0x"+Jn().toString("hex"),N,F,W=x;switch(M&&(W=Ks(W).plus(M).toFixed()),w){case 3:case 4:{let U=await this.buildRawTransactionCctpSend(r,a,W);N=U.sendMethod,F=U.value;break}case 5:{let U=this.buildRawTransactionOftSend(r,a,W,k);N=U.sendMethod,F=U.value;break}case 1:case 2:{let U=this.getBridgeContract(u);v==="stablecoin"?(N=U.methods.swapAndBridge(p,o,T,h,S,D,w,W),F="0"):(N=U.methods.swapAndBridge(p,o,T,h,S,D,w,0),F=W)}break}return Promise.resolve({from:m,to:u,value:F,data:N.encodeABI()})}async buildRawTransactionCctpSend(r,a,o){let{amount:u,contractAddress:m,toChainId:p,toAccountAddress:h,gasFeePaymentMethod:T}=a,S=this.getCctpBridgeContract(m),w,x;if(r.destinationToken.chainType==="SOLANA"){let v=await Kn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T==="stablecoin"?(w=S.methods.bridgeWithWalletAddress(u,v,h,p,o),x="0"):(w=S.methods.bridgeWithWalletAddress(u,v,h,p,0),x=o)}else T==="stablecoin"?(w=S.methods.bridge(u,h,p,o),x="0"):(w=S.methods.bridge(u,h,p,0),x=o);return{sendMethod:w,value:x}}buildRawTransactionOftSend(r,a,o,u){let{amount:m,contractAddress:p,toChainId:h,toAccountAddress:T,gasFeePaymentMethod:S}=a,w=this.getOftBridgeContract(p),x,v;return S==="stablecoin"?(x=w.methods.bridge(r.sourceToken.tokenAddress,m,T,h,o,u??"0","10"),v="0"):(x=w.methods.bridge(r.sourceToken.tokenAddress,m,T,h,0,u??"0","10"),v=o),{sendMethod:x,value:v}}async sendRawTransaction(r){let a=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:u}=await this.web3.eth.sendTransaction({...r,gas:a,...o});return{txId:u.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(Ki.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(Hi.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(Qi.abi,r)}};g();y();f();var Hn=class{constructor(i,r,a,o){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a;this.tokenService=o}async approve(i,r){let a,o;r?(a=i,o=r):o=i;let u=Tn(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:u},a)}async send(i,r){return K(i.amount),z("amount",i.amount,i.sourceToken.decimals),fa(i)?Qn(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(i):Qn(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(i)}};g();y();f();import{BN as Jt,Program as si,Spl as ao,web3 as ht}from"@project-serum/anchor";import{Keypair as ka,PublicKey as ae,SystemProgram as so}from"@solana/web3.js";import{Big as et}from"big.js";g();y();f();var bn={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{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:"PoolInfo 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"}]};g();y();f();var ha={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};g();y();f();import{Spl as Hs}from"@project-serum/anchor";import Qs from"big.js";import{Web3 as zn}from"web3";async function $t(s,i){return await Hs.token(i).account.token.fetch(s)}async function Ta(s,i,r){let a=await i.account.pool.fetch(r),o=a.decimals,u=Qs(a.feeShareBp.toString()).div(1e4).toFixed(),m={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return it(s,{decimals:o,feeShare:u},m)}function ba(s){let i=s.amount,r="0x"+s.recipient.toString("hex"),a=s.sourceChainId,o=s.destinationChainId,u="0x"+s.receiveToken.toString("hex"),m="0x"+s.nonce.toString("hex"),p=1,h="0x"+s.chainBridge.toString("hex"),T=zn.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:r},{t:"uint256",v:a},{t:"bytes32",v:u},{t:"uint256",v:m},{t:"uint8",v:p});if(!T)throw new O("message cannot be undefined");let S=zn.utils.keccak256(P.from(T.replace("0x",""),"hex")),w=P.from(S.replace("0x",""),"hex");w[0]=a,w[1]=o;let x=zn.utils.encodePacked({t:"bytes32",v:"0x"+w.toString("hex")},{t:"bytes32",v:h});if(!x)throw new jt("messageWithSigner cannot be undefined");let v=zn.utils.keccak256(P.from(x.replace("0x",""),"hex")),M=P.from(v.replace("0x",""),"hex");return M[0]=w[0],M[1]=w[1],M}g();y();f();import{ComputeBudgetInstruction as Pa,ComputeBudgetProgram as qn,Connection as wa,TransactionMessage as zs}from"@solana/web3.js";import{Big as qs}from"big.js";g();y();f();import{AddressLookupTableAccount as Sa}from"@solana/web3.js";async function Mt(s,i){return await Promise.all(s.message.addressTableLookups.map(async r=>new Sa({key:r.accountKey,state:Sa.deserialize(await i.getAccountInfo(r.accountKey).then(a=>{if(!a)throw new O("Cannot get AccountInfo");return a.data}))})))}g();y();f();g();y();f();var ii="AUTO";async function Yt(s,i,r){let a=new wa(r,"confirmed"),o=(await a.simulateTransaction(s)).value.unitsConsumed;await Ba(s.instructions,o,i,a)}async function Ca(s,i,r){let a=new wa(r,"confirmed"),o=await Mt(s,a),u=zs.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new $n;await Ba(u.instructions,769230,i,a),s.message=u.compileToV0Message(o)}async function Ba(s,i,r,a){if(i>0){let o=eo(i,s);if(r?.solana){let u=r.solana;if(u===ii)await ai(s,a);else if("pricePerUnitInMicroLamports"in u)await ai(s,a,u.pricePerUnitInMicroLamports);else{let m=qs(u.extraFeeInLamports).div(o).mul(gn(6)).toFixed(0);await ai(s,a,m)}}}}function eo(s,i){let r=i.findIndex(u=>u.programId.equals(qn.programId)&&Pa.decodeInstructionType(u)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),o=qn.setComputeUnitLimit({units:a});return r>=0?i[r]=o:i.push(o),a.toString()}async function ai(s,i,r){let a=s.findIndex(m=>m.programId.equals(qn.programId)&&Pa.decodeInstructionType(m)==="SetComputeUnitPrice"),o=BigInt(r||await to(i)),u=qn.setComputeUnitPrice({microLamports:o});return a>=0?s[a]=u:s.push(u),o.toString()}async function to(s){let i=await s.getRecentPrioritizationFees(),r=0;for(let a of i)r+=a.prioritizationFee;return(r/i.length).toFixed(0)}g();y();f();import{NATIVE_MINT as no}from"@solana/spl-token";import{Connection as ro,TransactionMessage as Ia,VersionedTransaction as io}from"@solana/web3.js";import Ra,{AxiosError as va}from"axios";var er=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(i,r){this.connection=new ro(i),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(i,r,a,o){let u;try{let w=o?"ExactOut":"ExactIn",x=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${no.toString()}&amount=${a}&swapMode=${w}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(x+=`&maxAccounts=${this.maxAccounts}`),u=await Ra.get(x,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(w){throw w instanceof va&&w.response&&w.response.data&&w.response.data.error?new Te(w.response.data.error):new Te("Cannot get route")}let m;if(o&&u?.data?.inAmount)m=u.data.inAmount;else if(o)throw new Te("Cannot get inAmount");let p;try{p=await Ra.post(`${this.jupiterUrl}/swap`,{quoteResponse:u.data,userPublicKey:i,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(w){throw w instanceof va&&w.response&&w.response.data&&w.response.data.error?new Te(w.response.data.error):new Te("Cannot get swap transaction")}let h;if(p?.data?.swapTransaction)h=p.data.swapTransaction;else throw new Te("Cannot get swap transaction");let T=P.from(h,"base64"),S=io.deserialize(T);return o?{tx:S,amountIn:m}:{tx:S}}async amendJupiterWithSdkTx(i,r){try{let a=await Mt(i,this.connection),o=await Mt(r,this.connection),u=Ia.decompile(i.message,{addressLookupTableAccounts:a}),m=Ia.decompile(r.message,{addressLookupTableAccounts:o});if(m.instructions.shift(),u.instructions.push(...m.instructions),a.push(...o),i.message=u.compileToV0Message(a),r.message.header.numRequiredSignatures===2&&i.signatures.length===1){let p=r.signatures[0];if(!p)throw new O("Signature is undefined");i.signatures.push(p)}return i}catch(a){throw a instanceof Error&&a.message?new Te(`Some error occurred during creation final swap and bridge transaction. ${a.message}`):new Te("Some error occurred during creation final swap and bridge transaction")}}};var oi=1e6,xa=1.1,tr=class extends Ee{constructor(r,a,o){super();this.solanaRpcUrl=r;this.params=a;this.api=o;this.jupiterService=new er(r,a.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let a=ot(this.chainType,r);return await this.buildSwapTransaction(a,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,a,o,u){let{fromAccountAddress:m,amount:p,contractAddress:h,fromTokenAddress:T,toTokenAddress:S,toAccountAddress:w,minimumReceiveAmount:x}=r,v=m,M=h,k=T,D=S,N=o,F=w,W=new ae(v),U=yt(this.solanaRpcUrl,W.toString()),_=new si(bn,M,U),L=await _t(_.programId),we=await ft(_.programId),le=new ae(k),Ve=await Zt(le,_.programId),je=new ae(a),Ke=await Qe(W,le),Me=new ae(F),ye=new ae(D),Ce=await Zt(ye,_.programId),Oe=new ae(N),Be=await Qe(Me,ye),_e=[ht.ComputeBudgetProgram.setComputeUnitLimit({units:oi})];try{await $t(Be,U)}catch{let Wn=await ao.associatedToken(U).methods.create().accounts({mint:ye,owner:Me,associatedAccount:Be}).instruction();_e.push(Wn)}let Ze=await _.methods.swap(new Jt(p),new Jt(x||0)).accounts({payer:W,config:we,bridgeAuthority:L,user:W,sendBridgeToken:Ve,sendMint:le,sendPool:je,sendUserToken:Ke,receiveBridgeToken:Ce,receiveMint:ye,receivePool:Oe,receiveUserToken:Be}).preInstructions(_e).transaction(),De=U.connection;return Ze.recentBlockhash=(await De.getLatestBlockhash()).blockhash,Ze.feePayer=W,await Yt(Ze,u,this.solanaRpcUrl),await this.convertToVersionedTransaction(Ze,De)}async buildRawTransactionSend(r){let a=await qe(this.chainType,r,this.api),o=this.addPoolAddress(r,a),u=o.gasFeePaymentMethod=="stablecoin",m;if(u)try{let{tx:T,solTxSendUpdatedParams:S}=await this.processJup(o,r,!0);m=T,o={...o,...S}}catch{try{let{tx:S,solTxSendUpdatedParams:w}=await this.processJup(o,r,!1);m=S,o={...o,...w}}catch(S){throw S instanceof ce?S:S instanceof Error&&S.message?new Te(`Some error occurred during creation Jupiter swap transaction. ${S.message}`):new Te("Some error occurred during creation Jupiter swap transaction")}}let p,h;switch(a.messenger){case 1:{let T=await this.prepareSwapAndBridgeData(o);p=await this.buildSwapAndBridgeAllbridgeTransaction(T);break}case 2:{let T=await this.prepareSwapAndBridgeData(o),{transaction:S,messageAccount:w}=await this.buildSwapAndBridgeWormholeTransaction(T);p=S,h=w;break}case 3:case 4:{let T=await this.prepareSwapAndBridgeCctpData(o),{transaction:S,messageSentEventDataKeypair:w}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,T);p=S,h=w;break}case 5:throw new Re("Messenger OFT is not supported yet.")}if(u){if(!m)throw new Te("Swap tx is absent");p=await this.jupiterService.amendJupiterWithSdkTx(m,p)}return await Ca(p,r.txFeeParams,this.solanaRpcUrl),h&&p.sign([h]),p}async processJup(r,a,o){let{fee:u,extraGas:m,gasFeePaymentMethod:p}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(a.sourceToken,r),h=o?et(u):et(r.fee);m&&(h=h.plus(m)),o||(h=h.mul(xa));let{tx:T,amountIn:S}=await this.jupiterService.getJupiterSwapTx(a.fromAccountAddress,a.sourceToken.tokenAddress,h.toFixed(0),o),w;if(o){if(!S)throw new Te("Cannot get inAmount");w=et(r.amount).minus(et(S).mul(xa)).toFixed(0)}else w=et(r.amount).minus(h).toFixed(0);if(et(w).lte(0))throw new Vt(`Amount not enough to pay fee, ${j(et(w).minus(1).neg(),a.sourceToken.decimals).toFixed()} stables is missing`);return{tx:T,solTxSendUpdatedParams:{amount:w,fee:u,extraGas:m,gasFeePaymentMethod:p}}}addPoolAddress(r,a){return{...a,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,a){if(a.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger,sourceToken:r.tokenAddress})).sourceNativeTokenPrice,u=et(a.fee).div(o).mul(et(10).pow(X.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0),m;return a.extraGas&&(m=et(a.extraGas).div(o).mul(et(10).pow(X.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0)),{fee:u,extraGas:m,gasFeePaymentMethod:"native"}}return{fee:a.fee,extraGas:a.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,a,o){return ht.SystemProgram.transfer({fromPubkey:a,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:a,contractAddress:o,fromChainId:u,fromAccountAddress:m,fromTokenAddress:p,toChainId:h,toAccountAddress:T,toTokenAddress:S,poolAddress:w,extraGas:x}=r,v=p,M=m,k=h,D=S,N=T,F=o,W=u,U=yt(this.solanaRpcUrl,M),_=new si(bn,F,U),L=Array.from(Jn()),we=new ae(w),le=await Ta(a,_,we),Ve=await zi(L,_.programId),je=await _t(_.programId),Ke=await Qe(new ae(M),new ae(v)),Me=await Zt(new ae(v),_.programId),ye=await Qr(k,_.programId),Ce=await ea(k,P.from(D),_.programId),Oe=await ft(_.programId),Be=await _.account.config.fetch(Oe),_e=await pn(k,Be.gasOracleProgramId),Ze=await pn(W,Be.gasOracleProgramId),De=ba({amount:le,recipient:P.from(N),nonce:P.from(L),receiveToken:P.from(D),destinationChainId:k,sourceChainId:W,chainBridge:(await _t(_.programId)).toBuffer()}),G={};return G.bridge=_,G.amount=new Jt(a),G.vusdAmount=new Jt(le),G.nonce=L,G.recipient=Array.from(N),G.receiveToken=Array.from(D),G.poolAccount=we,G.lockAccount=Ve,G.bridgeAuthority=je,G.userToken=Ke,G.bridgeTokenAccount=Me,G.chainBridgeAccount=ye,G.otherBridgeTokenAccount=Ce,G.userAccount=new ae(M),G.destinationChainId=k,G.mint=new ae(v),G.config=Oe,G.configAccountInfo=Be,G.gasPrice=_e,G.thisGasPrice=Ze,G.message=De,x&&(G.extraGasInstruction=this.getExtraGasInstruction(x,G.userAccount,Oe)),G}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:a,vusdAmount:o,nonce:u,recipient:m,receiveToken:p,poolAccount:h,lockAccount:T,bridgeAuthority:S,userToken:w,bridgeTokenAccount:x,chainBridgeAccount:v,otherBridgeTokenAccount:M,userAccount:k,destinationChainId:D,mint:N,config:F,configAccountInfo:W,gasPrice:U,thisGasPrice:_,message:L,extraGasInstruction:we}=r,le=W.allbridgeMessengerProgramId,Ve=await zr(D,le),je=await ft(le),Ke=await ta(L,le),Me=[];we&&Me.push(we);let ye=await a.methods.swapAndBridge({vusdAmount:o,nonce:u,destinationChainId:D,recipient:m,receiveToken:p}).accounts({mint:N,user:k,config:F,lock:T,pool:h,gasPrice:U,thisGasPrice:_,bridgeAuthority:S,userToken:w,bridgeToken:x,chainBridge:v,messenger:le,messengerGasUsage:Ve,messengerConfig:je,sentMessageAccount:Ke,otherBridgeToken:M}).preInstructions([ht.ComputeBudgetProgram.setComputeUnitLimit({units:oi})]).postInstructions(Me).transaction(),Ce=yt(this.solanaRpcUrl,k.toString()).connection;return ye.recentBlockhash=(await Ce.getLatestBlockhash()).blockhash,ye.feePayer=k,await this.convertToVersionedTransaction(ye,Ce)}async convertToVersionedTransaction(r,a){let o=await a.getAddressLookupTable(new ae(this.params.solanaLookUpTable)).then(m=>m.value);if(!o)throw new O("Cannot find allbridgeLookupTableAccount");let u=new ht.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new ht.VersionedTransaction(u)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:a,vusdAmount:o,nonce:u,recipient:m,receiveToken:p,poolAccount:h,lockAccount:T,bridgeAuthority:S,userToken:w,bridgeTokenAccount:x,chainBridgeAccount:v,otherBridgeTokenAccount:M,userAccount:k,destinationChainId:D,mint:N,config:F,configAccountInfo:W,gasPrice:U,thisGasPrice:_,message:L,extraGasInstruction:we}=r,le=this.params.wormholeMessengerProgramId,[Ve]=ae.findProgramAddressSync([P.from("Bridge")],new ae(le)),[je]=ae.findProgramAddressSync([P.from("fee_collector")],new ae(le)),[Ke]=ae.findProgramAddressSync([P.from("Sequence"),S.toBuffer()],new ae(le)),Me=await zr(D,W.wormholeMessengerProgramId),ye=await ft(W.wormholeMessengerProgramId),Ce=ka.generate(),Oe=yt(this.solanaRpcUrl,k.toString()),Be=await Oe.connection.getAccountInfo(Ve);if(Be==null)throw new O("Cannot fetch wormhole bridge account info");let _e=new Jt(Be.data.slice(16,24),"le").toString(),Ze=so.transfer({fromPubkey:k,toPubkey:je,lamports:+_e}),De=[];we&&De.push(we);let G={mint:N,user:k,config:F,lock:T,pool:h,gasPrice:U,thisGasPrice:_,bridgeAuthority:S,userToken:w,bridgeToken:x,chainBridge:v,otherBridgeToken:M,messengerGasUsage:Me,wormholeProgram:le,bridge:Ve,message:Ce.publicKey,wormholeMessenger:W.wormholeMessengerProgramId,sequence:Ke,feeCollector:je,wormholeMessengerConfig:ye,clock:ht.SYSVAR_CLOCK_PUBKEY},pe=await a.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:u,destinationChainId:D,recipient:m,receiveToken:p}).accounts(G).preInstructions([ht.ComputeBudgetProgram.setComputeUnitLimit({units:oi}),Ze]).postInstructions(De).signers([Ce]).transaction();return pe.recentBlockhash=(await Oe.connection.getLatestBlockhash()).blockhash,pe.feePayer=k,{transaction:await this.convertToVersionedTransaction(pe,Oe.connection),messageAccount:Ce}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:a,amount:o,fromAccountAddress:u,fromTokenAddress:m,toChainId:p,toAccountAddress:h,toTokenAddress:T,extraGas:S}=r,w=a;if(!w)throw new Ie("Such route does not support CCTP protocol");let x=4,v=u,M=T,k=h,D=yt(this.solanaRpcUrl,v),N=new si(ha,w,D),F=new ae(m),W=await na(F,N.programId),U=new ae(v),_=await N.account.cctpBridge.fetch(W),L={};return L.cctpBridge=N,L.cctpBridgeAccount=W,L.cctpAddressAccount=new ae(w),L.amount=new Jt(o),L.recipient=Array.from(k),L.receiveToken=Array.from(M),L.userToken=await Qe(U,F),L.bridgeAuthority=await qi(W,N.programId),L.bridgeTokenAccount=await ra(F,N.programId),L.chainBridgeAccount=await Qr(p,N.programId),L.userAccount=U,L.destinationChainId=p,L.mint=F,L.gasPrice=await pn(p,_.gasOracleProgramId),L.thisGasPrice=await pn(x,_.gasOracleProgramId),L.provider=D,S&&(L.extraGasInstruction=this.getExtraGasInstruction(S,L.userAccount,W)),L}async buildSwapAndBridgeCctpTransaction(r,a){let{cctpBridge:o,cctpBridgeAccount:u,amount:m,recipient:p,receiveToken:h,bridgeAuthority:T,userToken:S,bridgeTokenAccount:w,chainBridgeAccount:x,userAccount:v,destinationChainId:M,mint:k,gasPrice:D,thisGasPrice:N,extraGasInstruction:F,provider:W}=a,U=this.params.cctpParams.cctpDomains[r],_=this.params.cctpParams.cctpTransmitterProgramId,L=this.params.cctpParams.cctpTokenMessengerMinter;if(U==null||!_||!L)throw new O("CCTP is not configured");let we=new ae(_),le=new ae(L),{messageTransmitterAccount:Ve,tokenMessenger:je,tokenMessengerEventAuthority:Ke,tokenMinter:Me,localToken:ye,remoteTokenMessengerKey:Ce,authorityPda:Oe}=aa(U,k,we,le),Be=[];F&&Be.push(F);let _e=ka.generate(),Ze=ia(o.programId,_e.publicKey),De=await o.methods.bridge({amount:m,destinationChainId:M,recipient:p,receiveToken:h}).accounts({mint:k,user:v,cctpBridge:u,messageSentEventData:_e.publicKey,lock:Ze,cctpMessenger:le,messageTransmitterProgram:we,messageTransmitterAccount:Ve,tokenMessenger:je,tokenMinter:Me,localToken:ye,remoteTokenMessengerKey:Ce,authorityPda:Oe,eventAuthority:Ke,bridgeToken:w,gasPrice:D,thisGasPrice:N,chainBridge:x,userToken:S,bridgeAuthority:T}).preInstructions([ht.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Be).transaction(),G=W.connection;return De.recentBlockhash=(await G.getLatestBlockhash()).blockhash,De.feePayer=v,{transaction:await this.convertToVersionedTransaction(De,G),messageSentEventDataKeypair:_e}}send(r){throw new Ae}};g();y();f();import{Address as ci,contract as Ax}from"@stellar/stellar-sdk";import{Big as Ao}from"big.js";g();y();f();import{contract as n}from"@stellar/stellar-sdk";var oo=n.Spec,co=n.Client;var Sn=class extends co{constructor(r){super(new oo(["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"]),r);this.options=r}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 nr=class extends Ee{constructor(r,a,o){super();this.nodeRpcUrlsConfig=r;this.params=a;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let a=await qe(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(r){let{amount:a,contractAddress:o,fromAccountAddress:u,fromTokenAddress:m,toChainId:p,toAccountAddress:h,toTokenAddress:T,fee:S,gasFeePaymentMethod:w,extraGas:x}=r,v=S;x&&(v=Ao(v).plus(x).toFixed());let M=this.getContract(Sn,o,u),k;return w==="stablecoin"?k=await M.swap_and_bridge({sender:u,token:ci.contract(P.from(m)).toString(),amount:BigInt(a),recipient:P.from(h),destination_chain_id:+p,receive_token:P.from(T),nonce:st(),gas_amount:BigInt(0),fee_token_amount:BigInt(v)}):k=await M.swap_and_bridge({sender:u,token:ci.contract(P.from(m)).toString(),amount:BigInt(a),recipient:P.from(h),destination_chain_id:+p,receive_token:P.from(T),nonce:st(),gas_amount:BigInt(v),fee_token_amount:BigInt(0)}),k.toXDR()}async buildRawTransactionSwap(r){let a=ot(this.chainType,r);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(r){let{amount:a,contractAddress:o,fromAccountAddress:u,fromTokenAddress:m,toAccountAddress:p,toTokenAddress:h,minimumReceiveAmount:T}=r;return(await this.getContract(Sn,o,u).swap({sender:u,amount:BigInt(a),token:ci.contract(P.from(m)).toBuffer(),receive_token:P.from(h),recipient:p,receive_amount_min:BigInt(T)})).toXDR()}send(r){throw new Ae}getContract(r,a,o){let u={publicKey:o,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(u)}};g();y();f();import{SuiClient as wo}from"@mysten/sui/client";import{coinWithBalance as me,Transaction as bi}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Ya}from"@mysten/sui/utils";import{Big as Si}from"big.js";var Pi=He(Tt());g();y();f();var dt=He(Tt());he();function Oa(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:i,arguments:[$(s,r.bridge),$(s,r.coin),Le(s,r.receiveAmountMin,"u64")]})}function Da(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[i],arguments:[$(s,r.bridge),$(s,r.userDeposit),$(s,r.coin)]})}function Wa(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[i],arguments:[$(s,r.bridge),$(s,r.userDeposit),Le(s,r.amountLp,"u64")]})}function Na(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[i],arguments:[$(s,r.bridge),$(s,r.userDeposit)]})}function Ea(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[i],arguments:[$(s,r)]})}function ui(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[i],arguments:[$(s,r.bridge),$(s,r.messenger),$(s,r.wormholeState),$(s,r.theClock),$(s,r.gasOracle),$(s,r.amount),$(s,r.recipient),Le(s,r.destinationChainId,"u8"),$(s,r.receiveToken),Le(s,r.nonce,"u256"),$(s,r.feeSuiCoin),$(s,r.feeTokenCoin)]})}function Ua(s,i){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[i],arguments:[]})}function mi(s,i,r){return s.moveCall({target:`${dt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[i],arguments:[$(s,r.bridge),$(s,r.messenger),$(s,r.gasOracle),$(s,r.amount),$(s,r.recipient),Le(s,r.destinationChainId,"u8"),$(s,r.receiveToken),Le(s,r.nonce,"u256"),$(s,r.feeSuiCoin),$(s,r.feeTokenCoin)]})}var Ja=He(di());g();y();f();var Va=He(di());he();function pi(s,i,r){return s.moveCall({target:`${Va.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[i],arguments:[$(s,r.cctpBridge),$(s,r.gasOracle),$(s,r.tokenMessengerMinterState),$(s,r.messageTransmitterState),$(s,r.treasury),$(s,r.denyList),$(s,r.amount),$(s,r.feeSuiCoin),$(s,r.feeTokenCoin),Le(s,r.destinationChainId,"u8"),$(s,r.recipient),$(s,r.recipientWalletAddress)]})}var La=He(fi());g();y();f();var $a=He(fi());g();y();f();g();y();f();he();import{bcs as bt}from"@mysten/sui/bcs";import{fromHEX as yo,toHEX as ho}from"@mysten/sui/utils";g();y();f();import{bcs as fo}from"@mysten/sui/bcs";he();var yi=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(i,r){this.$fullTypeName=ee(this.$typeName,...i),this.$typeArgs=i,this.elements=r}static reified(i){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName,Y(i)),typeArgs:[Y(i)],isPhantom:s.$isPhantom,reifiedTypeArgs:[i],fromFields:r=>s.fromFields(i,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(i,r),fromBcs:r=>s.fromBcs(i,r),bcs:s.bcs(Pn(i)),fromJSONField:r=>s.fromJSONField(i,r),fromJSON:r=>s.fromJSON(i,r),new:r=>new s([Y(i)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return fo.vector}static fromFields(i,r){return s.reified(i).new(r.map(a=>q(i,a)))}static fromFieldsWithTypes(i,r){return s.reified(i).new(r.map(a=>H(i,a)))}static fromBcs(i,r){return s.fromFields(i,s.bcs(Pn(i)).parse(r))}toJSONField(){return this.elements.map(i=>Ot(this.$typeArgs[0],i))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(i,r){return s.reified(i).new(r.map(a=>Q(i,a)))}static fromJSON(i,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(i,r.elements)}};function Lt(s){return yi.r(s)}function ue(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var To=bt.bytes(32).transform({input:s=>yo(s),output:s=>ho(s)});function Pn(s){switch(s){case"bool":return bt.bool();case"u8":return bt.u8();case"u16":return bt.u16();case"u32":return bt.u32();case"u64":return bt.u64();case"u128":return bt.u128();case"u256":return bt.u256();case"address":return To;default:return s.bcs}}function Y(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function q(s,i){switch(s){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return`0x${i}`}if(s.kind==="VectorClassReified")return s.fromFields(i).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(i.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(i.url.bytes)).toString();case"0x2::object::ID":return`0x${i.bytes}`;case"0x2::object::UID":return`0x${i.id.bytes}`;case"0x1::option::Option":return i.vec.length===0?null:s.fromFields(i).vec[0];default:return s.fromFields(i)}}function H(s,i){switch(s){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(s.kind==="VectorClassReified")return s.fromFieldsWithTypes(i).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return i;case"0x2::object::UID":return i.id;case"0x2::balance::Balance":return s.fromFields({value:BigInt(i)});case"0x1::option::Option":return i===null?null:H(s.reifiedTypeArgs[0],i);default:return s.fromFieldsWithTypes(i)}}function tt(s,i,r){if(r.length!==i.length)throw new Error(`provided item has mismatching number of type argments ${s} (expected ${r.length}, got ${i.length}))`);for(let a=0;a<i.length;a++)if(V(i[a])!==V(Y(r[a])))throw new Error(`provided item has mismatching type argments ${s} (expected ${Y(r[a])}, got ${i[a]}))`)}function ct(s,i){let{typeArgs:r}=Se(s.type);tt(s.type,r,i)}function Ot(s,i){let{typeName:r,typeArgs:a}=Se(s);switch(r){case"bool":return i;case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return i.toString();case"address":case"signer":return i;case"vector":return i.map(o=>Ot(a[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:Ot(a[0],i);default:return i.toJSONField()}}function Q(s,i){switch(s){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(s.kind==="VectorClassReified")return s.fromJSONField(i).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:Q(s.reifiedTypeArgs[0],i);default:return s.fromJSONField(i)}}he();g();y();f();var rr="0x1";import{bcs as fg}from"@mysten/sui/bcs";import{fromB64 as hg}from"@mysten/sui/utils";g();y();f();he();import{bcs as hi}from"@mysten/sui/bcs";import{fromB64 as bo}from"@mysten/sui/utils";function ir(s){return s=V(s),s===`${rr}::string::String`}var ar=class s{__StructClass=!0;static get $typeName(){return`${rr}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:i=>s.fromFields(i),fromFieldsWithTypes:i=>s.fromFieldsWithTypes(i),fromBcs:i=>s.fromBcs(i),bcs:s.bcs,fromJSONField:i=>s.fromJSONField(i),fromJSON:i=>s.fromJSON(i),fromSuiParsedData:i=>s.fromSuiParsedData(i),fromSuiObjectData:i=>s.fromSuiObjectData(i),fetch:async(i,r)=>s.fetch(i,r),new:i=>new s([],i),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return ue(s.reified())}static get p(){return s.phantom()}static get bcs(){return hi.struct("String",{bytes:hi.vector(hi.u8())})}static fromFields(i){return s.reified().new({bytes:q(Lt("u8"),i.bytes)})}static fromFieldsWithTypes(i){if(!ir(i.type))throw new Error("not a String type");return s.reified().new({bytes:H(Lt("u8"),i.fields.bytes)})}static fromBcs(i){return s.fromFields(s.bcs.parse(i))}toJSONField(){return{bytes:Ot("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return s.reified().new({bytes:Q(Lt("u8"),i.bytes)})}static fromJSON(i){if(i.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!ir(i.type))throw new Error(`object at ${i.fields.id} is not a String object`);return s.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!ir(i.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(bo(i.bcs.bcsBytes))}if(i.content)return s.fromSuiParsedData(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(i,r){let a=await i.getObject({id:r,options:{showBcs:!0}});if(a.error)throw new Error(`error fetching String object at id ${r}: ${a.error.code}`);if(a.data?.bcs?.dataType!=="moveObject"||!ir(a.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(a.data)}};he();g();y();f();he();g();y();f();var St="0x2";import{bcs as Ti}from"@mysten/sui/bcs";import{fromB64 as Za,fromHEX as So,toHEX as Po}from"@mysten/sui/utils";function sr(s){return s=V(s),s===`${St}::object::ID`}var Dt=class s{__StructClass=!0;static get $typeName(){return`${St}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:i=>s.fromFields(i),fromFieldsWithTypes:i=>s.fromFieldsWithTypes(i),fromBcs:i=>s.fromBcs(i),bcs:s.bcs,fromJSONField:i=>s.fromJSONField(i),fromJSON:i=>s.fromJSON(i),fromSuiParsedData:i=>s.fromSuiParsedData(i),fromSuiObjectData:i=>s.fromSuiObjectData(i),fetch:async(i,r)=>s.fetch(i,r),new:i=>new s([],i),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return ue(s.reified())}static get p(){return s.phantom()}static get bcs(){return Ti.struct("ID",{bytes:Ti.bytes(32).transform({input:i=>So(i),output:i=>Po(i)})})}static fromFields(i){return s.reified().new({bytes:q("address",i.bytes)})}static fromFieldsWithTypes(i){if(!sr(i.type))throw new Error("not a ID type");return s.reified().new({bytes:H("address",i.fields.bytes)})}static fromBcs(i){return s.fromFields(s.bcs.parse(i))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return s.reified().new({bytes:Q("address",i.bytes)})}static fromJSON(i){if(i.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!sr(i.type))throw new Error(`object at ${i.fields.id} is not a ID object`);return s.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!sr(i.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Za(i.bcs.bcsBytes))}if(i.content)return s.fromSuiParsedData(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(i,r){let a=await i.getObject({id:r,options:{showBcs:!0}});if(a.error)throw new Error(`error fetching ID object at id ${r}: ${a.error.code}`);if(a.data?.bcs?.dataType!=="moveObject"||!sr(a.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(a.data)}};function or(s){return s=V(s),s===`${St}::object::UID`}var Xe=class s{__StructClass=!0;static get $typeName(){return`${St}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:i=>s.fromFields(i),fromFieldsWithTypes:i=>s.fromFieldsWithTypes(i),fromBcs:i=>s.fromBcs(i),bcs:s.bcs,fromJSONField:i=>s.fromJSONField(i),fromJSON:i=>s.fromJSON(i),fromSuiParsedData:i=>s.fromSuiParsedData(i),fromSuiObjectData:i=>s.fromSuiObjectData(i),fetch:async(i,r)=>s.fetch(i,r),new:i=>new s([],i),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return ue(s.reified())}static get p(){return s.phantom()}static get bcs(){return Ti.struct("UID",{id:Dt.bcs})}static fromFields(i){return s.reified().new({id:q(Dt.reified(),i.id)})}static fromFieldsWithTypes(i){if(!or(i.type))throw new Error("not a UID type");return s.reified().new({id:H(Dt.reified(),i.fields.id)})}static fromBcs(i){return s.fromFields(s.bcs.parse(i))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return s.reified().new({id:Q(Dt.reified(),i.id)})}static fromJSON(i){if(i.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!or(i.type))throw new Error(`object at ${i.fields.id} is not a UID object`);return s.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!or(i.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Za(i.bcs.bcsBytes))}if(i.content)return s.fromSuiParsedData(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(i,r){let a=await i.getObject({id:r,options:{showBcs:!0}});if(a.error)throw new Error(`error fetching UID object at id ${r}: ${a.error.code}`);if(a.data?.bcs?.dataType!=="moveObject"||!or(a.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(a.data)}};function nt(s,i){return s.moveCall({target:`${$a.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Le(s,i,`${ar.$typeName}`)]})}g();y();f();async function At(s,i,r=[]){let a=await s(i),o=r.concat(a.data);return a.hasNextPage&&a.nextCursor?At(s,a.nextCursor,o):o}var Xt=class extends Ee{constructor(r,a){super();this.nodeRpcUrlsConfig=r;this.api=a;this.client=new wo({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new O("Method send not implemented.")}async buildRawTransactionSwap(r){let a=r.sourceToken.suiAddresses;if(!a)throw new O("SUI token must contain 'suiAddresses'");(0,Pi.setAddress)(a.bridgeAddress,a.bridgeAddressOrigin);let o=ot(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,a)}async buildRawTransactionSwapFromParams(r,a){let{amount:o,fromAccountAddress:u,fromTokenAddress:m,toTokenAddress:p,minimumReceiveAmount:h}=r,T=new bi;T.setSender(u);let S={bridge:a.bridgeObjectAddress,coin:me({balance:BigInt(o),type:m}),receiveAmountMin:BigInt(h)},w=Oa(T,[m,p],S),x=await At(v=>this.client.getCoins({owner:r.toAccountAddress,coinType:p,cursor:v}));return x.length===0||!x[0]?T.transferObjects([w],r.toAccountAddress):T.mergeCoins(x[0].coinObjectId,[w]),await T.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(r,a,o){let u=bi.from(r);return this.buildRawTransactionSendFromTx(o,u,a)}async buildRawTransactionSend(r){return this.buildRawTransactionSendFromTx(r,new bi)}async buildRawTransactionSendFromTx(r,a,o){let u=await qe(this.chainType,r,this.api),{messenger:m}=u,p=r.sourceToken.suiAddresses;if(!p)throw new O("SUI token must contain 'suiAddresses'");switch((0,Pi.setAddress)(p.bridgeAddress,p.bridgeAddressOrigin),(0,La.setAddress)(p.utilsAddress),m){case 1:return this.buildRawTransactionAllbridgeSend(u,p,a,o);case 2:return this.buildRawTransactionWormholeSend(u,p,a,o);case 3:case 4:return this.buildRawTransactionCctpSend(r,u,p,a,o);case 5:throw new Re("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(r,a,o,u){let{amount:m,fromAccountAddress:p,fromTokenAddress:h,toChainId:T,toAccountAddress:S,toTokenAddress:w,fee:x,gasFeePaymentMethod:v,extraGas:M}=r,k=x;if(M&&(k=Si(k).plus(M).toFixed()),o.setSender(p),v==="stablecoin"){let D=BigInt(m)-BigInt(k),N,F;if(u){let[U]=o.splitCoins(u,[k]);N=u,F=U}else N=me({balance:D,type:h}),F=me({balance:BigInt(k),type:h});let W={bridge:a.bridgeObjectAddress,messenger:a.allbridgeMessengerObjectAddress,amount:N,destinationChainId:T,nonce:st(),recipient:nt(o,ze(S)),receiveToken:nt(o,ze(w)),gasOracle:a.gasOracleObjectAddress,feeTokenCoin:F,feeSuiCoin:me({balance:BigInt(0),useGasCoin:!1})};mi(o,h,W)}else{let D=k==="0"?me({balance:BigInt(k),useGasCoin:!1}):me({balance:BigInt(k)}),N={bridge:a.bridgeObjectAddress,messenger:a.allbridgeMessengerObjectAddress,amount:u??me({balance:BigInt(m),type:h}),destinationChainId:T,nonce:st(),recipient:nt(o,ze(S)),receiveToken:nt(o,ze(w)),gasOracle:a.gasOracleObjectAddress,feeTokenCoin:me({balance:BigInt(0),type:h}),feeSuiCoin:D};mi(o,h,N)}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,a,o,u){let{amount:m,fromAccountAddress:p,fromTokenAddress:h,toChainId:T,toAccountAddress:S,toTokenAddress:w,fee:x,gasFeePaymentMethod:v,extraGas:M}=r,k=x;if(M&&(k=Si(k).plus(M).toFixed()),o.setSender(p),v==="stablecoin"){let D=BigInt(m)-BigInt(k),N,F;if(u){let[U]=o.splitCoins(u,[k]);N=u,F=U}else N=me({balance:D,type:h}),F=me({balance:BigInt(k),type:h});let W={bridge:a.bridgeObjectAddress,messenger:a.wormholeMessengerObjectAddress,wormholeState:a.wormholeStateObjectAddress,theClock:Ya,amount:N,destinationChainId:T,nonce:st(),recipient:nt(o,ze(S)),receiveToken:nt(o,ze(w)),gasOracle:a.gasOracleObjectAddress,feeTokenCoin:F,feeSuiCoin:me({balance:BigInt(0),useGasCoin:!1})};ui(o,h,W)}else{let D=k==="0"?me({balance:BigInt(k),useGasCoin:!1}):me({balance:BigInt(k)}),N={bridge:a.bridgeObjectAddress,messenger:a.wormholeMessengerObjectAddress,wormholeState:a.wormholeStateObjectAddress,theClock:Ya,amount:u??me({balance:BigInt(m),type:h}),destinationChainId:T,nonce:st(),recipient:nt(o,ze(S)),receiveToken:nt(o,ze(w)),gasOracle:a.gasOracleObjectAddress,feeTokenCoin:me({balance:BigInt(0),type:h}),feeSuiCoin:D};ui(o,h,N)}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,a,o,u,m){let{amount:p,fromAccountAddress:h,fromTokenAddress:T,toChainId:S,toAccountAddress:w,fee:x,gasFeePaymentMethod:v,extraGas:M}=a;(0,Ja.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let k=x;M&&(k=Si(k).plus(M).toFixed()),u.setSender(h);let D=nt(u,ze(w)),N;if(r.destinationToken.chainType==="SOLANA"){let F=await Kn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));N=nt(u,ze(F))}else N=D;if(v==="stablecoin"){let F=BigInt(p)-BigInt(k),W,U;if(m){let[L]=u.splitCoins(m,[k]);W=m,U=L}else W=me({balance:F,type:T}),U=me({balance:BigInt(k),type:T});let _={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:W,destinationChainId:S,recipient:N,recipientWalletAddress:D,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:U,feeSuiCoin:me({balance:BigInt(0),useGasCoin:!1})};pi(u,T,_)}else{let F=k==="0"?me({balance:BigInt(k),useGasCoin:!1}):me({balance:BigInt(k)}),W={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:m??me({balance:BigInt(p),type:T}),destinationChainId:S,recipient:N,recipientWalletAddress:D,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:me({balance:BigInt(0),type:T}),feeSuiCoin:F};pi(u,T,W)}return await u.toJSON({client:this.client})}};g();y();f();import{Big as Io}from"big.js";g();y();f();g();y();f();import Co from"bn.js";function cr(s){return"0x"+new Co(s).toString("hex")}function Xa(s){return new Promise(i=>setTimeout(()=>i(),s))}async function Ar(s,i){let r=await s.trx.sign(i);if(!r.signature)throw new jt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await Bo(s,o),{txId:o}}async function Bo(s,i,r=1e4){let a=Date.now();for(;;){if(Date.now()-a>r)throw new ln("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(i);if(!o?.receipt){await Xa(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new ln(`Transaction status is ${o.receipt.result}`)}}var wn=class extends Ee{constructor(r,a){super();this.tronWeb=r;this.api=a}chainType="TRX";async send(r){let a=await qe(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(r,a);return await Ar(this.tronWeb,o)}async buildRawTransactionSwap(r){let a=ot(this.chainType,r);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(r){let{amount:a,contractAddress:o,fromAccountAddress:u,fromTokenAddress:m,toAccountAddress:p,toTokenAddress:h,minimumReceiveAmount:T}=r,S=[{type:"uint256",value:a},{type:"bytes32",value:m},{type:"bytes32",value:h},{type:"address",value:p},{type:"uint256",value:T}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",S,"0",u)}async buildRawTransactionSend(r){let a=await qe(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(r,a)}async buildRawTransactionSendFromParams(r,a){let{amount:o,contractAddress:u,fromAccountAddress:m,fromTokenAddress:p,toChainId:h,toAccountAddress:T,toTokenAddress:S,messenger:w,fee:x,gasFeePaymentMethod:v,extraGas:M,extraGasDest:k}=a,D=x;M&&(D=Io(D).plus(M).toFixed());let N=st().toString(),F,W,U;switch(w){case 3:case 4:v==="stablecoin"?(F=[{type:"uint256",value:o},{type:"bytes32",value:T},{type:"uint256",value:h},{type:"uint256",value:D}],W="0"):(F=[{type:"uint256",value:o},{type:"bytes32",value:T},{type:"uint256",value:h},{type:"uint256",value:0}],W=D),U="bridge(uint256,bytes32,uint256,uint256)";break;case 5:v==="stablecoin"?(F=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:T},{type:"uint256",value:h},{type:"uint256",value:D},{type:"uint256",value:k??"0"},{type:"uint256",value:"10"}],W="0"):(F=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:T},{type:"uint256",value:h},{type:"uint256",value:0},{type:"uint256",value:k??"0"},{type:"uint256",value:"10"}],W=D),U="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:v==="stablecoin"?(F=[{type:"bytes32",value:p},{type:"uint256",value:o},{type:"bytes32",value:T},{type:"uint256",value:h},{type:"bytes32",value:S},{type:"uint256",value:N},{type:"uint8",value:w},{type:"uint256",value:D}],W="0"):(F=[{type:"bytes32",value:p},{type:"uint256",value:o},{type:"bytes32",value:T},{type:"uint256",value:h},{type:"bytes32",value:S},{type:"uint256",value:N},{type:"uint8",value:w},{type:"uint256",value:0}],W=D),U="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(u,U,F,W,m)}async buildRawTransaction(r,a,o,u,m){let p=await this.tronWeb.transactionBuilder.triggerSmartContract(r,a,{callValue:+u},o,m);if(!p?.result?.result)throw new O("Unknown error: "+JSON.stringify(p,null,2));return p.transaction}};var ur=class{constructor(i,r,a,o){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a;this.tokenService=o;this.rawTxBuilder=new Hn(i,r,a,o)}rawTxBuilder;async getAllowance(i,r){let a,o;r?(a=i,o=r):o=i;let u=Tn(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:u},a)}async checkAllowance(i,r){let a,o;r?(a=i,o=r):o=i;let u=Tn(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:u},a)}async approve(i,r){let a=Tn(r.token,r.messenger);return this.tokenService.approve(i,{...r,spender:a})}async send(i,r){return K(r.amount),z("amount",r.amount,r.sourceToken.decimals),Qn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(r)}};function Tn(s,i=1){switch(i){case 3:if(s.cctpAddress)return s.cctpAddress;throw new Ie("Such route does not support CCTP protocol");case 4:if(s.cctpV2Address)return s.cctpV2Address;throw new Ie("Such route does not support CCTP V2 protocol");case 5:if(s.oftBridgeAddress)return s.oftBridgeAddress;throw new Re("Such route does not support OFT protocol");case 1:case 2:return s.bridgeAddress}}function Qn(s,i,r,a,o){switch(X.getChainProperty(s).chainType){case"EVM":{if(o)return new hn(o,i,r);{let u=r.getNodeRpcUrl(s);return new hn(new vo(u),i,r)}}case"TRX":{if(o)return new wn(o,i);{let u=r.getNodeRpcUrl(s);return new wn(new Ro({fullHost:u,solidityNode:u,eventServer:u}),i)}}case"SOLANA":return new tr(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:a.wormholeMessengerProgramId,solanaLookUpTable:a.solanaLookUpTable,cctpParams:a.cctpParams,jupiterParams:{jupiterUrl:a.jupiterUrl,jupiterApiKeyHeader:a.jupiterApiKeyHeader,jupiterMaxAccounts:a.jupiterMaxAccounts}},i);case"SRB":return new nr(r,a,i);case"SUI":return new Xt(r,i)}}g();y();f();import{Big as Jo}from"big.js";import Lo from"timed-cache";import{TronWeb as Xo}from"tronweb";import{FMT_BYTES as Ko,FMT_NUMBER as Ho,Web3 as Qo}from"web3";g();y();f();import{Big as pt}from"big.js";function Ka(s,i,r,a,o){let u=Z(s,3),m=pt(u),p=pt(r),h=pt(a).plus(o),T,S;if(p.eq(0)||h.eq(0)){let x=m.div(2);T=pt(a).plus(x),S=pt(o).plus(x)}else T=pt(a).plus(m.mul(a).div(h)),S=pt(o).plus(m.mul(o).div(h));return pt(ma(i,T.toFixed(),S.toFixed())).minus(p).toFixed()}function Ha(s){let i=Z(s,3);return pt(i).round().toFixed()}g();y();f();import{Web3 as Pt}from"web3";g();y();f();var ko={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"}]},Cn=ko;g();y();f();g();y();f();var xe=class{lpAmount;rewardDebt;constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return j(this.lpAmount,3).toFixed()}earned(i,r){let a=Aa(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return r?j(a,r).toFixed():a}};g();y();f();var Ue=class{};var Bn=class extends Ue{constructor(r,a){super();this.web3=r;this.api=a}chainType="EVM";P=52;async getUserBalanceInfo(r,a){let o;try{o=await Yn(this.getUserBalanceInfoByBatch(r,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{o=await Hr(()=>this.getUserBalanceInfoPerProperty(r,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let a;try{a=await Yn(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{a=await Hr(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return a}async getUserBalanceInfoByBatch(r,a){let o=new this.web3.eth.BatchRequest,u=this.getPoolContract(a.poolAddress),m=u.methods.userRewardDebt(r).encodeABI(),p=u.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:a.poolAddress,data:m},"latest"]}),o.add({method:"eth_call",params:[{to:a.poolAddress,data:p},"latest"]});let[h,T]=await o.execute();if(h&&T&&!h.error&&!T.error)return new xe({lpAmount:Pt.utils.toBigInt(T.result).toString(),rewardDebt:Pt.utils.toBigInt(h.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,a){let o=(await this.getPoolContract(a.poolAddress).methods.userRewardDebt(r).call()).toString(),u=(await this.getPoolContract(a.poolAddress).methods.balanceOf(r).call()).toString();return new xe({lpAmount:u,rewardDebt:o})}async getPoolInfoByBatch(r){let a=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),u=o.methods.a().encodeABI(),m=o.methods.d().encodeABI(),p=o.methods.tokenBalance().encodeABI(),h=o.methods.vUsdBalance().encodeABI(),T=o.methods.totalSupply().encodeABI(),S=o.methods.accRewardPerShareP().encodeABI();a.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),a.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),a.add({method:"eth_call",params:[{to:r.poolAddress,data:p},"latest"]}),a.add({method:"eth_call",params:[{to:r.poolAddress,data:h},"latest"]}),a.add({method:"eth_call",params:[{to:r.poolAddress,data:T},"latest"]}),a.add({method:"eth_call",params:[{to:r.poolAddress,data:S},"latest"]});let[w,x,v,M,k,D]=await a.execute();if(w&&x&&v&&M&&k&&D&&!w.error&&!x.error&&!v.error&&!M.error&&!k.error&&!D.error){let N=Pt.utils.toBigInt(v.result).toString(),F=Pt.utils.toBigInt(M.result).toString(),W=ke({tokenBalance:N,vUsdBalance:F});return{aValue:Pt.utils.toBigInt(w.result).toString(),dValue:Pt.utils.toBigInt(x.result).toString(),tokenBalance:N,vUsdBalance:F,totalLpAmount:Pt.utils.toBigInt(k.result).toString(),accRewardPerShareP:Pt.utils.toBigInt(D.result).toString(),p:this.P,imbalance:W}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let a=this.getPoolContract(r.poolAddress),o=(await a.methods.a().call()).toString(),u=(await a.methods.d().call()).toString(),m=(await a.methods.tokenBalance().call()).toString(),p=(await a.methods.vUsdBalance().call()).toString(),h=(await a.methods.totalSupply().call()).toString(),T=(await a.methods.accRewardPerShareP().call()).toString(),S=ke({tokenBalance:m,vUsdBalance:p});return{aValue:o,dValue:u,tokenBalance:m,vUsdBalance:p,totalLpAmount:h,accRewardPerShareP:T,p:this.P,imbalance:S}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Cn.abi,r)}};g();y();f();var mr=class{constructor(i,r,a,o){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a;this.tokenService=o}async approve(i,r){if(r){let a=i,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},a)}else{let a=i;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress})}}async deposit(i,r){return K(i.amount),z("amount",i.amount,i.token.decimals),i.amount=Z(i.amount,i.token.decimals).toFixed(),Kt(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(i)}async withdraw(i,r){return K(i.amount),z("amount",i.amount,i.token.decimals),i.amount=Z(i.amount,3).toFixed(),Kt(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(i)}async claimRewards(i,r){return Kt(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(i)}};g();y();f();import{AnchorProvider as xo,BN as Qa,Program as Fo,Spl as Mo,web3 as Oo}from"@project-serum/anchor";import{Connection as Do,PublicKey as wt}from"@solana/web3.js";var lr=class extends Ue{constructor(r,a){super();this.solanaRpcUrl=r;this.api=a}chainType="SOLANA";P=48;async getUserBalanceInfo(r,a){let o=this.buildAnchorProvider(r),u=this.getBridge(a.bridgeAddress,o),m=new wt(a.poolAddress),p=await u.account.pool.fetch(m);try{let h=await qr(new wt(r),p.mint,u.programId),{lpAmount:T,rewardDebt:S}=await u.account.userDeposit.fetch(h);return new xe({lpAmount:T.toString(),rewardDebt:S.toString()})}catch{return new xe({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let a=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,a).account.pool.fetch(r.poolAddress),u=o.vUsdBalance.toString(),m=o.tokenBalance.toString(),p=ke({tokenBalance:m,vUsdBalance:u});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:u,tokenBalance:m,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:p}}async buildRawTransactionDeposit(r){let{bridge:a,accounts:o,preInstructions:u}=await this.prepareDataForTransaction(r),m=await a.methods.deposit(new Qa(r.amount)).accounts(o).preInstructions(u).transaction();return m.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,m.feePayer=new wt(r.accountAddress),await Yt(m,r.txFeeParams,this.solanaRpcUrl),m}async buildRawTransactionWithdraw(r){let{bridge:a,accounts:o,preInstructions:u}=await this.prepareDataForTransaction(r),m=await a.methods.withdraw(new Qa(r.amount)).accounts(o).preInstructions(u).transaction();return m.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,m.feePayer=new wt(r.accountAddress),await Yt(m,r.txFeeParams,this.solanaRpcUrl),m}async buildRawTransactionClaimRewards(r){let{bridge:a,accounts:o,preInstructions:u}=await this.prepareDataForTransaction(r),m=await a.methods.claimRewards().accounts(o).preInstructions(u).transaction();return m.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,m.feePayer=new wt(r.accountAddress),await Yt(m,r.txFeeParams,this.solanaRpcUrl),m}async prepareDataForTransaction(r){let a=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,a),{accounts:u,preInstructions:m}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,a);return{bridge:o,accounts:u,preInstructions:m}}getBridge(r,a){return new Fo(bn,r,a)}buildAnchorProvider(r){let a=new Do(this.solanaRpcUrl,"confirmed"),o=new wt(r);return new xo(a,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,a,o,u){let m=new wt(o),p=await ft(r.programId),h=await _t(r.programId),T=new wt(a),w=(await r.account.pool.fetch(T)).mint,x=await Qe(m,w),v=await Zt(w,r.programId),M=await qr(m,w,r.programId),k=[Oo.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await $t(x,u)}catch{let W=await Mo.associatedToken(u).methods.create().accounts({mint:w,owner:m,associatedAccount:x}).instruction();k.push(W)}try{await r.account.userDeposit.fetch(M)}catch{let F=await r.methods.initDepositAccount().accounts({mint:w,user:m,userDeposit:M}).instruction();k.push(F)}return{accounts:{mint:w,user:m,config:p,pool:T,bridgeAuthority:h,userDeposit:M,userToken:x,bridgeToken:v},preInstructions:k}}};g();y();f();import{contract as ux}from"@stellar/stellar-sdk";g();y();f();import{contract as t}from"@stellar/stellar-sdk";var Wo=t.Spec,No=t.Client;var dr=class extends No{constructor(r){super(new Wo(["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"]),r);this.options=r}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}};g();y();f();import{contract as Qh,rpc as Eo}from"@stellar/stellar-sdk";var za=Eo.Api;function Ht(s){let{simulation:i,options:r}=s;if(!i)throw new Error("Soroban assembled transaction does not have simulation");if(za.isSimulationSuccess(i))return i.result==null?void 0:r.parseResultXdr(i.result.retval);throw new Error(i.error)}function Qt(s){let{simulation:i}=s;if(!i)throw new Error("Soroban assembled transaction does not have simulation");return za.isSimulationError(i)}var pr=class extends Ue{constructor(r,a,o){super();this.nodeRpcUrlsConfig=r;this.params=a;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,a){let u=await this.getContract(a.poolAddress).get_user_deposit({user:r});if(Qt(u))throw new O;let m=Ht(u);if(!m)throw new O;let p=m.unwrap();return new xe({lpAmount:p.lp_amount.toString(),rewardDebt:p.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Qt(o))throw new O;let u=Ht(o);if(!u)throw new O;let m=u.unwrap();return{aValue:m.a.toString(),accRewardPerShareP:m.acc_reward_per_share_p.toString(),dValue:m.d.toString(),tokenBalance:m.token_balance.toString(),p:this.P,totalLpAmount:m.total_lp_amount.toString(),vUsdBalance:m.v_usd_balance.toString(),imbalance:ke({tokenBalance:m.token_balance.toString(),vUsdBalance:m.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,a){let o={publicKey:a,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new dr(o)}};g();y();f();import{SuiClient as $o}from"@mysten/sui/client";import{Transaction as wr}from"@mysten/sui/transactions";var qt=He(Tt());g();y();f();he();g();y();f();he();import{bcs as qa}from"@mysten/sui/bcs";import{fromB64 as Uo}from"@mysten/sui/utils";function gr(s){return s=V(s),s.startsWith(`${St}::balance::Balance<`)}var Pe=class s{__StructClass=!0;static get $typeName(){return`${St}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.value=r.value}static reified(i){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName,Y(i)),typeArgs:[Y(i)],isPhantom:s.$isPhantom,reifiedTypeArgs:[i],fromFields:r=>s.fromFields(i,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(i,r),fromBcs:r=>s.fromBcs(i,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(i,r),fromJSON:r=>s.fromJSON(i,r),fromSuiParsedData:r=>s.fromSuiParsedData(i,r),fromSuiObjectData:r=>s.fromSuiObjectData(i,r),fetch:async(r,a)=>s.fetch(r,i,a),new:r=>new s([Y(i)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(i){return ue(s.reified(i))}static get p(){return s.phantom}static get bcs(){return qa.struct("Balance",{value:qa.u64()})}static fromFields(i,r){return s.reified(i).new({value:q("u64",r.value)})}static fromFieldsWithTypes(i,r){if(!gr(r.type))throw new Error("not a Balance type");return ct(r,[i]),s.reified(i).new({value:H("u64",r.fields.value)})}static fromBcs(i,r){return s.fromFields(i,s.bcs.parse(r))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,r){return s.reified(i).new({value:Q("u64",r.value)})}static fromJSON(i,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return tt(ee(s.$typeName,Y(i)),r.$typeArgs,[i]),s.fromJSONField(i,r)}static fromSuiParsedData(i,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!gr(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(i,r)}static fromSuiObjectData(i,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!gr(r.bcs.type))throw new Error("object at is not a Balance object");let a=Se(r.bcs.type).typeArgs;if(a.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${a.length}'`);let o=V(a[0]),u=V(Y(i));if(o!==V(Y(i)))throw new Error(`type argument mismatch: expected '${u}' but got '${o}'`);return s.fromBcs(i,Uo(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(i,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,r,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!gr(o.data.bcs.type))throw new Error(`object at id ${a} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Bi=He(Tt());g();y();f();he();var wi=He(Tt());import{bcs as fr}from"@mysten/sui/bcs";import{fromB64 as Go}from"@mysten/sui/utils";function yr(s){return s=V(s),s.startsWith(`${wi.PKG_V1}::pool_rewards::PoolRewards<`)}var Wt=class s{__StructClass=!0;static get $typeName(){return`${wi.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.accRewardPerShareP=r.accRewardPerShareP,this.adminFeeShareBp=r.adminFeeShareBp,this.adminFee=r.adminFee,this.rewards=r.rewards,this.lpSupply=r.lpSupply}static reified(i){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName,Y(i)),typeArgs:[Y(i)],isPhantom:s.$isPhantom,reifiedTypeArgs:[i],fromFields:r=>s.fromFields(i,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(i,r),fromBcs:r=>s.fromBcs(i,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(i,r),fromJSON:r=>s.fromJSON(i,r),fromSuiParsedData:r=>s.fromSuiParsedData(i,r),fromSuiObjectData:r=>s.fromSuiObjectData(i,r),fetch:async(r,a)=>s.fetch(r,i,a),new:r=>new s([Y(i)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(i){return ue(s.reified(i))}static get p(){return s.phantom}static get bcs(){return fr.struct("PoolRewards",{acc_reward_per_share_p:fr.u128(),admin_fee_share_bp:fr.u64(),admin_fee:Pe.bcs,rewards:Pe.bcs,lp_supply:fr.u64()})}static fromFields(i,r){return s.reified(i).new({accRewardPerShareP:q("u128",r.acc_reward_per_share_p),adminFeeShareBp:q("u64",r.admin_fee_share_bp),adminFee:q(Pe.reified(i),r.admin_fee),rewards:q(Pe.reified(i),r.rewards),lpSupply:q("u64",r.lp_supply)})}static fromFieldsWithTypes(i,r){if(!yr(r.type))throw new Error("not a PoolRewards type");return ct(r,[i]),s.reified(i).new({accRewardPerShareP:H("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:H("u64",r.fields.admin_fee_share_bp),adminFee:H(Pe.reified(i),r.fields.admin_fee),rewards:H(Pe.reified(i),r.fields.rewards),lpSupply:H("u64",r.fields.lp_supply)})}static fromBcs(i,r){return s.fromFields(i,s.bcs.parse(r))}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(i,r){return s.reified(i).new({accRewardPerShareP:Q("u128",r.accRewardPerShareP),adminFeeShareBp:Q("u64",r.adminFeeShareBp),adminFee:Q(Pe.reified(i),r.adminFee),rewards:Q(Pe.reified(i),r.rewards),lpSupply:Q("u64",r.lpSupply)})}static fromJSON(i,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return tt(ee(s.$typeName,Y(i)),r.$typeArgs,[i]),s.fromJSONField(i,r)}static fromSuiParsedData(i,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!yr(r.type))throw new Error(`object at ${r.fields.id} is not a PoolRewards object`);return s.fromFieldsWithTypes(i,r)}static fromSuiObjectData(i,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!yr(r.bcs.type))throw new Error("object at is not a PoolRewards object");let a=Se(r.bcs.type).typeArgs;if(a.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${a.length}'`);let o=V(a[0]),u=V(Y(i));if(o!==V(Y(i)))throw new Error(`type argument mismatch: expected '${u}' but got '${o}'`);return s.fromBcs(i,Go(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(i,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,r,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!yr(o.data.bcs.type))throw new Error(`object at id ${a} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};g();y();f();he();var Ci=He(Tt());import{bcs as zt}from"@mysten/sui/bcs";import{fromB64 as Vo}from"@mysten/sui/utils";function hr(s){return s=V(s),s.startsWith(`${Ci.PKG_V1}::pool_state::PoolState<`)}var Nt=class s{__StructClass=!0;static get $typeName(){return`${Ci.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.tokenBalance=r.tokenBalance,this.vusdBalance=r.vusdBalance,this.d=r.d,this.a=r.a,this.balanceRatioMinBp=r.balanceRatioMinBp}static reified(i){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName,Y(i)),typeArgs:[Y(i)],isPhantom:s.$isPhantom,reifiedTypeArgs:[i],fromFields:r=>s.fromFields(i,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(i,r),fromBcs:r=>s.fromBcs(i,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(i,r),fromJSON:r=>s.fromJSON(i,r),fromSuiParsedData:r=>s.fromSuiParsedData(i,r),fromSuiObjectData:r=>s.fromSuiObjectData(i,r),fetch:async(r,a)=>s.fetch(r,i,a),new:r=>new s([Y(i)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(i){return ue(s.reified(i))}static get p(){return s.phantom}static get bcs(){return zt.struct("PoolState",{token_balance:zt.u64(),vusd_balance:zt.u64(),d:zt.u64(),a:zt.u64(),balance_ratio_min_bp:zt.u64()})}static fromFields(i,r){return s.reified(i).new({tokenBalance:q("u64",r.token_balance),vusdBalance:q("u64",r.vusd_balance),d:q("u64",r.d),a:q("u64",r.a),balanceRatioMinBp:q("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(i,r){if(!hr(r.type))throw new Error("not a PoolState type");return ct(r,[i]),s.reified(i).new({tokenBalance:H("u64",r.fields.token_balance),vusdBalance:H("u64",r.fields.vusd_balance),d:H("u64",r.fields.d),a:H("u64",r.fields.a),balanceRatioMinBp:H("u64",r.fields.balance_ratio_min_bp)})}static fromBcs(i,r){return s.fromFields(i,s.bcs.parse(r))}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(i,r){return s.reified(i).new({tokenBalance:Q("u64",r.tokenBalance),vusdBalance:Q("u64",r.vusdBalance),d:Q("u64",r.d),a:Q("u64",r.a),balanceRatioMinBp:Q("u64",r.balanceRatioMinBp)})}static fromJSON(i,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return tt(ee(s.$typeName,Y(i)),r.$typeArgs,[i]),s.fromJSONField(i,r)}static fromSuiParsedData(i,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!hr(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(i,r)}static fromSuiObjectData(i,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!hr(r.bcs.type))throw new Error("object at is not a PoolState object");let a=Se(r.bcs.type).typeArgs;if(a.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${a.length}'`);let o=V(a[0]),u=V(Y(i));if(o!==V(Y(i)))throw new Error(`type argument mismatch: expected '${u}' but got '${o}'`);return s.fromBcs(i,Vo(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(i,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,r,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!hr(o.data.bcs.type))throw new Error(`object at id ${a} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as In}from"@mysten/sui/bcs";import{fromB64 as jo}from"@mysten/sui/utils";function Tr(s){return s=V(s),s.startsWith(`${Bi.PKG_V1}::pool::Pool<`)}var br=class s{__StructClass=!0;static get $typeName(){return`${Bi.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.id=r.id,this.state=r.state,this.rewards=r.rewards,this.feeShareBp=r.feeShareBp,this.canDeposit=r.canDeposit,this.canWithdraw=r.canWithdraw,this.decimals=r.decimals,this.balance=r.balance}static reified(i){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName,Y(i)),typeArgs:[Y(i)],isPhantom:s.$isPhantom,reifiedTypeArgs:[i],fromFields:r=>s.fromFields(i,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(i,r),fromBcs:r=>s.fromBcs(i,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(i,r),fromJSON:r=>s.fromJSON(i,r),fromSuiParsedData:r=>s.fromSuiParsedData(i,r),fromSuiObjectData:r=>s.fromSuiObjectData(i,r),fetch:async(r,a)=>s.fetch(r,i,a),new:r=>new s([Y(i)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(i){return ue(s.reified(i))}static get p(){return s.phantom}static get bcs(){return In.struct("Pool",{id:Xe.bcs,state:Nt.bcs,rewards:Wt.bcs,fee_share_bp:In.u64(),can_deposit:In.bool(),can_withdraw:In.bool(),decimals:In.u8(),balance:Pe.bcs})}static fromFields(i,r){return s.reified(i).new({id:q(Xe.reified(),r.id),state:q(Nt.reified(i),r.state),rewards:q(Wt.reified(i),r.rewards),feeShareBp:q("u64",r.fee_share_bp),canDeposit:q("bool",r.can_deposit),canWithdraw:q("bool",r.can_withdraw),decimals:q("u8",r.decimals),balance:q(Pe.reified(i),r.balance)})}static fromFieldsWithTypes(i,r){if(!Tr(r.type))throw new Error("not a Pool type");return ct(r,[i]),s.reified(i).new({id:H(Xe.reified(),r.fields.id),state:H(Nt.reified(i),r.fields.state),rewards:H(Wt.reified(i),r.fields.rewards),feeShareBp:H("u64",r.fields.fee_share_bp),canDeposit:H("bool",r.fields.can_deposit),canWithdraw:H("bool",r.fields.can_withdraw),decimals:H("u8",r.fields.decimals),balance:H(Pe.reified(i),r.fields.balance)})}static fromBcs(i,r){return s.fromFields(i,s.bcs.parse(r))}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(i,r){return s.reified(i).new({id:Q(Xe.reified(),r.id),state:Q(Nt.reified(i),r.state),rewards:Q(Wt.reified(i),r.rewards),feeShareBp:Q("u64",r.feeShareBp),canDeposit:Q("bool",r.canDeposit),canWithdraw:Q("bool",r.canWithdraw),decimals:Q("u8",r.decimals),balance:Q(Pe.reified(i),r.balance)})}static fromJSON(i,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return tt(ee(s.$typeName,Y(i)),r.$typeArgs,[i]),s.fromJSONField(i,r)}static fromSuiParsedData(i,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Tr(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(i,r)}static fromSuiObjectData(i,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Tr(r.bcs.type))throw new Error("object at is not a Pool object");let a=Se(r.bcs.type).typeArgs;if(a.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${a.length}'`);let o=V(a[0]),u=V(Y(i));if(o!==V(Y(i)))throw new Error(`type argument mismatch: expected '${u}' but got '${o}'`);return s.fromBcs(i,jo(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(i,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,r,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Tr(o.data.bcs.type))throw new Error(`object at id ${a} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};g();y();f();he();var Ri=He(Tt());import{bcs as Ii}from"@mysten/sui/bcs";import{fromB64 as _o}from"@mysten/sui/utils";function Sr(s){return s=V(s),s.startsWith(`${Ri.PKG_V1}::user_deposit::UserDeposit<`)}var Pr=class s{__StructClass=!0;static get $typeName(){return`${Ri.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(i,r){this.$fullTypeName=ee(s.$typeName,...i),this.$typeArgs=i,this.id=r.id,this.lpAmount=r.lpAmount,this.rewardDebt=r.rewardDebt}static reified(i){return{typeName:s.$typeName,fullTypeName:ee(s.$typeName,Y(i)),typeArgs:[Y(i)],isPhantom:s.$isPhantom,reifiedTypeArgs:[i],fromFields:r=>s.fromFields(i,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(i,r),fromBcs:r=>s.fromBcs(i,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(i,r),fromJSON:r=>s.fromJSON(i,r),fromSuiParsedData:r=>s.fromSuiParsedData(i,r),fromSuiObjectData:r=>s.fromSuiObjectData(i,r),fetch:async(r,a)=>s.fetch(r,i,a),new:r=>new s([Y(i)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(i){return ue(s.reified(i))}static get p(){return s.phantom}static get bcs(){return Ii.struct("UserDeposit",{id:Xe.bcs,lp_amount:Ii.u64(),reward_debt:Ii.u64()})}static fromFields(i,r){return s.reified(i).new({id:q(Xe.reified(),r.id),lpAmount:q("u64",r.lp_amount),rewardDebt:q("u64",r.reward_debt)})}static fromFieldsWithTypes(i,r){if(!Sr(r.type))throw new Error("not a UserDeposit type");return ct(r,[i]),s.reified(i).new({id:H(Xe.reified(),r.fields.id),lpAmount:H("u64",r.fields.lp_amount),rewardDebt:H("u64",r.fields.reward_debt)})}static fromBcs(i,r){return s.fromFields(i,s.bcs.parse(r))}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(i,r){return s.reified(i).new({id:Q(Xe.reified(),r.id),lpAmount:Q("u64",r.lpAmount),rewardDebt:Q("u64",r.rewardDebt)})}static fromJSON(i,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return tt(ee(s.$typeName,Y(i)),r.$typeArgs,[i]),s.fromJSONField(i,r)}static fromSuiParsedData(i,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Sr(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(i,r)}static fromSuiObjectData(i,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Sr(r.bcs.type))throw new Error("object at is not a UserDeposit object");let a=Se(r.bcs.type).typeArgs;if(a.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${a.length}'`);let o=V(a[0]),u=V(Y(i));if(o!==V(Y(i)))throw new Error(`type argument mismatch: expected '${u}' but got '${o}'`);return s.fromBcs(i,_o(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(i,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,r,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Sr(o.data.bcs.type))throw new Error(`object at id ${a} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};g();y();f();function ts(s,i,r){if(i.length===0||!i[0])return[];let a=i[0],o=s.reduce((p,h)=>p+BigInt(h),BigInt(0)),u=BigInt(a.balance),m=[];for(let p of i.slice(1)){if(u>o)return es(r,a,m,s);u+=BigInt(p.balance),m.push(p)}return u>=o?es(r,a,m,s):[]}function es(s,i,r,a){let o=a.map(u=>s.pure.u64(u));return r.length>0&&s.mergeCoins(i.coinObjectId,r.map(u=>u.coinObjectId)),s.splitCoins(i.coinObjectId,o)}g();y();f();var Zo="0x0000000000000000000000000000000000000000000000000000000000000000";async function ns(s,i,r){let a=await s.devInspectTransactionBlock({sender:Zo,transactionBlock:i});if(a.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(a,null,2)}`);let o=a.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(a,null,2)}`);let[u,m]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(u)).toJSONField():Pn(r).parse(Uint8Array.from(u))}var Cr=class extends Ue{constructor(r,a){super();this.suiRpcUrl=r;this.api=a;this.client=new $o({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,a){if(!a.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");let o=a.suiAddresses;if(!o)throw new O("SUI token must contain 'suiAddresses'");(0,qt.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let m=(await this.fetchDeposits(r,a.originTokenAddress)).reduce((p,h)=>{if(h.data)return p.lpAmount+=BigInt(h.data.content.fields.lp_amount),p.rewardDebt+=BigInt(h.data.content.fields.reward_debt),p;throw new O("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new xe({lpAmount:m.lpAmount.toString(),rewardDebt:m.rewardDebt.toString()})}async fetchDeposits(r,a){return await At(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Pr.phantom(ue(a)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let a=r.suiAddresses;if(!a)throw new O("SUI token must contain 'suiAddresses'");if((0,qt.setAddress)(a.bridgeAddress,a.bridgeAddressOrigin),!r.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");let o=48,u=new wr;Ea(u,r.originTokenAddress,a.bridgeObjectAddress);let m=await ns(this.client,u,br.reified(ue(r.originTokenAddress))),p=m.state.tokenBalance,h=m.state.vusdBalance,T=ke({tokenBalance:p,vUsdBalance:h});return{dValue:m.state.d,aValue:m.state.a,totalLpAmount:m.rewards.lpSupply,vUsdBalance:h,tokenBalance:p,accRewardPerShareP:m.rewards.accRewardPerShareP,p:o,imbalance:T}}async buildRawTransactionDeposit(r){let a=r.token.suiAddresses;if(!a)throw new O("SUI token must contain 'suiAddresses'");if((0,qt.setAddress)(a.bridgeAddress,a.bridgeAddressOrigin),!r.token.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");let o=await At(w=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:w}));if(o.length===0||!o[0])throw new ut("No coins to deposit");let u=o[0],m=new wr;m.setSender(r.accountAddress);let{depositObj:p,isNewDeposit:h}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,m),[T]=ts([r.amount],o,m);if(!T)throw new ut("No coins to deposit");if(!r.token.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");let S=Da(m,r.token.originTokenAddress,{bridge:a.bridgeObjectAddress,userDeposit:p,coin:T});return m.mergeCoins(u.coinObjectId,[S]),h&&m.transferObjects([p],r.accountAddress),await m.toJSON({client:this.client})}async getDepositObject(r,a,o){let u=await this.fetchDeposits(r,a);if(u.length===0||!u[0]){let m=ue(a).phantomType;return{depositObj:Ua(o,m),isNewDeposit:!0}}else{if(u[0].data?.objectId)return{depositObj:u[0].data.objectId,isNewDeposit:!1};throw new O("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let a=r.token.suiAddresses;if(!a)throw new O("SUI token must contain 'suiAddresses'");if((0,qt.setAddress)(a.bridgeAddress,a.bridgeAddressOrigin),!r.token.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");let o=ue(r.token.originTokenAddress).phantomType,u=new wr;u.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:p}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,u);if(p)throw new ut("No deposit found");let h=Wa(u,o,{bridge:a.bridgeObjectAddress,userDeposit:m,amountLp:BigInt(r.amount)}),T=await At(S=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:S}));if(!h[0]||!h[1])throw new O("No rewards found");return T[0]?u.mergeCoins(T[0].coinObjectId,[h[0],h[1]]):(u.mergeCoins(h[0],[h[1]]),u.transferObjects([h[0]],r.accountAddress)),await u.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let a=r.token.suiAddresses;if(!a)throw new O("SUI token must contain 'suiAddresses'");if((0,qt.setAddress)(a.bridgeAddress,a.bridgeAddressOrigin),!r.token.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");let o=ue(r.token.originTokenAddress).phantomType,u=new wr;u.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:p}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,u);if(p)throw new ut("No deposit found");let h=Na(u,o,{bridge:a.bridgeObjectAddress,userDeposit:m}),T=await At(S=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:S}));return T[0]?u.mergeCoins(T[0].coinObjectId,[h]):u.transferObjects([h],r.accountAddress),await u.toJSON({client:this.client})}};g();y();f();import{Web3 as Br}from"web3";import{encodeFunctionCall as Yo}from"web3-eth-abi";var Rn=class extends Ue{constructor(r,a,o){super();this.tronWeb=r;this.api=a;this.tronJsonRpc=o}chainType="TRX";P=52;async getUserBalanceInfo(r,a){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,r,a)}catch{o=await this.getUserBalanceInfoPerProperty(r,a)}else o=await this.getUserBalanceInfoPerProperty(r,a);return o}async getUserBalanceInfoByBatch(r,a,o){let u=yn(o.poolAddress),m=yn(a),p=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:u,data:this.getFunctionAbi("userRewardDebt",m)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:u,data:this.getFunctionAbi("balanceOf",m)},"latest"]}],T=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p)})).json();if(Array.isArray(T)&&T.length===2){let S=w=>{let x=T.find(v=>v.id===w);if(!x||!x.result)throw new Error(`Missing or invalid result for id ${w}`);return Br.utils.toBigInt(x.result).toString()};return new xe({lpAmount:Br.utils.toBigInt(S(2)).toString(),rewardDebt:Br.utils.toBigInt(S(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(a.poolAddress),u=(await o.methods.userRewardDebt(r).call()).toString(),m=(await o.methods.balanceOf(r).call()).toString();return new xe({lpAmount:m,rewardDebt:u})}async getPoolInfoFromChain(r){let a;if(this.tronJsonRpc)try{a=await this.getPoolInfoByBatch(this.tronJsonRpc,r)}catch{a=await this.getPoolInfoPerProperty(r)}else a=await this.getPoolInfoPerProperty(r);return a}async getPoolInfoByBatch(r,a){let o=yn(a.poolAddress),u=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],p=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();if(Array.isArray(p)&&p.length===6){let h=x=>{let v=p.find(M=>M.id===x);if(!v||!v.result)throw new Error(`Missing or invalid result for id ${x}`);return Br.utils.toBigInt(v.result).toString()},T=h(3),S=h(4),w=ke({tokenBalance:T,vUsdBalance:S});return{aValue:h(1),dValue:h(2),tokenBalance:T,vUsdBalance:S,totalLpAmount:h(5),accRewardPerShareP:h(6),p:this.P,imbalance:w}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let a=this.getContract(r.poolAddress),[o,u,m,p,h,T]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),S=m.toString(),w=p.toString(),x=ke({tokenBalance:S,vUsdBalance:w});return{aValue:o.toString(),dValue:u.toString(),tokenBalance:S,vUsdBalance:w,totalLpAmount:h.toString(),accRewardPerShareP:T.toString(),p:this.P,imbalance:x}}buildRawTransactionDeposit(r){let{amount:a,accountAddress:o}=r,u=[{type:"uint256",value:a}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",u,"0",o)}buildRawTransactionWithdraw(r){let{amount:a,accountAddress:o}=r,u=[{type:"uint256",value:a}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",u,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:a}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",a)}async buildRawTransaction(r,a,o,u,m){let p=await this.tronWeb.transactionBuilder.triggerSmartContract(r,a,{callValue:+u},o,m);if(!p?.result?.result)throw new O("Unknown error: "+JSON.stringify(p,null,2));return p.transaction}getContract(r){return this.tronWeb.contract(Cn.abi,r)}getFunctionAbi(r,...a){let o=Cn.abi.find(u=>u.type==="function"&&"name"in u&&u.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Yo(o,a)}};var Ir=class{constructor(i,r,a,o){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a;this.tokenService=o;this.rawTxBuilder=new mr(i,r,this.params,o);let u=a.cachePoolInfoChainSec>0?a.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Lo({defaultTtl:u})}rawTxBuilder;cache;async getAllowance(i,r){if(r){let a=i,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},a)}else{let a=i;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress})}}async checkAllowance(i,r){if(r){let a=i,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},a)}else{let a=i;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress})}}async approve(i,r){return this.tokenService.approve(i,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(i,r,a){K(i),z("amount",i,r.decimals);let o=await this.getPoolInfoFromChain(r,a),{vUsdBalance:u,tokenBalance:m,aValue:p,dValue:h}=o,T=Ka(i,p,h,m,u);return j(T,3).toFixed()}async getAmountToBeWithdrawn(i,r,a,o){K(i),z("amount",i,a.decimals);let u=await this.getPoolInfoFromChain(a,o),m=Ha(i),p=We(m,a.decimals),T=(await this.getUserBalanceInfo(r,a,o)).earned(u)||"0",S=Jo(p).plus(T).toFixed();return j(S,a.decimals).toFixed()}async getUserBalanceInfo(i,r,a){return Kt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getUserBalanceInfo(i,r)}async getPoolInfoFromChain(i,r){let a={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o=this.cache.get(a);if(o)return o;{let u=await Kt(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(i);return this.cache.put(a,u),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},u),u}}};function Kt(s,i,r,a,o){switch(X.getChainProperty(s).chainType){case"EVM":{if(o)return new Bn(o,i);{let u=r.getNodeRpcUrl(s),m=new Qo(u);return m.defaultReturnFormat={number:Ho.STR,bytes:Ko.HEX},new Bn(m,i)}}case"TRX":{let u=r.getNodeRpcUrl(s),m=a.tronJsonRpc;if(o)return new Rn(o,i,m);{let p=new Xo({fullHost:u});return new Rn(p,i,m)}}case"SOLANA":{let u=r.getNodeRpcUrl(s);return new lr(u,i)}case"SRB":return new pr(r,a,i);case"SUI":return new Cr(r.getNodeRpcUrl(s),i)}}g();y();f();g();y();f();import{TronWeb as ec}from"tronweb";import{FMT_BYTES as tc,FMT_NUMBER as nc,Web3 as rc}from"web3";g();y();f();g();y();f();var zo={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"}]},Rr=zo;g();y();f();g();y();f();g();y();f();var Et=class{};var vn=class extends Et{constructor(r,a){super();this.web3=r;this.api=a}chainType="EVM";async balanceOf(r){let a=(await this.getYieldContract(r.token.yieldAddress).methods.balanceOf(r.owner).call()).toString();return j(a,3).toFixed()}async getEstimatedAmountOnDeposit(r){let a=Z(r.amount,r.token.decimals).toFixed(),o=(await this.getYieldContract(r.token.yieldAddress).methods.getEstimatedAmountOnDeposit(a,r.token.yieldId).call()).toString();return j(o,3).toFixed()}async getWithdrawProportionAmount(r){let a=Z(r.amount,3).toFixed();return await this.getYieldContract(r.cydToken.yieldAddress).methods.getWithdrawProportionAmount(r.owner,a).call()}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams({owner:r.owner,yieldAddress:r.token.yieldAddress}),data:this.getYieldContract(r.token.yieldAddress).methods.deposit(r.amount,r.token.yieldId,r.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams({owner:r.owner,yieldAddress:r.token.yieldAddress}),data:this.getYieldContract(r.token.yieldAddress).methods.withdraw(r.amount).encodeABI()})}buildTxParams(r){return{from:r.owner,to:r.yieldAddress,value:"0"}}getYieldContract(r){return new this.web3.eth.Contract(Rr.abi,r)}};g();y();f();var vr=class{constructor(i,r,a,o){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a;this.tokenService=o}async approve(i,r){return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.yieldAddress},r)}async deposit(i,r){return K(i.amount),z("amount",i.amount,i.token.decimals),K(i.minVirtualAmount),z("minVirtualAmount",i.minVirtualAmount,3),i.amount=Z(i.amount,i.token.decimals).toFixed(),i.minVirtualAmount=Z(i.minVirtualAmount,3).toFixed(),en(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,r).buildRawTransactionDeposit(i)}async withdraw(i,r){return K(i.amount),z("amount",i.amount,3),i.amount=Z(i.amount,3).toFixed(),en(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,r).buildRawTransactionWithdraw(i)}};g();y();f();var kn=class extends Et{constructor(r,a){super();this.tronWeb=r;this.api=a}chainType="TRX";async balanceOf(r){let a=(await(await this.getContract(r.token.yieldAddress)).methods.balanceOf(r.owner).call()).toString();return j(a,3).toFixed()}async getEstimatedAmountOnDeposit(r){let a=Z(r.amount,r.token.decimals).toFixed(),o=(await(await this.getContract(r.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(a,r.token.yieldId).call()).toString();return j(o,3).toFixed()}async getWithdrawProportionAmount(r){let a=Z(r.amount,3).toFixed();return(await(await this.getContract(r.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(r.owner,a).call()).toString().split(",")}async buildRawTransactionDeposit(r){let{amount:a,owner:o,token:u,minVirtualAmount:m}=r,p=[{type:"uint256",value:a},{type:"uint256",value:u.yieldId},{type:"uint256",value:m}];return this.buildRawTransaction(r.token.yieldAddress,"deposit(uint256,uint256,uint256)",p,"0",o)}async buildRawTransactionWithdraw(r){let{amount:a,owner:o}=r,u=[{type:"uint256",value:a}];return this.buildRawTransaction(r.token.yieldAddress,"withdraw(uint256)",u,"0",o)}async buildRawTransaction(r,a,o,u,m){let p=await this.tronWeb.transactionBuilder.triggerSmartContract(r,a,{callValue:+u},o,m);if(!p?.result?.result)throw new O("Unknown error: "+JSON.stringify(p,null,2));return p.transaction}getContract(r){return this.tronWeb.contract(Rr.abi,r)}};g();y();f();function qo(s){if(!kr(s))throw new Zn("Token does not support Yield")}function kr(s){return!!s.yieldAddress&&s.yieldId!==void 0}var xr=class{constructor(i,r,a,o){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a;this.tokenService=o;this.rawTxBuilder=new vr(i,r,a,o)}rawTxBuilder;async getCYDTokens(){let i=[],r=await this.api.getChainDetailsMap("pool");return Object.values(r).forEach(a=>{if(a.yieldAddress){let o=a.tokens.find(m=>m.tokenAddress===a.yieldAddress),u=a.tokens.filter(kr);if(u.length>0){let m=o??{allbridgeChainId:a.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeAddress:a.bridgeAddress,chainId:a.chainId,chainName:a.name,chainSymbol:a.chainSymbol,chainType:a.chainType,confirmations:a.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:a.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:a.yieldAddress};i.push({...m,yieldAddress:a.yieldAddress,tokens:u})}}}),i}async getAllowance(i,r){return await this.tokenService.getAllowance({...i,spender:i.token.yieldAddress},r)}async checkAllowance(i,r){return this.tokenService.checkAllowance({...i,spender:i.token.yieldAddress},r)}async balanceOf(i,r){return en(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,r).balanceOf(i)}async getEstimatedAmountOnDeposit(i,r){return K(i.amount),z("amount",i.amount,i.token.decimals),en(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.token.yieldAddress,r).getEstimatedAmountOnDeposit(i)}async getWithdrawAmounts(i,r){K(i.amount),z("amount",i.amount,3);let a=await en(i.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,r).getWithdrawProportionAmount(i);return i.cydToken.tokens.filter(o=>a[o.yieldId]!==void 0).map(o=>({amount:j(a[o.yieldId],o.decimals).toFixed(),token:o}))}};function en(s,i,r,a,o){switch(X.getChainProperty(s).chainType){case"EVM":{if(o)return new vn(o,i);{let u=r.getNodeRpcUrl(s),m=new rc(u);return m.defaultReturnFormat={number:nc.STR,bytes:tc.HEX},new vn(m,i)}}case"TRX":{if(o)return new kn(o,i);{let u=r.getNodeRpcUrl(s),m=new ec({fullHost:u});return m.setAddress(a),new kn(m,i)}}case"SOLANA":throw new Ae;case"SRB":throw new Ae;case"SUI":throw new Ae}}g();y();f();import{Big as de}from"big.js";function as(s,i,r){let a=ic(s,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),o=ac(a.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:o}}function ss(s,i,r){let a=sc(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=oc(a.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:o}}function ic(s,{feeShare:i,decimals:r},a){let o=de(s),u=o.times(i),m=o.minus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInSystemPrecision:rs(xt(m,r),a),amountExcludingCommissionInSystemPrecision:rs(xt(o,r),a)}}function rs(s,i){if(s.eq(0))return"0";let r=de(i.tokenBalance).plus(s),a=at(r.toFixed(),i.aValue,i.dValue);return de(i.vUsdBalance).minus(a).round().toFixed()}function ac(s,{feeShare:i,decimals:r},a){if(de(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let u=de(s).plus(a.vUsdBalance),m=at(u,a.aValue,a.dValue),p=We(de(a.tokenBalance).minus(m),r),h=de(p).times(i),T=de(p).minus(h).round();return{bridgeFeeInTokenPrecision:h.round().toFixed(),amountIncludingCommissionInTokenPrecision:T.toFixed(),amountExcludingCommissionInTokenPrecision:p.toFixed()}}function sc(s,{feeShare:i,decimals:r},a){let o=de(i).div(de(1).minus(i)),u=de(s).times(o),m=de(s).plus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInSystemPrecision:is(xt(m,r),a),amountExcludingCommissionInSystemPrecision:is(xt(s,r),a)}}function is(s,i){let r=de(i.tokenBalance).minus(s),a=at(r.toFixed(),i.aValue,i.dValue);return de(a).minus(i.vUsdBalance).round().toFixed()}function oc(s,{feeShare:i,decimals:r},a){if(de(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=de(a.vUsdBalance).minus(s),u=at(o.toFixed(),a.aValue,a.dValue),m=de(u).minus(a.tokenBalance),p=We(m.toFixed(),r),h=de(i).div(de(1).minus(i)),T=de(p).times(h),S=de(p).plus(T);return{bridgeFeeInTokenPrecision:T.round().toFixed(),amountIncludingCommissionInTokenPrecision:S.round().toFixed(),amountExcludingCommissionInTokenPrecision:p.toFixed()}}g();y();f();import{Big as Ct}from"big.js";function os(s,i,r,a,o){let u=it(s,i,r),m=We(u,i.decimals),p=fn(u,a,o),h=Ct(s).times(i.feeShare),T=Ct(p).div(Ct(1).minus(a.feeShare)).minus(p);return{sourceLPSwap:{fee:j(h,i.decimals).neg().round(i.decimals,Ct.roundUp).toFixed(),swap:j(Ct(s).minus(m).minus(h),i.decimals).neg().round(i.decimals,Ct.roundUp).toFixed()},destLPSwap:{fee:j(T,a.decimals).neg().round(a.decimals,Ct.roundUp).toFixed(),swap:j(We(u,a.decimals).minus(p).minus(T),a.decimals).neg().round(a.decimals,Ct.roundUp).toFixed()}}}g();y();f();g();y();f();g();y();f();g();y();f();import dc from"axios";g();y();f();var cs="3.25.0";g();y();f();function As(s){return Object.entries(s).reduce((i,r)=>{let a=r[0],o=r[1],u=lc(a,o);return u&&(i[a]=u),i},{})}function us(s){let i={};for(let[r,a]of Object.entries(s)){let o=r;for(let u of a.tokens){let m=tn({chainSymbol:o,poolAddress:u.poolAddress}),p=ke(u.poolInfo);i[m]={...u.poolInfo,imbalance:p}}}return i}function cc(s,i){let{name:r,...a}=s,{poolInfo:o,...u}=i;return{...u,...a,chainName:r}}function Ac(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function uc(s){return Object.entries(s).reduce((i,[r,a])=>(i[r]=mc(a),i),{})}function mc(s){return Object.entries(s).reduce((i,[r,a])=>{let o=Ac(r);return o&&a!=null&&(i[o]=a),i},{})}function lc(s,i){let r=X.getChainsProperties()[s];if(!r)return null;let a={...r,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,oftBridgeAddress:i.oftBridgeAddress,yieldAddress:i.yieldAddress,transferTime:uc(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations,suiAddresses:i.suiAddresses};return{...a,tokens:i.tokens.map(o=>cc(a,o))}}function tn(s){return s.chainSymbol+"_"+s.poolAddress}function ms(s){let i=[];for(let[r,a]of Object.entries(s)){let o=r;for(let u of a.tokens)i.push({chainSymbol:o,poolAddress:u.poolAddress})}return i}function ls(s){let i={};for(let[r,a]of Object.entries(s)){let o=r;for(let[u,m]of Object.entries(a))m.imbalance=ke(m),i[tn({chainSymbol:o,poolAddress:u})]=m}return i}var nn=class{api;constructor(i){this.api=dc.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+cs},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:As(i),poolInfoMap:us(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,r){let{data:a}=await this.api.get(`/check/${i}/${r}`);return a}async getTransferStatus(i,r){let{data:a}=await this.api.get(`/chain/${i}/${r}`);return a}async getReceiveTransactionCost(i){if(i.messenger===5&&!i.sourceToken)throw new Gn("For OFT sourceToken required");let{data:r}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:r.exchangeRate,fee:r.fee,sourceNativeTokenPrice:r.sourceNativeTokenPrice,adminFeeShareWithExtras:r.adminFeeShareWithExtras}}async getPoolInfoMap(i){let r=i instanceof Array?i:[i],{data:a}=await this.api.post("/pool-info",{pools:r},{headers:{"Content-Type":"application/json"}});return ls(a)}};g();y();f();import Fr from"timed-cache";var vi=20*1e3,pc=55*1e3,rn=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new Fr({defaultTtl:pc}),this.receivedTransactionCache=new Fr({defaultTtl:vi}),this.pendingInfoCache=new Fr({defaultTtl:vi}),this.gasBalanceCache=new Fr({defaultTtl:vi})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(i);if(r)return r;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,a),a}async getGasBalance(i,r){let a=`GAS_BALANCE_${i}_${r}`,o=this.gasBalanceCache.get(a);if(o)return o;let u=this.apiClient.getGasBalance(i,r);return this.gasBalanceCache.put(a,u),u}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(i);if(r)return r;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,a),a}async getReceiveTransactionCost(i){let r=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}${i.sourceToken?"_"+i.sourceToken:""}`,a=this.receivedTransactionCache.get(r);if(a)return a;let o=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(r,o),o}async getTransferStatus(i,r){return this.apiClient.getTransferStatus(i,r)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};g();y();f();var an=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(r=>r.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,r){return this.apiClient.getGasBalance(i,r)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,r){return await this.apiClient.getTransferStatus(i,r)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};g();y();f();var sn=class{constructor(i,r){this.client=i;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let r=await this.client.getChainDetailsMap(),a={};for(let o in r){let u=r[o];u&&(a[o]={...u,tokens:ds(u.tokens,i,this.isStaging)})}return a}async tokens(i){return ds(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,r){return this.client.getGasBalance(i,r)}async getTransferStatus(i,r){return await this.client.getTransferStatus(i,r)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,r){return this.client.cachePut(i,r)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function ds(s,i,r){return s.filter(a=>r?!0:a.flags[i]).map(gc)}function gc(s){let{flags:i,...r}=s;return r}g();y();f();import fc from"timed-cache";var yc=55*1e3,on=class{constructor(i){this.client=i;this.poolInfoCache=new ki}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,r){return this.client.getTransferStatus(i,r)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,r){return this.client.getGasBalance(i,r)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let r=this.poolInfoCache.get(i);if(r)return r;{let a=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(a);let o=a[tn(i)];if(o)return o;throw new O("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let r;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(i);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(ms(a.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(i,r){this.poolInfoCache.put(tn(i),r)}},ki=class{cache;constructor(){this.cache=new fc({defaultTtl:yc})}putAll(i){for(let[r,a]of Object.entries(i))this.cache.put(r,a)}putAllIfNotExists(i){for(let[r,a]of Object.entries(i))this.cache.get(r)||this.cache.put(r,a)}put(i,r){this.cache.put(i,r)}get(i){let r=tn(i);return this.cache.get(r)}};g();y();f();import{Big as Rc}from"big.js";import{TronWeb as vc}from"tronweb";import{Web3 as kc}from"web3";g();y();f();g();y();f();var hc={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"}]},Mr=hc;g();y();f();g();y();f();g();y();f();import{Big as ps}from"big.js";var Ge=class{async checkAllowance(i){let r=await this.getAllowance(i);return ps(r).gte(ps(i.amount))}};var Tc="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",bc="0xdac17f958d2ee523a2206206994597c13d831ec7",Sc=1e5,xn=class extends Ge{constructor(r,a){super();this.web3=r;this.api=a}chainType="EVM";getAllowance(r){let a=r.token.tokenAddress,o=r.owner,u=r.spender;return this.getAllowanceByTokenAddress(a,o,u)}getAllowanceByTokenAddress(r,a,o){return this.getERC20Contract(r).methods.allowance(a,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let u=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(u,r.chainSymbol)}let a=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(a,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===bc}buildRawTransactionApprove(r){let{tokenAddress:a,spender:o,owner:u,amount:m}=r,h=this.getERC20Contract(a).methods.approve(o,m==null?Tc:cr(m));return Promise.resolve({from:u,to:a,value:"0",data:h.encodeABI()})}async sendRawTransaction(r,a){let o=r,u={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};a==="POL"?o.gas=Sc:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:m}=await this.web3.eth.sendTransaction({...o,...u});return{txId:m.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Mr.abi,r)}};g();y();f();import{AnchorProvider as Pc}from"@project-serum/anchor";import{Connection as wc,PublicKey as Or}from"@solana/web3.js";var Dr=class extends Ge{constructor(r,a){super();this.solanaRpcUrl=r;this.api=a}chainType="SOLANA";approve(r){throw new Ae}buildRawTransactionApprove(r){throw new Ae}buildAnchorProvider(r){let a=new wc(this.solanaRpcUrl,"confirmed"),o=new Or(r);return new Pc(a,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new Ae}async getTokenBalance(r){let{account:a,token:o}=r;try{let u=await Qe(new Or(a),new Or(o.tokenAddress));return(await $t(u,this.buildAnchorProvider(a))).amount.toString()}catch(u){if(u instanceof Error)return u.message.startsWith("Account does not exist"),"0";throw u}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Or(r.account))).toString()}};g();y();f();import{Horizon as nI,NotFoundError as Cc}from"@stellar/stellar-sdk";var Wr=class extends Ge{constructor(r,a,o){super();this.nodeRpcUrlsConfig=r;this.params=a;this.api=o}chainType="SRB";getAllowance(){throw new Ae}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new O("OriginTokenAddress missing");let[a,o]=r.token.originTokenAddress.split(":"),u=new nI.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),m;try{m=await u.loadAccount(r.account)}catch(T){if(T instanceof Cc)return"0";throw T}let h=m.balances.find(T=>(T.asset_type==="credit_alphanum4"||T.asset_type==="credit_alphanum12")&&T.asset_code==a&&T.asset_issuer==o);return h?.balance?Z(h.balance,X.getChainDecimalsByType(X.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let m=(await new nI.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(p=>p.asset_type==="native");return m?.balance?Z(m.balance,X.getChainDecimalsByType(X.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new Ae}buildRawTransactionApprove(){throw new Ae}};g();y();f();import{SuiClient as Bc}from"@mysten/sui/client";var Nr=class extends Ge{constructor(r,a){super();this.suiRpcUrl=r;this.api=a;this.suiClient=new Bc({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new Ae}buildRawTransactionApprove(r){throw new Ae}getAllowance(r){throw new Ae}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new O("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let a=await At(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return a.length===0?"0":a.reduce((o,u)=>o+BigInt(u.balance),BigInt(0)).toString()}};g();y();f();var Ic="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Fn=class extends Ge{constructor(r,a){super();this.tronWeb=r;this.api=a}chainType="TRX";async getAllowance(r){let{token:{tokenAddress:a},owner:o}=r;return(await(await this.getContract(a)).methods.allowance(o,r.spender).call()).toString()}async getTokenBalance(r){return(await(await this.getContract(r.token.tokenAddress)).balanceOf(r.account).call()).toString()}async getNativeTokenBalance(r){return(await this.tronWeb.trx.getBalance(r.account)).toString()}async approve(r){let a=await this.buildRawTransactionApprove(r);return await Ar(this.tronWeb,a)}async buildRawTransactionApprove(r){let{tokenAddress:a,spender:o,owner:u,amount:m}=r,p=m==null?Ic:cr(m),h=[{type:"address",value:o},{type:"uint256",value:p}];return this.buildRawTransaction(a,"approve(address,uint256)",h,"0",u)}getContract(r){return this.tronWeb.contract(Mr.abi,r)}async buildRawTransaction(r,a,o,u,m){let p=await this.tronWeb.transactionBuilder.triggerSmartContract(r,a,{callValue:+u},o,m);if(!p?.result?.result)throw new O("Unknown error: "+JSON.stringify(p,null,2));return p.transaction}};var cn=class{constructor(i,r,a){this.api=i;this.nodeRpcUrlsConfig=r;this.params=a}async getAllowance(i,r){let a=await this.getChainTokenService(i.token.chainSymbol,i.owner,r).getAllowance(i);return j(a,i.token.decimals).toFixed()}async checkAllowance(i,r){return K(i.amount),z("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,r).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,r){return r.amount&&(K(r.amount),z("amount",r.amount,r.token.decimals)),this.getChainTokenService(r.token.chainSymbol,r.owner,i).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(i,r){return i.amount&&(K(i.amount),z("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,r).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,r){let a=await this.getChainTokenService(i.token.chainSymbol,i.account,r).getTokenBalance(i);return i.token.decimals?j(a,i.token.decimals).toFixed():a}async getNativeTokenBalance(i,r){let a=await this.getChainTokenService(i.chainSymbol,i.account,r).getNativeTokenBalance(i);return{int:a,float:j(a,X.getChainDecimalsByType(X.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,r,a){switch(X.getChainProperty(i).chainType){case"EVM":{if(a)return new xn(a,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new xn(new kc(o),this.api)}}case"TRX":{if(a)return new Fn(a,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),u=new vc({fullHost:o});return u.setAddress(r),new Fn(u,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Dr(o,this.api)}case"SRB":return new Wr(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Nr(this.nodeRpcUrlsConfig.getNodeRpcUrl(i),this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:Z(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:Rc(i.amount).toFixed()}}};var Er=class{constructor(i,r){this.nodeRpcUrlsConfig=i;this.params=r;let a=new nn(r),o=new rn(a),u=new an(o),m=new on(u);this.api=new sn(m,r),this.tokenService=new cn(this.api,i,r)}api;tokenService;buildRawTransactionApprove(i,r){return this.tokenService.buildRawTransactionApprove(i,r)}checkAllowance(i,r){return this.tokenService.checkAllowance(i,r)}getAllowance(i,r){return this.tokenService.getAllowance(i,r)}};g();y();f();import{Connection as xc,PublicKey as Fc,TransactionMessage as Mc}from"@solana/web3.js";var Ur=class{constructor(i,r){this.nodeRpcUrlsConfig=i;this.params=r}async addMemoToTx(i,r){if(r.length>28)throw new O("InvalidArgumentException memo cannot be more than 28 characters");let a=new xc(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await Mt(i,a),u=Mc.decompile(i.message,{addressLookupTableAccounts:o}),m=u.instructions[u.instructions.length-1];if(!m?.keys)throw new O("Last instruction or its keys are invalid.");m.keys.push({pubkey:new Fc(P.from(r)),isSigner:!1,isWritable:!1}),i.message=u.compileToV0Message(o)}};g();y();f();import{Asset as Wc,BASE_FEE as Nc,contract as mx,Horizon as gs,Operation as Ec,Operation as Uc,rpc as On,TimeoutInfinite as Gc,TransactionBuilder as xi,TransactionBuilder as fs}from"@stellar/stellar-sdk";g();y();f();import{contract as e}from"@stellar/stellar-sdk";var Oc=e.Spec,Dc=e.Client;var Mn=class extends Dc{constructor(r){super(new Oc(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),r);this.options=r}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 Vc=100,jc=180,Gr=class{constructor(i,r){this.nodeRpcUrlsConfig=i;this.params=r}async buildChangeTrustLineXdrTx(i){let a=await new gs.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),u=await this.getContract(Mn,i.tokenAddress).name();if(Qt(u))throw new O;let m=Ht(u);if(!m)throw new O;let[p,h]=m.split(":");if(p===void 0||h===void 0)throw new O("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let T=new Wc(p,h),S=Uc.changeTrust({asset:T,limit:i.limit});return new fs(a,{fee:Vc.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(S).setTimeout(jc).build().toXDR()}async getBalanceLine(i,r){let o=await this.getContract(Mn,r).name();if(Qt(o))throw new O;let u=Ht(o);if(!u)throw new O;let[m,p]=u.split(":"),h=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new gs.Server(h).loadAccount(i)).balances.find(x=>(x.asset_type==="credit_alphanum4"||x.asset_type==="credit_alphanum12")&&x.asset_code==m&&x.asset_issuer==p)}async submitTransactionStellar(i){let r=new gs.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),a=fs.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(a)}async simulateAndCheckRestoreTxRequiredSoroban(i,r){let a=new On.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await a.getAccount(r),u=xi.fromXDR(i,this.params.sorobanNetworkPassphrase),m=await a.simulateTransaction(u);if(On.Api.isSimulationRestore(m))return new xi(o,{fee:(+Nc+ +m.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(m.restorePreamble.transactionData.build()).addOperation(Ec.restoreFootprint({})).setTimeout(Gc).build().toXDR()}async sendTransactionSoroban(i){let r=new On.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=xi.fromXDR(i,this.params.sorobanNetworkPassphrase);return r.sendTransaction(a)}async confirmTx(i,r=15){let a=new On.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Xi(()=>a.getTransaction(i),m=>m.status===On.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new O("No transaction responses found.");let u=o[o.length-1];if(!u)throw new O("Unexpected error: last response is undefined.");return u}getContract(i,r){let a={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(a)}};g();y();f();var Vr=class{constructor(i,r){this.nodeRpcUrlsConfig=i;this.api=r}_suiBridgeService;async buildSendTxFromCustomTx(i,r,a){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(i,r,a)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new Xt(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var jr=class{constructor(i){this.service=i;this.srb=new Gr(i.nodeRpcUrlsConfig,i.params),this.sol=new Ur(i.nodeRpcUrlsConfig,i.params),this.sui=new Vr(i.nodeRpcUrlsConfig,i.api),this.evm=new Er(i.nodeRpcUrlsConfig,i.params)}srb;sol;sui;evm};g();y();f();var Ft=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(Ft||{}),Ln=(r=>(r.INT="int",r.FLOAT="float",r))(Ln||{});g();y();f();import{Big as fe}from"big.js";var Dn=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let r=this.nodeRpcUrls[i];if(r!==void 0)return r;throw new _n(i)}},_r=class{constructor(i,r=Un){this.nodeRpcUrlsConfig=i;X.addChainsProperties(r.additionalChainsProperties);let a=new nn(r),o=new rn(a),u=new an(o),m=new on(u);this.api=new sn(m,r),this.tokenService=new cn(this.api,i,r),this.bridge=new ur(this.api,i,r,this.tokenService),this.pool=new Ir(this.api,i,r,this.tokenService),this.yield=new xr(this.api,i,r,this.tokenService),this.params=r}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,r){let o=(await this.api.getChainDetailsMap(r))[i];return o?o.tokens:[]}async getTransferStatus(i,r){return this.api.getTransferStatus(i,r)}async getGasBalance(i,r){return this.api.getGasBalance(i,r)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,r,a,o){K(i);let u;r=="float"?(z("amount",i,a.decimals),u=Z(i,a.decimals).toFixed()):u=i;let m=it(u,a,await ge(this.api,a)),p=await ge(this.api,o),h=this.getAmountFromVUsdFormatted(m,o,p),T,S=await this.api.getPendingInfo();for(let w in S[o.chainSymbol]){let x=S[o.chainSymbol];if(!x)throw new O("Cannot find pending info for "+o.chainSymbol);T=x[w]}if(T){let w=sa(T.totalSentAmount,p),x=this.getAmountFromVUsdFormatted(m,o,w),v;return fe(x.int).gt(h.int)?v={min:h,max:x}:v={min:x,max:h},{pendingTxs:T.pendingTxs,pendingAmount:{int:Je(T.totalSentAmount,3,o.decimals).toFixed(0),float:j(T.totalSentAmount,3).toFixed()},estimatedAmount:v}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:h,max:h}}}async getTokenBalance(i,r){return this.tokenService.getTokenBalance(i,r)}async getNativeTokenBalance(i,r){return this.tokenService.getNativeTokenBalance(i,r)}async calculateFeePercentOnSourceChain(i,r){K(i),z("amountFloat",i,r.decimals);let a=Z(i,r.decimals);if(a.eq(0))return 0;let o=it(a,r,await ge(this.api,r)),u=We(o,r.decimals);return ti(a,u)}async calculateFeePercentOnDestinationChain(i,r,a){K(i),z("amountFloat",i,r.decimals);let o=Z(i,r.decimals);if(o.eq(0))return 0;let u=it(o,r,await ge(this.api,r)),m=fn(u,a,await ge(this.api,a)),p=We(u,a.decimals);return ti(p,m)}async getAmountToBeReceivedAndGasFeeOptions(i,r,a,o){return K(i),z("amountToSendFloat",i,r.decimals),{amountToSendFloat:fe(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,r,a,o),gasFeeOptions:await this.getGasFeeOptions(r,a,o)}}async getAmountToSendAndGasFeeOptions(i,r,a,o){return K(i),z("amountToBeReceivedFloat",i,a.decimals),{amountToSendFloat:await this.getAmountToSend(i,r,a,o),amountToBeReceivedFloat:fe(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,a,o)}}async getAmountToBeReceived(i,r,a,o){return this.getAmountToBeReceivedCompute(i,r,a,o,async()=>await ge(this.api,r),async()=>await ge(this.api,a))}async getAmountToBeReceivedFromChain(i,r,a,o,u,m){return this.getAmountToBeReceivedCompute(i,r,a,o,async()=>await this.pool.getPoolInfoFromChain(r,u),async()=>await this.pool.getPoolInfoFromChain(a,m))}async getAmountToBeReceivedCompute(i,r,a,o=1,u,m){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(i,r,a,await u(),await m());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(i,r,a,o);case 5:return this.getAmountToBeReceivedComputeOft(i,r,a)}}getAmountToBeReceivedComputeWithPools(i,r,a,o,u){K(i),z("amountToSendFloat",i,r.decimals);let m=Z(i,r.decimals),p=it(m,r,o);return this.getAmountFromVUsdFormatted(p,a,u).float}getAmountToBeReceivedComputeCctp(i,r,a,o){K(i),z("amountToSendFloat",i,r.decimals);let u=Z(i,r.decimals);switch(o){case 3:{if(!r.cctpAddress||!a.cctpAddress||!r.cctpFeeShare)throw new Ie("Such route does not support CCTP protocol");let m=u.mul(fe(1).minus(r.cctpFeeShare)).round(0,fe.roundUp),p=Je(m,r.decimals,a.decimals).round(0);return j(p,a.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!a.cctpV2Address||!r.cctpV2FeeShare)throw new Ie("Such route does not support CCTP V2 protocol");let m=u.mul(fe(1).minus(r.cctpV2FeeShare)).round(0,fe.roundUp),p=Je(m,r.decimals,a.decimals).round(0);return j(p,a.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(i,r,a){K(i),z("amountToSendFloat",i,r.decimals);let o=Z(i,r.decimals);if(!r.oftBridgeAddress||!a.oftBridgeAddress||r.oftId!==a.oftId)throw new Re("Such route does not support OFT protocol");let{adminFeeShareWithExtras:u}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!u)throw new Re("Such route does not support OFT protocol");let m=o.mul(fe(1).minus(u)).round(0,fe.roundUp),p=Je(m,r.decimals,a.decimals).round(0);return j(p,a.decimals).toFixed()}async getAmountToSend(i,r,a,o){return this.getAmountToSendCompute(i,r,a,o,()=>ge(this.api,r),()=>ge(this.api,a))}async getAmountToSendFromChain(i,r,a,o,u,m){return this.getAmountToSendCompute(i,r,a,o,()=>this.pool.getPoolInfoFromChain(r,u),()=>this.pool.getPoolInfoFromChain(a,m))}async getAmountToSendCompute(i,r,a,o=1,u,m){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(i,r,a,await u(),await m());case 3:case 4:return this.getAmountToSendComputeCctp(i,r,a,o);case 5:return this.getAmountToSendComputeOft(i,r,a)}}getAmountToSendComputeWithPools(i,r,a,o,u){K(i),z("amountToBeReceivedFloat",i,a.decimals);let m=Z(i,a.decimals),p=ca(m,a,u),h=oa(p,r,o);if(fe(h).lte(0))throw new mt;return j(h,r.decimals).toFixed()}getAmountToSendComputeCctp(i,r,a,o){K(i),z("amountToBeReceivedFloat",i,a.decimals);let u=Z(i,a.decimals);switch(o){case 3:{if(!r.cctpAddress||!a.cctpAddress||!r.cctpFeeShare)throw new Ie("Such route does not support CCTP protocol");let m=u.div(fe(1).minus(r.cctpFeeShare)).round(0,fe.roundDown),p=Je(m,a.decimals,r.decimals).round(0);return j(p,r.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!a.cctpV2Address||!r.cctpV2FeeShare)throw new Ie("Such route does not support CCTP V2 protocol");let m=u.div(fe(1).minus(r.cctpV2FeeShare)).round(0,fe.roundDown),p=Je(m,a.decimals,r.decimals).round(0);return j(p,r.decimals).toFixed()}}}async getAmountToSendComputeOft(i,r,a){K(i),z("amountToBeReceivedFloat",i,a.decimals);let o=Z(i,a.decimals);if(!r.oftId||!a.oftId||!r.oftBridgeAddress||r.oftId!==a.oftId)throw new Re("Such route does not support OFT protocol");let{adminFeeShareWithExtras:u}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!u)throw new Re("Such route does not support OFT protocol");let m=o.div(fe(1).minus(u)).round(0,fe.roundDown),p=Je(m,a.decimals,r.decimals).round(0);return j(p,r.decimals).toFixed()}async getGasFeeOptions(i,r,a){return ni(i,r.allbridgeChainId,a,this.api)}getAverageTransferTime(i,r,a){return i.transferTime?.[r.chainSymbol]?.[a]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let a=(i instanceof Array?i:[i]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(a)}return this.api.refreshPoolInfo()}aprInPercents(i){return ua(i)}async getExtraGasMaxLimits(i,r,a){return await ri(i,r,a,this.api)}async getVUsdFromAmount(i,r,a){K(i);let o;r=="float"?(z("amount",i,a.decimals),o=Z(i,a.decimals).toFixed()):o=i;let u=it(o,a,await ge(this.api,a));return{int:u,float:j(u,3).toFixed()}}async getAmountFromVUsd(i,r){return this.getAmountFromVUsdFormatted(i,r,await ge(this.api,r))}getAmountFromVUsdFormatted(i,r,a){K(i);let o=fn(i,r,a);if(fe(o).lt(0))throw new mt;return{int:o,float:j(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,r,a){return as(i,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await ge(this.api,r)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await ge(this.api,a)})}async swapAndBridgeFeeCalculationReverse(i,r,a){let o=ss(i,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await ge(this.api,r)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await ge(this.api,a)}),u=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(fe(u).lt(0))throw new mt;return o}async getSendAmountDetails(i,r,a,o){K(i);let u;return r=="float"?(z("amount",i,a.decimals),u=Z(i,a.decimals).toFixed()):u=i,os(u,a,await ge(this.api,a),o,await ge(this.api,o))}};function _c(s){return"solanaRpcUrl"in s}var ys=class{params;bridge;pool;yield;utils;service;constructor(i,r=Un){let a;_c(i)?a=new Dn({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):a=new Dn(i),this.service=new _r(a,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new jr(this.service),this.params=r}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,r="swap"){return this.service.tokensByChain(i,r)}async getTransferStatus(i,r){return this.service.getTransferStatus(i,r)}async getGasBalance(i,r){return this.service.getGasBalance(i,r)}async checkAddress(i,r,a){return await this.service.checkAddress()}async getPendingStatusInfo(i,r,a,o){return this.service.getPendingStatusInfo(i,r,a,o)}async getTokenBalance(i,r){return this.service.getTokenBalance(i,r)}async getNativeTokenBalance(i,r){return this.service.getNativeTokenBalance(i,r)}async calculateFeePercentOnSourceChain(i,r){return this.service.calculateFeePercentOnSourceChain(i,r)}async calculateFeePercentOnDestinationChain(i,r,a){return this.service.calculateFeePercentOnDestinationChain(i,r,a)}async getAmountToBeReceivedAndGasFeeOptions(i,r,a,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,r,a,o)}async getAmountToSendAndGasFeeOptions(i,r,a,o){return this.service.getAmountToSendAndGasFeeOptions(i,r,a,o)}async getAmountToBeReceived(i,r,a,o=1){return this.service.getAmountToBeReceived(i,r,a,o)}async getAmountToBeReceivedFromChain(i,r,a,o=1,u,m){return this.service.getAmountToBeReceivedFromChain(i,r,a,o,u,m)}getAmountToBeReceivedFromPools(i,r,a,o,u,m=1){switch(m){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(i,r,a,o,u);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(i,r,a,m)}}async getAmountToSend(i,r,a,o=1){return this.service.getAmountToSend(i,r,a,o)}async getAmountToSendFromChain(i,r,a,o=1,u,m){return this.service.getAmountToSendFromChain(i,r,a,o,u,m)}getAmountToSendFromPools(i,r,a,o,u,m=1){switch(m){case 1:case 2:return this.service.getAmountToSendComputeWithPools(i,r,a,o,u);case 3:case 4:return this.service.getAmountToSendComputeCctp(i,r,a,m)}}async getGasFeeOptions(i,r,a){return this.service.getGasFeeOptions(i,r,a)}getAverageTransferTime(i,r,a){return this.service.getAverageTransferTime(i,r,a)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,r,a=1){return this.service.getExtraGasMaxLimits(i,r,a)}async getVUsdFromAmount(i,r,a){return this.service.getVUsdFromAmount(i,r,a)}async getAmountFromVUsd(i,r){return this.service.getAmountFromVUsd(i,r)}async swapAndBridgeFeeCalculation(i,r,a){return this.service.swapAndBridgeFeeCalculation(i,r,a)}async swapAndBridgeFeeCalculationReverse(i,r,a){return this.service.swapAndBridgeFeeCalculationReverse(i,r,a)}async getSendAmountDetails(i,r,a,o){return this.service.getSendAmountDetails(i,r,a,o)}};export{Kr as AddressStatus,ys as AllbridgeCoreSdk,Ln as AmountFormat,Vt as AmountNotEnoughError,jn as ArgumentInvalidDecimalsError,Ie as CCTPDoesNotSupportedError,$e as ChainSymbol,re as ChainType,Ds as ErrorCode,Vn as ExtraGasMaxLimitExceededError,Ft as FeePaymentMethod,mt as InsufficientPoolLiquidityError,ut as InvalidAmountError,mn as InvalidGasFeePaymentOptionError,Gn as InvalidMessengerOptionError,jt as InvalidTxError,Te as JupiterError,Ye as Messenger,Ae as MethodNotSupportedError,_n as NodeRpcUrlNotInitializedError,Re as OFTDoesNotSupportedError,O as SdkError,ce as SdkRootError,ii as SolanaAutoTxFee,dn as TimeoutError,$n as TxTooLargeError,ln as VerifyTxError,Zn as YieldDoesNotSupportedError,qo as assertYieldIsSupported,kr as isYieldSupported,Un as mainnet,mA as nodeRpcUrlsDefault,uA as nodeUrlsDefault};
1
+ var $r=Object.create;var ao=Object.defineProperty;var qr=Object.getOwnPropertyDescriptor;var es=Object.getOwnPropertyNames;var ts=Object.getPrototypeOf,ns=Object.prototype.hasOwnProperty;var Ft=(r,i)=>()=>(r&&(i=r(r=0)),i);var ga=(r,i)=>()=>(i||r((i={exports:{}}).exports,i),i.exports);var is=(r,i,a,o)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of es(i))!ns.call(r,s)&&s!==a&&ao(r,s,{get:()=>i[s],enumerable:!(o=qr(i,s))||o.enumerable});return r};var et=(r,i,a)=>(a=r!=null?$r(ts(r)):{},is(i||!r||!r.__esModule?ao(a,"default",{value:r,enumerable:!0}):a,r));var p=Ft(()=>{});function as(r,i){this.fun=r,this.array=i}function oo(r){var i=Math.floor((Date.now()-Nt.now())*.001),a=Nt.now()*.001,o=Math.floor(a)+i,s=Math.floor(a%1*1e9);return r&&(o=o-r[0],s=s-r[1],s<0&&(o--,s+=la)),[o,s]}var XA,Nt,ca,la,ro=Ft(()=>{p();I();C();as.prototype.run=function(){this.fun.apply(null,this.array)};XA={PATH:"/usr/bin",LANG:typeof navigator<"u"?navigator.language+".UTF-8":void 0,PWD:"/",HOME:"/home",TMP:"/tmp"},Nt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};Nt.now===void 0&&(ca=Date.now(),Nt.timing&&Nt.timing.navigationStart&&(ca=Nt.timing.navigationStart),Nt.now=()=>Date.now()-ca);la=1e9;oo.bigint=function(r){var i=oo(r);return typeof BigInt>"u"?i[0]*la+i[1]:BigInt(i[0]*la)+BigInt(i[1])}});var C=Ft(()=>{ro()});function os(){if(so)return Cn;so=!0,Cn.byteLength=u,Cn.toByteArray=y,Cn.fromByteArray=F;for(var r=[],i=[],a=typeof Uint8Array<"u"?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,d=o.length;s<d;++s)r[s]=o[s],i[o.charCodeAt(s)]=s;i[45]=62,i[95]=63;function A(Z){var X=Z.length;if(X%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var N=Z.indexOf("=");N===-1&&(N=X);var S=N===X?0:4-N%4;return[N,S]}function u(Z){var X=A(Z),N=X[0],S=X[1];return(N+S)*3/4-S}function b(Z,X,N){return(X+N)*3/4-N}function y(Z){var X,N=A(Z),S=N[0],P=N[1],T=new a(b(Z,S,P)),L=0,j=P>0?S-4:S,x;for(x=0;x<j;x+=4)X=i[Z.charCodeAt(x)]<<18|i[Z.charCodeAt(x+1)]<<12|i[Z.charCodeAt(x+2)]<<6|i[Z.charCodeAt(x+3)],T[L++]=X>>16&255,T[L++]=X>>8&255,T[L++]=X&255;return P===2&&(X=i[Z.charCodeAt(x)]<<2|i[Z.charCodeAt(x+1)]>>4,T[L++]=X&255),P===1&&(X=i[Z.charCodeAt(x)]<<10|i[Z.charCodeAt(x+1)]<<4|i[Z.charCodeAt(x+2)]>>2,T[L++]=X>>8&255,T[L++]=X&255),T}function v(Z){return r[Z>>18&63]+r[Z>>12&63]+r[Z>>6&63]+r[Z&63]}function R(Z,X,N){for(var S,P=[],T=X;T<N;T+=3)S=(Z[T]<<16&16711680)+(Z[T+1]<<8&65280)+(Z[T+2]&255),P.push(v(S));return P.join("")}function F(Z){for(var X,N=Z.length,S=N%3,P=[],T=16383,L=0,j=N-S;L<j;L+=T)P.push(R(Z,L,L+T>j?j:L+T));return S===1?(X=Z[N-1],P.push(r[X>>2]+r[X<<4&63]+"==")):S===2&&(X=(Z[N-2]<<8)+Z[N-1],P.push(r[X>>10]+r[X>>4&63]+r[X<<2&63]+"=")),P.join("")}return Cn}function rs(){if(Ao)return Qn;Ao=!0;return Qn.read=function(r,i,a,o,s){var d,A,u=s*8-o-1,b=(1<<u)-1,y=b>>1,v=-7,R=a?s-1:0,F=a?-1:1,Z=r[i+R];for(R+=F,d=Z&(1<<-v)-1,Z>>=-v,v+=u;v>0;d=d*256+r[i+R],R+=F,v-=8);for(A=d&(1<<-v)-1,d>>=-v,v+=o;v>0;A=A*256+r[i+R],R+=F,v-=8);if(d===0)d=1-y;else{if(d===b)return A?NaN:(Z?-1:1)*(1/0);A=A+Math.pow(2,o),d=d-y}return(Z?-1:1)*A*Math.pow(2,d-o)},Qn.write=function(r,i,a,o,s,d){var A,u,b,y=d*8-s-1,v=(1<<y)-1,R=v>>1,F=s===23?Math.pow(2,-24)-Math.pow(2,-77):0,Z=o?0:d-1,X=o?1:-1,N=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(u=isNaN(i)?1:0,A=v):(A=Math.floor(Math.log(i)/Math.LN2),i*(b=Math.pow(2,-A))<1&&(A--,b*=2),A+R>=1?i+=F/b:i+=F*Math.pow(2,1-R),i*b>=2&&(A++,b/=2),A+R>=v?(u=0,A=v):A+R>=1?(u=(i*b-1)*Math.pow(2,s),A=A+R):(u=i*Math.pow(2,R-1)*Math.pow(2,s),A=0));s>=8;r[a+Z]=u&255,Z+=X,u/=256,s-=8);for(A=A<<s|u,y+=s;y>0;r[a+Z]=A&255,Z+=X,A/=256,y-=8);r[a+Z-X]|=N*128},Qn}function co(){if(go)return Tt;go=!0;let r=os(),i=rs(),a=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Tt.Buffer=A,Tt.SlowBuffer=P,Tt.INSPECT_MAX_BYTES=50;let o=2147483647;Tt.kMaxLength=o,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 l=new Uint8Array(1),g={foo:function(){return 42}};return Object.setPrototypeOf(g,Uint8Array.prototype),Object.setPrototypeOf(l,g),l.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(l){if(l>o)throw new RangeError('The value "'+l+'" is invalid for option "size"');let g=new Uint8Array(l);return Object.setPrototypeOf(g,A.prototype),g}function A(l,g,c){if(typeof l=="number"){if(typeof g=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return v(l)}return u(l,g,c)}A.poolSize=8192;function u(l,g,c){if(typeof l=="string")return R(l,g);if(ArrayBuffer.isView(l))return Z(l);if(l==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l);if(rt(l,ArrayBuffer)||l&&rt(l.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(rt(l,SharedArrayBuffer)||l&&rt(l.buffer,SharedArrayBuffer)))return X(l,g,c);if(typeof l=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let m=l.valueOf&&l.valueOf();if(m!=null&&m!==l)return A.from(m,g,c);let h=N(l);if(h)return h;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof l[Symbol.toPrimitive]=="function")return A.from(l[Symbol.toPrimitive]("string"),g,c);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l)}A.from=function(l,g,c){return u(l,g,c)},Object.setPrototypeOf(A.prototype,Uint8Array.prototype),Object.setPrototypeOf(A,Uint8Array);function b(l){if(typeof l!="number")throw new TypeError('"size" argument must be of type number');if(l<0)throw new RangeError('The value "'+l+'" is invalid for option "size"')}function y(l,g,c){return b(l),l<=0?d(l):g!==void 0?typeof c=="string"?d(l).fill(g,c):d(l).fill(g):d(l)}A.alloc=function(l,g,c){return y(l,g,c)};function v(l){return b(l),d(l<0?0:S(l)|0)}A.allocUnsafe=function(l){return v(l)},A.allocUnsafeSlow=function(l){return v(l)};function R(l,g){if((typeof g!="string"||g==="")&&(g="utf8"),!A.isEncoding(g))throw new TypeError("Unknown encoding: "+g);let c=T(l,g)|0,m=d(c),h=m.write(l,g);return h!==c&&(m=m.slice(0,h)),m}function F(l){let g=l.length<0?0:S(l.length)|0,c=d(g);for(let m=0;m<g;m+=1)c[m]=l[m]&255;return c}function Z(l){if(rt(l,Uint8Array)){let g=new Uint8Array(l);return X(g.buffer,g.byteOffset,g.byteLength)}return F(l)}function X(l,g,c){if(g<0||l.byteLength<g)throw new RangeError('"offset" is outside of buffer bounds');if(l.byteLength<g+(c||0))throw new RangeError('"length" is outside of buffer bounds');let m;return g===void 0&&c===void 0?m=new Uint8Array(l):c===void 0?m=new Uint8Array(l,g):m=new Uint8Array(l,g,c),Object.setPrototypeOf(m,A.prototype),m}function N(l){if(A.isBuffer(l)){let g=S(l.length)|0,c=d(g);return c.length===0||l.copy(c,0,0,g),c}if(l.length!==void 0)return typeof l.length!="number"||Aa(l.length)?d(0):F(l);if(l.type==="Buffer"&&Array.isArray(l.data))return F(l.data)}function S(l){if(l>=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return l|0}function P(l){return+l!=l&&(l=0),A.alloc(+l)}A.isBuffer=function(g){return g!=null&&g._isBuffer===!0&&g!==A.prototype},A.compare=function(g,c){if(rt(g,Uint8Array)&&(g=A.from(g,g.offset,g.byteLength)),rt(c,Uint8Array)&&(c=A.from(c,c.offset,c.byteLength)),!A.isBuffer(g)||!A.isBuffer(c))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(g===c)return 0;let m=g.length,h=c.length;for(let B=0,G=Math.min(m,h);B<G;++B)if(g[B]!==c[B]){m=g[B],h=c[B];break}return m<h?-1:h<m?1:0},A.isEncoding=function(g){switch(String(g).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(g,c){if(!Array.isArray(g))throw new TypeError('"list" argument must be an Array of Buffers');if(g.length===0)return A.alloc(0);let m;if(c===void 0)for(c=0,m=0;m<g.length;++m)c+=g[m].length;let h=A.allocUnsafe(c),B=0;for(m=0;m<g.length;++m){let G=g[m];if(rt(G,Uint8Array))B+G.length>h.length?(A.isBuffer(G)||(G=A.from(G)),G.copy(h,B)):Uint8Array.prototype.set.call(h,G,B);else if(A.isBuffer(G))G.copy(h,B);else throw new TypeError('"list" argument must be an Array of Buffers');B+=G.length}return h};function T(l,g){if(A.isBuffer(l))return l.length;if(ArrayBuffer.isView(l)||rt(l,ArrayBuffer))return l.byteLength;if(typeof l!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof l);let c=l.length,m=arguments.length>2&&arguments[2]===!0;if(!m&&c===0)return 0;let h=!1;for(;;)switch(g){case"ascii":case"latin1":case"binary":return c;case"utf8":case"utf-8":return da(l).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return c*2;case"hex":return c>>>1;case"base64":return io(l).length;default:if(h)return m?-1:da(l).length;g=(""+g).toLowerCase(),h=!0}}A.byteLength=T;function L(l,g,c){let m=!1;if((g===void 0||g<0)&&(g=0),g>this.length||((c===void 0||c>this.length)&&(c=this.length),c<=0)||(c>>>=0,g>>>=0,c<=g))return"";for(l||(l="utf8");;)switch(l){case"hex":return Ke(this,g,c);case"utf8":case"utf-8":return he(this,g,c);case"ascii":return Fe(this,g,c);case"latin1":case"binary":return Qe(this,g,c);case"base64":return Pe(this,g,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return He(this,g,c);default:if(m)throw new TypeError("Unknown encoding: "+l);l=(l+"").toLowerCase(),m=!0}}A.prototype._isBuffer=!0;function j(l,g,c){let m=l[g];l[g]=l[c],l[c]=m}A.prototype.swap16=function(){let g=this.length;if(g%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let c=0;c<g;c+=2)j(this,c,c+1);return this},A.prototype.swap32=function(){let g=this.length;if(g%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let c=0;c<g;c+=4)j(this,c,c+3),j(this,c+1,c+2);return this},A.prototype.swap64=function(){let g=this.length;if(g%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let c=0;c<g;c+=8)j(this,c,c+7),j(this,c+1,c+6),j(this,c+2,c+5),j(this,c+3,c+4);return this},A.prototype.toString=function(){let g=this.length;return g===0?"":arguments.length===0?he(this,0,g):L.apply(this,arguments)},A.prototype.toLocaleString=A.prototype.toString,A.prototype.equals=function(g){if(!A.isBuffer(g))throw new TypeError("Argument must be a Buffer");return this===g?!0:A.compare(this,g)===0},A.prototype.inspect=function(){let g="",c=Tt.INSPECT_MAX_BYTES;return g=this.toString("hex",0,c).replace(/(.{2})/g,"$1 ").trim(),this.length>c&&(g+=" ... "),"<Buffer "+g+">"},a&&(A.prototype[a]=A.prototype.inspect),A.prototype.compare=function(g,c,m,h,B){if(rt(g,Uint8Array)&&(g=A.from(g,g.offset,g.byteLength)),!A.isBuffer(g))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof g);if(c===void 0&&(c=0),m===void 0&&(m=g?g.length:0),h===void 0&&(h=0),B===void 0&&(B=this.length),c<0||m>g.length||h<0||B>this.length)throw new RangeError("out of range index");if(h>=B&&c>=m)return 0;if(h>=B)return-1;if(c>=m)return 1;if(c>>>=0,m>>>=0,h>>>=0,B>>>=0,this===g)return 0;let G=B-h,U=m-c,Ae=Math.min(G,U),se=this.slice(h,B),ge=g.slice(c,m);for(let re=0;re<Ae;++re)if(se[re]!==ge[re]){G=se[re],U=ge[re];break}return G<U?-1:U<G?1:0};function x(l,g,c,m,h){if(l.length===0)return-1;if(typeof c=="string"?(m=c,c=0):c>2147483647?c=2147483647:c<-2147483648&&(c=-2147483648),c=+c,Aa(c)&&(c=h?0:l.length-1),c<0&&(c=l.length+c),c>=l.length){if(h)return-1;c=l.length-1}else if(c<0)if(h)c=0;else return-1;if(typeof g=="string"&&(g=A.from(g,m)),A.isBuffer(g))return g.length===0?-1:D(l,g,c,m,h);if(typeof g=="number")return g=g&255,typeof Uint8Array.prototype.indexOf=="function"?h?Uint8Array.prototype.indexOf.call(l,g,c):Uint8Array.prototype.lastIndexOf.call(l,g,c):D(l,[g],c,m,h);throw new TypeError("val must be string, number or Buffer")}function D(l,g,c,m,h){let B=1,G=l.length,U=g.length;if(m!==void 0&&(m=String(m).toLowerCase(),m==="ucs2"||m==="ucs-2"||m==="utf16le"||m==="utf-16le")){if(l.length<2||g.length<2)return-1;B=2,G/=2,U/=2,c/=2}function Ae(ge,re){return B===1?ge[re]:ge.readUInt16BE(re*B)}let se;if(h){let ge=-1;for(se=c;se<G;se++)if(Ae(l,se)===Ae(g,ge===-1?0:se-ge)){if(ge===-1&&(ge=se),se-ge+1===U)return ge*B}else ge!==-1&&(se-=se-ge),ge=-1}else for(c+U>G&&(c=G-U),se=c;se>=0;se--){let ge=!0;for(let re=0;re<U;re++)if(Ae(l,se+re)!==Ae(g,re)){ge=!1;break}if(ge)return se}return-1}A.prototype.includes=function(g,c,m){return this.indexOf(g,c,m)!==-1},A.prototype.indexOf=function(g,c,m){return x(this,g,c,m,!0)},A.prototype.lastIndexOf=function(g,c,m){return x(this,g,c,m,!1)};function Ze(l,g,c,m){c=Number(c)||0;let h=l.length-c;m?(m=Number(m),m>h&&(m=h)):m=h;let B=g.length;m>B/2&&(m=B/2);let G;for(G=0;G<m;++G){let U=parseInt(g.substr(G*2,2),16);if(Aa(U))return G;l[c+G]=U}return G}function me(l,g,c,m){return On(da(g,l.length-c),l,c,m)}function xe(l,g,c,m){return On(Ur(g),l,c,m)}function Oe(l,g,c,m){return On(io(g),l,c,m)}function qe(l,g,c,m){return On(Dr(g,l.length-c),l,c,m)}A.prototype.write=function(g,c,m,h){if(c===void 0)h="utf8",m=this.length,c=0;else if(m===void 0&&typeof c=="string")h=c,m=this.length,c=0;else if(isFinite(c))c=c>>>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-c;if((m===void 0||m>B)&&(m=B),g.length>0&&(m<0||c<0)||c>this.length)throw new RangeError("Attempt to write outside buffer bounds");h||(h="utf8");let G=!1;for(;;)switch(h){case"hex":return Ze(this,g,c,m);case"utf8":case"utf-8":return me(this,g,c,m);case"ascii":case"latin1":case"binary":return xe(this,g,c,m);case"base64":return Oe(this,g,c,m);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return qe(this,g,c,m);default:if(G)throw new TypeError("Unknown encoding: "+h);h=(""+h).toLowerCase(),G=!0}},A.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Pe(l,g,c){return g===0&&c===l.length?r.fromByteArray(l):r.fromByteArray(l.slice(g,c))}function he(l,g,c){c=Math.min(l.length,c);let m=[],h=g;for(;h<c;){let B=l[h],G=null,U=B>239?4:B>223?3:B>191?2:1;if(h+U<=c){let Ae,se,ge,re;switch(U){case 1:B<128&&(G=B);break;case 2:Ae=l[h+1],(Ae&192)===128&&(re=(B&31)<<6|Ae&63,re>127&&(G=re));break;case 3:Ae=l[h+1],se=l[h+2],(Ae&192)===128&&(se&192)===128&&(re=(B&15)<<12|(Ae&63)<<6|se&63,re>2047&&(re<55296||re>57343)&&(G=re));break;case 4:Ae=l[h+1],se=l[h+2],ge=l[h+3],(Ae&192)===128&&(se&192)===128&&(ge&192)===128&&(re=(B&15)<<18|(Ae&63)<<12|(se&63)<<6|ge&63,re>65535&&re<1114112&&(G=re))}}G===null?(G=65533,U=1):G>65535&&(G-=65536,m.push(G>>>10&1023|55296),G=56320|G&1023),m.push(G),h+=U}return Le(m)}let Ge=4096;function Le(l){let g=l.length;if(g<=Ge)return String.fromCharCode.apply(String,l);let c="",m=0;for(;m<g;)c+=String.fromCharCode.apply(String,l.slice(m,m+=Ge));return c}function Fe(l,g,c){let m="";c=Math.min(l.length,c);for(let h=g;h<c;++h)m+=String.fromCharCode(l[h]&127);return m}function Qe(l,g,c){let m="";c=Math.min(l.length,c);for(let h=g;h<c;++h)m+=String.fromCharCode(l[h]);return m}function Ke(l,g,c){let m=l.length;(!g||g<0)&&(g=0),(!c||c<0||c>m)&&(c=m);let h="";for(let B=g;B<c;++B)h+=Er[l[B]];return h}function He(l,g,c){let m=l.slice(g,c),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(g,c){let m=this.length;g=~~g,c=c===void 0?m:~~c,g<0?(g+=m,g<0&&(g=0)):g>m&&(g=m),c<0?(c+=m,c<0&&(c=0)):c>m&&(c=m),c<g&&(c=g);let h=this.subarray(g,c);return Object.setPrototypeOf(h,A.prototype),h};function J(l,g,c){if(l%1!==0||l<0)throw new RangeError("offset is not uint");if(l+g>c)throw new RangeError("Trying to access beyond buffer length")}A.prototype.readUintLE=A.prototype.readUIntLE=function(g,c,m){g=g>>>0,c=c>>>0,m||J(g,c,this.length);let h=this[g],B=1,G=0;for(;++G<c&&(B*=256);)h+=this[g+G]*B;return h},A.prototype.readUintBE=A.prototype.readUIntBE=function(g,c,m){g=g>>>0,c=c>>>0,m||J(g,c,this.length);let h=this[g+--c],B=1;for(;c>0&&(B*=256);)h+=this[g+--c]*B;return h},A.prototype.readUint8=A.prototype.readUInt8=function(g,c){return g=g>>>0,c||J(g,1,this.length),this[g]},A.prototype.readUint16LE=A.prototype.readUInt16LE=function(g,c){return g=g>>>0,c||J(g,2,this.length),this[g]|this[g+1]<<8},A.prototype.readUint16BE=A.prototype.readUInt16BE=function(g,c){return g=g>>>0,c||J(g,2,this.length),this[g]<<8|this[g+1]},A.prototype.readUint32LE=A.prototype.readUInt32LE=function(g,c){return g=g>>>0,c||J(g,4,this.length),(this[g]|this[g+1]<<8|this[g+2]<<16)+this[g+3]*16777216},A.prototype.readUint32BE=A.prototype.readUInt32BE=function(g,c){return g=g>>>0,c||J(g,4,this.length),this[g]*16777216+(this[g+1]<<16|this[g+2]<<8|this[g+3])},A.prototype.readBigUInt64LE=It(function(g){g=g>>>0,zt(g,"offset");let c=this[g],m=this[g+7];(c===void 0||m===void 0)&&pn(g,this.length-8);let h=c+this[++g]*2**8+this[++g]*2**16+this[++g]*2**24,B=this[++g]+this[++g]*2**8+this[++g]*2**16+m*2**24;return BigInt(h)+(BigInt(B)<<BigInt(32))}),A.prototype.readBigUInt64BE=It(function(g){g=g>>>0,zt(g,"offset");let c=this[g],m=this[g+7];(c===void 0||m===void 0)&&pn(g,this.length-8);let h=c*2**24+this[++g]*2**16+this[++g]*2**8+this[++g],B=this[++g]*2**24+this[++g]*2**16+this[++g]*2**8+m;return(BigInt(h)<<BigInt(32))+BigInt(B)}),A.prototype.readIntLE=function(g,c,m){g=g>>>0,c=c>>>0,m||J(g,c,this.length);let h=this[g],B=1,G=0;for(;++G<c&&(B*=256);)h+=this[g+G]*B;return B*=128,h>=B&&(h-=Math.pow(2,8*c)),h},A.prototype.readIntBE=function(g,c,m){g=g>>>0,c=c>>>0,m||J(g,c,this.length);let h=c,B=1,G=this[g+--h];for(;h>0&&(B*=256);)G+=this[g+--h]*B;return B*=128,G>=B&&(G-=Math.pow(2,8*c)),G},A.prototype.readInt8=function(g,c){return g=g>>>0,c||J(g,1,this.length),this[g]&128?(255-this[g]+1)*-1:this[g]},A.prototype.readInt16LE=function(g,c){g=g>>>0,c||J(g,2,this.length);let m=this[g]|this[g+1]<<8;return m&32768?m|4294901760:m},A.prototype.readInt16BE=function(g,c){g=g>>>0,c||J(g,2,this.length);let m=this[g+1]|this[g]<<8;return m&32768?m|4294901760:m},A.prototype.readInt32LE=function(g,c){return g=g>>>0,c||J(g,4,this.length),this[g]|this[g+1]<<8|this[g+2]<<16|this[g+3]<<24},A.prototype.readInt32BE=function(g,c){return g=g>>>0,c||J(g,4,this.length),this[g]<<24|this[g+1]<<16|this[g+2]<<8|this[g+3]},A.prototype.readBigInt64LE=It(function(g){g=g>>>0,zt(g,"offset");let c=this[g],m=this[g+7];(c===void 0||m===void 0)&&pn(g,this.length-8);let h=this[g+4]+this[g+5]*2**8+this[g+6]*2**16+(m<<24);return(BigInt(h)<<BigInt(32))+BigInt(c+this[++g]*2**8+this[++g]*2**16+this[++g]*2**24)}),A.prototype.readBigInt64BE=It(function(g){g=g>>>0,zt(g,"offset");let c=this[g],m=this[g+7];(c===void 0||m===void 0)&&pn(g,this.length-8);let h=(c<<24)+this[++g]*2**16+this[++g]*2**8+this[++g];return(BigInt(h)<<BigInt(32))+BigInt(this[++g]*2**24+this[++g]*2**16+this[++g]*2**8+m)}),A.prototype.readFloatLE=function(g,c){return g=g>>>0,c||J(g,4,this.length),i.read(this,g,!0,23,4)},A.prototype.readFloatBE=function(g,c){return g=g>>>0,c||J(g,4,this.length),i.read(this,g,!1,23,4)},A.prototype.readDoubleLE=function(g,c){return g=g>>>0,c||J(g,8,this.length),i.read(this,g,!0,52,8)},A.prototype.readDoubleBE=function(g,c){return g=g>>>0,c||J(g,8,this.length),i.read(this,g,!1,52,8)};function Ce(l,g,c,m,h,B){if(!A.isBuffer(l))throw new TypeError('"buffer" argument must be a Buffer instance');if(g>h||g<B)throw new RangeError('"value" argument is out of bounds');if(c+m>l.length)throw new RangeError("Index out of range")}A.prototype.writeUintLE=A.prototype.writeUIntLE=function(g,c,m,h){if(g=+g,c=c>>>0,m=m>>>0,!h){let U=Math.pow(2,8*m)-1;Ce(this,g,c,m,U,0)}let B=1,G=0;for(this[c]=g&255;++G<m&&(B*=256);)this[c+G]=g/B&255;return c+m},A.prototype.writeUintBE=A.prototype.writeUIntBE=function(g,c,m,h){if(g=+g,c=c>>>0,m=m>>>0,!h){let U=Math.pow(2,8*m)-1;Ce(this,g,c,m,U,0)}let B=m-1,G=1;for(this[c+B]=g&255;--B>=0&&(G*=256);)this[c+B]=g/G&255;return c+m},A.prototype.writeUint8=A.prototype.writeUInt8=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,1,255,0),this[c]=g&255,c+1},A.prototype.writeUint16LE=A.prototype.writeUInt16LE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,2,65535,0),this[c]=g&255,this[c+1]=g>>>8,c+2},A.prototype.writeUint16BE=A.prototype.writeUInt16BE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,2,65535,0),this[c]=g>>>8,this[c+1]=g&255,c+2},A.prototype.writeUint32LE=A.prototype.writeUInt32LE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,4,4294967295,0),this[c+3]=g>>>24,this[c+2]=g>>>16,this[c+1]=g>>>8,this[c]=g&255,c+4},A.prototype.writeUint32BE=A.prototype.writeUInt32BE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,4,4294967295,0),this[c]=g>>>24,this[c+1]=g>>>16,this[c+2]=g>>>8,this[c+3]=g&255,c+4};function xn(l,g,c,m,h){no(g,m,h,l,c,7);let B=Number(g&BigInt(4294967295));l[c++]=B,B=B>>8,l[c++]=B,B=B>>8,l[c++]=B,B=B>>8,l[c++]=B;let G=Number(g>>BigInt(32)&BigInt(4294967295));return l[c++]=G,G=G>>8,l[c++]=G,G=G>>8,l[c++]=G,G=G>>8,l[c++]=G,c}function _a(l,g,c,m,h){no(g,m,h,l,c,7);let B=Number(g&BigInt(4294967295));l[c+7]=B,B=B>>8,l[c+6]=B,B=B>>8,l[c+5]=B,B=B>>8,l[c+4]=B;let G=Number(g>>BigInt(32)&BigInt(4294967295));return l[c+3]=G,G=G>>8,l[c+2]=G,G=G>>8,l[c+1]=G,G=G>>8,l[c]=G,c+8}A.prototype.writeBigUInt64LE=It(function(g,c=0){return xn(this,g,c,BigInt(0),BigInt("0xffffffffffffffff"))}),A.prototype.writeBigUInt64BE=It(function(g,c=0){return _a(this,g,c,BigInt(0),BigInt("0xffffffffffffffff"))}),A.prototype.writeIntLE=function(g,c,m,h){if(g=+g,c=c>>>0,!h){let Ae=Math.pow(2,8*m-1);Ce(this,g,c,m,Ae-1,-Ae)}let B=0,G=1,U=0;for(this[c]=g&255;++B<m&&(G*=256);)g<0&&U===0&&this[c+B-1]!==0&&(U=1),this[c+B]=(g/G>>0)-U&255;return c+m},A.prototype.writeIntBE=function(g,c,m,h){if(g=+g,c=c>>>0,!h){let Ae=Math.pow(2,8*m-1);Ce(this,g,c,m,Ae-1,-Ae)}let B=m-1,G=1,U=0;for(this[c+B]=g&255;--B>=0&&(G*=256);)g<0&&U===0&&this[c+B+1]!==0&&(U=1),this[c+B]=(g/G>>0)-U&255;return c+m},A.prototype.writeInt8=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,1,127,-128),g<0&&(g=255+g+1),this[c]=g&255,c+1},A.prototype.writeInt16LE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,2,32767,-32768),this[c]=g&255,this[c+1]=g>>>8,c+2},A.prototype.writeInt16BE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,2,32767,-32768),this[c]=g>>>8,this[c+1]=g&255,c+2},A.prototype.writeInt32LE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,4,2147483647,-2147483648),this[c]=g&255,this[c+1]=g>>>8,this[c+2]=g>>>16,this[c+3]=g>>>24,c+4},A.prototype.writeInt32BE=function(g,c,m){return g=+g,c=c>>>0,m||Ce(this,g,c,4,2147483647,-2147483648),g<0&&(g=4294967295+g+1),this[c]=g>>>24,this[c+1]=g>>>16,this[c+2]=g>>>8,this[c+3]=g&255,c+4},A.prototype.writeBigInt64LE=It(function(g,c=0){return xn(this,g,c,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),A.prototype.writeBigInt64BE=It(function(g,c=0){return _a(this,g,c,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function $a(l,g,c,m,h,B){if(c+m>l.length)throw new RangeError("Index out of range");if(c<0)throw new RangeError("Index out of range")}function qa(l,g,c,m,h){return g=+g,c=c>>>0,h||$a(l,g,c,4),i.write(l,g,c,m,23,4),c+4}A.prototype.writeFloatLE=function(g,c,m){return qa(this,g,c,!0,m)},A.prototype.writeFloatBE=function(g,c,m){return qa(this,g,c,!1,m)};function eo(l,g,c,m,h){return g=+g,c=c>>>0,h||$a(l,g,c,8),i.write(l,g,c,m,52,8),c+8}A.prototype.writeDoubleLE=function(g,c,m){return eo(this,g,c,!0,m)},A.prototype.writeDoubleBE=function(g,c,m){return eo(this,g,c,!1,m)},A.prototype.copy=function(g,c,m,h){if(!A.isBuffer(g))throw new TypeError("argument should be a Buffer");if(m||(m=0),!h&&h!==0&&(h=this.length),c>=g.length&&(c=g.length),c||(c=0),h>0&&h<m&&(h=m),h===m||g.length===0||this.length===0)return 0;if(c<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),g.length-c<h-m&&(h=g.length-c+m);let B=h-m;return this===g&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(c,m,h):Uint8Array.prototype.set.call(g,this.subarray(m,h),c),B},A.prototype.fill=function(g,c,m,h){if(typeof g=="string"){if(typeof c=="string"?(h=c,c=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(g.length===1){let G=g.charCodeAt(0);(h==="utf8"&&G<128||h==="latin1")&&(g=G)}}else typeof g=="number"?g=g&255:typeof g=="boolean"&&(g=Number(g));if(c<0||this.length<c||this.length<m)throw new RangeError("Out of range index");if(m<=c)return this;c=c>>>0,m=m===void 0?this.length:m>>>0,g||(g=0);let B;if(typeof g=="number")for(B=c;B<m;++B)this[B]=g;else{let G=A.isBuffer(g)?g:A.from(g,h),U=G.length;if(U===0)throw new TypeError('The value "'+g+'" is invalid for argument "value"');for(B=0;B<m-c;++B)this[B+c]=G[B%U]}return this};let kt={};function sa(l,g,c){kt[l]=class extends c{constructor(){super(),Object.defineProperty(this,"message",{value:g.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${l}]`,this.stack,delete this.name}get code(){return l}set code(h){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:h,writable:!0})}toString(){return`${this.name} [${l}]: ${this.message}`}}}sa("ERR_BUFFER_OUT_OF_BOUNDS",function(l){return l?`${l} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),sa("ERR_INVALID_ARG_TYPE",function(l,g){return`The "${l}" argument must be of type number. Received type ${typeof g}`},TypeError),sa("ERR_OUT_OF_RANGE",function(l,g,c){let m=`The value of "${l}" is out of range.`,h=c;return Number.isInteger(c)&&Math.abs(c)>2**32?h=to(String(c)):typeof c=="bigint"&&(h=String(c),(c>BigInt(2)**BigInt(32)||c<-(BigInt(2)**BigInt(32)))&&(h=to(h)),h+="n"),m+=` It must be ${g}. Received ${h}`,m},RangeError);function to(l){let g="",c=l.length,m=l[0]==="-"?1:0;for(;c>=m+4;c-=3)g=`_${l.slice(c-3,c)}${g}`;return`${l.slice(0,c)}${g}`}function Or(l,g,c){zt(g,"offset"),(l[g]===void 0||l[g+c]===void 0)&&pn(g,l.length-(c+1))}function no(l,g,c,m,h,B){if(l>c||l<g){let G=typeof g=="bigint"?"n":"",U;throw g===0||g===BigInt(0)?U=`>= 0${G} and < 2${G} ** ${(B+1)*8}${G}`:U=`>= -(2${G} ** ${(B+1)*8-1}${G}) and < 2 ** ${(B+1)*8-1}${G}`,new kt.ERR_OUT_OF_RANGE("value",U,l)}Or(m,h,B)}function zt(l,g){if(typeof l!="number")throw new kt.ERR_INVALID_ARG_TYPE(g,"number",l)}function pn(l,g,c){throw Math.floor(l)!==l?(zt(l,c),new kt.ERR_OUT_OF_RANGE("offset","an integer",l)):g<0?new kt.ERR_BUFFER_OUT_OF_BOUNDS:new kt.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${g}`,l)}let Qr=/[^+/0-9A-Za-z-_]/g;function Kr(l){if(l=l.split("=")[0],l=l.trim().replace(Qr,""),l.length<2)return"";for(;l.length%4!==0;)l=l+"=";return l}function da(l,g){g=g||1/0;let c,m=l.length,h=null,B=[];for(let G=0;G<m;++G){if(c=l.charCodeAt(G),c>55295&&c<57344){if(!h){if(c>56319){(g-=3)>-1&&B.push(239,191,189);continue}else if(G+1===m){(g-=3)>-1&&B.push(239,191,189);continue}h=c;continue}if(c<56320){(g-=3)>-1&&B.push(239,191,189),h=c;continue}c=(h-55296<<10|c-56320)+65536}else h&&(g-=3)>-1&&B.push(239,191,189);if(h=null,c<128){if((g-=1)<0)break;B.push(c)}else if(c<2048){if((g-=2)<0)break;B.push(c>>6|192,c&63|128)}else if(c<65536){if((g-=3)<0)break;B.push(c>>12|224,c>>6&63|128,c&63|128)}else if(c<1114112){if((g-=4)<0)break;B.push(c>>18|240,c>>12&63|128,c>>6&63|128,c&63|128)}else throw new Error("Invalid code point")}return B}function Ur(l){let g=[];for(let c=0;c<l.length;++c)g.push(l.charCodeAt(c)&255);return g}function Dr(l,g){let c,m,h,B=[];for(let G=0;G<l.length&&!((g-=2)<0);++G)c=l.charCodeAt(G),m=c>>8,h=c%256,B.push(h),B.push(m);return B}function io(l){return r.toByteArray(Kr(l))}function On(l,g,c,m){let h;for(h=0;h<m&&!(h+c>=g.length||h>=l.length);++h)g[h+c]=l[h];return h}function rt(l,g){return l instanceof g||l!=null&&l.constructor!=null&&l.constructor.name!=null&&l.constructor.name===g.name}function Aa(l){return l!==l}let Er=function(){let l="0123456789abcdef",g=new Array(256);for(let c=0;c<16;++c){let m=c*16;for(let h=0;h<16;++h)g[m+h]=l[c]+l[h]}return g}();function It(l){return typeof BigInt>"u"?_r:l}function _r(){throw new Error("BigInt not supported")}return Tt}var Cn,so,Qn,Ao,Tt,go,lo=Ft(()=>{p();I();C();Cn={},so=!1;Qn={},Ao=!1;Tt={},go=!1});var wt,Y,xA,OA,uo=Ft(()=>{p();I();C();lo();wt=co();wt.Buffer;wt.SlowBuffer;wt.INSPECT_MAX_BYTES;wt.kMaxLength;Y=wt.Buffer,xA=wt.INSPECT_MAX_BYTES,OA=wt.kMaxLength});var I=Ft(()=>{uo()});import{bcs as Me}from"@mysten/sui/bcs";function Us(r,i=["<",">"]){let[a,o]=i,s=[],d="",A=0;for(let u=0;u<r.length;u++){let b=r[u];if(b===a&&A++,b===o&&A--,A===0&&b===","){s.push(d.trim()),d="";continue}d+=b}return s.push(d.trim()),s}function We(r){if(typeof r!="string")throw new Error(`Illegal type passed as a name of the type: ${r}`);let[i,a]=["<",">"],o=r.indexOf(i),s=Array.from(r).reverse().indexOf(a);if(o===-1&&s===-1)return{typeName:r,typeArgs:[]};if(o===-1||s===-1)throw new Error(`Unclosed generic in name '${r}'`);let d=r.slice(0,o),A=Us(r.slice(o+1,r.length-s-1),[i,a]);return{typeName:d,typeArgs:A}}function er(r){return!r||typeof r!="object"||Array.isArray(r)?!1:"GasCoin"in r||"Input"in r||"Result"in r||"NestedResult"in r}function Q(r,i){return er(i)?i:r.object(i)}function _e(r,i,a){if(er(i))return Q(r,i);function o(y){let{typeName:v,typeArgs:R}=We(y);switch(v){case"bool":return Me.Bool;case"u8":return Me.U8;case"u16":return Me.U16;case"u32":return Me.U32;case"u64":return Me.U64;case"u128":return Me.U128;case"u256":return Me.U256;case"address":return Me.Address;case"0x1::string::String":case"0x1::ascii::String":return Me.String;case"0x2::object::ID":return Me.Address;case"0x1::option::Option":return Me.option(o(R[0]));case"vector":return Me.vector(o(R[0]));default:throw new Error(`invalid primitive type ${y}`)}}function s(y){for(let v of y){if(typeof v>"u"||v===null)return!0;if(Array.isArray(v))return s(v)}return!1}function d(y){for(let v of y){if(!Array.isArray(v)){if(v===null)continue;switch(typeof v){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return d(v)}return!0}function A(y){for(let v of y){if(!Array.isArray(v))switch(typeof v){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return A(v)}return!1}let{typeName:u,typeArgs:b}=We(a);switch(u){case"0x1::option::Option":if(i===null)return r.pure.option("bool",null);if(d([i]))return r.pure(o(a).serialize(i));if(A([i]))throw new Error("mixing primitive and TransactionArgument values is not supported");return r.moveCall({target:"0x1::option::some",typeArguments:[b[0]],arguments:[_e(r,i,b[0])]});case"vector":if(!Array.isArray(i))throw new Error("expected an array for vector type");if(i.length===0)return r.pure(Me.vector(Me.Bool).serialize([]));if(s(i))throw new Error("the provided array contains undefined or null values");if(d(i))return r.pure(o(a).serialize(i));if(A(i))throw new Error("mixing primitive and TransactionArgument values is not supported");return r.makeMoveVec({type:b[0],elements:i});default:return r.pure(o(a).serialize(i))}}function Ds(r){let i=r.split("0x").join("");for(let a=0;a<i.length;a++)if(i[a]!=="0")return`0x${i.substring(a)}`;return"0x0"}function k(r){let{typeName:i,typeArgs:a}=We(r);switch(i){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return i;case"vector":return`vector<${k(a[0])}>`;default:{let o=i.split("::");o[0]=Ds(o[0]);let s=o.join("::");return a.length>0?`${s}<${a.map(d=>k(d)).join(",")}>`:s}}}function ne(r,...i){return i.length>0?`${r}<${i.join(", ")}>`:r}var Ye=Ft(()=>{"use strict";p();I();C()});var Rt=ga((Op,tr)=>{"use strict";p();I();C();Ye();var Ga=class r{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return k(r.$PACKAGE_ID)}get PUBLISHED_AT(){return k(r.$PUBLISHED_AT)}get PKG_V1(){return k(r.$PKG_V[1])}setPackageId(i){r.$PACKAGE_ID=i}setPublishedAt(i){r.$PUBLISHED_AT=i}setPkgV(i,a){r.$PKG_V[i]=a}setAddress(i,a){r.$PACKAGE_ID=i,r.$PUBLISHED_AT=i,r.$PKG_V[1]=a||i}},Es=new Ga;tr.exports=Es});var wa=ga((tC,dr)=>{"use strict";p();I();C();Ye();var Ta=class r{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return k(r.$PACKAGE_ID)}get PUBLISHED_AT(){return k(r.$PUBLISHED_AT)}get PKG_V1(){return k(r.$PKG_V[1])}setPackageId(i){r.$PACKAGE_ID=i}setPublishedAt(i){r.$PUBLISHED_AT=i}setPkgV(i,a){r.$PKG_V[i]=a}setAddress(i,a){r.$PACKAGE_ID=i,r.$PUBLISHED_AT=i,r.$PKG_V[1]=a||i}},_s=new Ta;dr.exports=_s});var Va=ga((cC,gr)=>{"use strict";p();I();C();Ye();var Sa=class r{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return k(r.$PACKAGE_ID)}get PUBLISHED_AT(){return k(r.$PUBLISHED_AT)}get PKG_V1(){return k(r.$PKG_V[1])}setPackageId(i){r.$PACKAGE_ID=i}setPublishedAt(i){r.$PUBLISHED_AT=i}setPkgV(i,a){r.$PKG_V[i]=a}setAddress(i,a){r.$PACKAGE_ID=i,r.$PUBLISHED_AT=i,r.$PKG_V[1]=a||i}},$s=new Sa;gr.exports=$s});p();I();C();p();I();C();p();I();C();var Kn={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",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},$A={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},qA={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"};p();I();C();p();I();C();p();I();C();import{AlgorandClient as br}from"@algorandfoundation/algokit-utils";import{TronWeb as gd}from"tronweb";import{Web3 as cd}from"web3";p();I();C();p();I();C();p();I();C();var ce=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},V=class extends ce{constructor(i){super("SdkError",i)}},lt=class extends ce{constructor(i){super("InvalidAmountError",i)}},xt=class extends ce{constructor(i){super("AmountNotEnoughError",i)}},ut=class extends ce{constructor(i){super("InsufficientPoolLiquidityError",i)}},Re=class extends ce{constructor(i){super("JupiterError",i)}},In=class extends ce{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},Un=class extends ce{constructor(i){super("InvalidMessengerOptionError",i)}},ie=class extends ce{constructor(i){super("MethodNotSupportedError",i)}},bn=class extends ce{constructor(i){super("VerifyTxError",i)}},Ot=class extends ce{constructor(i){super("InvalidTxError",i)}},Dn=class extends ce{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},En=class extends ce{constructor(i,a,o){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${o}'`)}},yn=class extends ce{constructor(i){super("TimeoutError",i)}},_n=class extends ce{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},Ne=class extends ce{constructor(i){super("CCTPDoesNotSupportedError",i)}},Te=class extends ce{constructor(i){super("OFTDoesNotSupportedError",i)}},$n=class extends ce{constructor(i){super("YieldDoesNotSupportedError",i)}},qn=class extends ce{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ss=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",T.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(ss||{});p();I();C();var je=(S=>(S.BSC="BSC",S.ETH="ETH",S.BAS="BAS",S.SOL="SOL",S.TRX="TRX",S.POL="POL",S.ARB="ARB",S.CEL="CEL",S.AVA="AVA",S.SRB="SRB",S.STLR="STLR",S.OPT="OPT",S.SUI="SUI",S.SNC="SNC",S.UNI="UNI",S.ALG="ALG",S))(je||{}),ae=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A.ALG="ALG",A))(ae||{});var ds={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6},As={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"},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"}},E=(()=>{let r={...As};return{addChainsProperties(i){r={...r,...i}},getChainProperty(i){let a=r[i];if(!a)throw new V(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return r},getChainDecimalsByType(i){return ds[i]}}})();p();I();C();var ua=(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))(ua||{});var Ue=(d=>(d[d.ALLBRIDGE=1]="ALLBRIDGE",d[d.WORMHOLE=2]="WORMHOLE",d[d.CCTP=3]="CCTP",d[d.CCTP_V2=4]="CCTP_V2",d[d.OFT=5]="OFT",d))(Ue||{});p();I();C();import{Big as mo}from"big.js";async function Ie(r,i){return await r.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function _(r){if(mo(r).lte(0))throw new lt("Amount must be greater than zero")}function ee(r,i,a){let o=mo(i).toFixed(),[s,d]=o.split(".");if(d&&d.length>a)throw new En(r,d.length,a)}async function ei(r,i,a){return await Promise.race([r,new Promise((o,s)=>{setTimeout(()=>s(new yn(i)),a)})])}async function ma(r,i,a,o){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let s=0;for(;;)try{return await ei(r(),i,o)}catch{if(++s>=a)throw new yn(i)}}async function po(r,i,a,o=1.5,s=!1){let d=[],A=0,u=await r();if(d.push(u),!i(u))return d;let b=new Date(Date.now()+a*1e3).valueOf(),y=1e3,v=y;for(;Date.now()<b;){let R=d[d.length-1];if(R===void 0||!i(R))break;A++,s&&console.info(`Waiting ${y}ms before trying again (bringing the total wait time to ${v}ms so far, of total ${a*1e3}ms)`),await new Promise(Z=>setTimeout(Z,y)),y=y*o,new Date(Date.now()+y).valueOf()>b&&(y=b-Date.now(),s&&console.info(`was gonna wait too long; new waitTime: ${y}ms`)),v=y+v;let F=await r(R);d.push(F),s&&i(F)&&console.info(`${A}. Called ${r.name}; ${d.length} prev attempts. Most recent: ${JSON.stringify(d[d.length-1],null,2)}`)}return d}p();I();C();import{AlgoAmount as fs}from"@algorandfoundation/algokit-utils/types/amount";import Zo,{Address as Go}from"algosdk";p();I();C();import{getArc56ReturnValue as gs}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as ti}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as tc}from"@algorandfoundation/algokit-utils/types/app-factory";var ni={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"application",name:"messenger"},{type:"application",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"assetId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"noop",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"uint64",name:"tokenId"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount",defaultValue:{source:"literal",data:"AAAAAAAAAAA=",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:"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:"assetId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"tokenId"}],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:"uint64",name:"tokenId",desc:"The token to be swapped."},{type:"uint64",name:"receiveTokenId",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."}],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:"tokenId",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:"application",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:"Zw=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[906],errorMessage:"Asset must go to app"},{pc:[889],errorMessage:"Asset txn missing"},{pc:[1391,1858,2149,2235,2329,2371],errorMessage:"Box must have value"},{pc:[1122],errorMessage:"Bridge: amount too low for fee"},{pc:[1130],errorMessage:"Bridge: bridge to the zero address"},{pc:[1518],errorMessage:"Bridge: message processed"},{pc:[1561],errorMessage:"Bridge: no message"},{pc:[1352,1469],errorMessage:"Bridge: not enough fee"},{pc:[1460],errorMessage:"Bridge: source not registered"},{pc:[1242],errorMessage:"Bridge: tokens already sent"},{pc:[1205],errorMessage:"Bridge: unknown chain or token"},{pc:[1192],errorMessage:"Bridge: wrong destination chain"},{pc:[1283,1437,1558,1797,1844,2213,2314,2415],errorMessage:"Bytes has valid prefix"},{pc:[927],errorMessage:"CloseTo not allowed"},{pc:[1248],errorMessage:"Index access is out of bounds"},{pc:[341,356,376,394,413,433,448,463,475,487,503,523,550,562,574,594,622,657,681,697,713,731,749,767,799,831,840,856],errorMessage:"OnCompletion is not NoOp"},{pc:[2425],errorMessage:"Only owner"},{pc:[920],errorMessage:"Rekey not allowed"},{pc:[2094],errorMessage:"Router: is not stopAuthority"},{pc:[2230],errorMessage:"Router: no pool"},{pc:[2144],errorMessage:"Router: no receive pool"},{pc:[1112,1450,1947],errorMessage:"Router: swap prohibited"},{pc:[913],errorMessage:"Wrong asset"},{pc:[1724],errorMessage:"account opted into asset"},{pc:[1291,2240],errorMessage:"application exists"},{pc:[2035],errorMessage:"asset exists"},{pc:[860],errorMessage:"can only call when creating"},{pc:[344,359,379,397,416,436,451,466,478,490,506,526,553,565,577,597,625,660,684,700,716,734,752,770,802,834,843],errorMessage:"can only call when not creating"},{pc:[1111,1188,1210,1255,1288,1295,1400,1405,1449,1474,1526,1692,1732,1767,1804,1946,2092,2161,2266,2377,2423],errorMessage:"check GlobalState exists"},{pc:[1910],errorMessage:"invalid size"},{pc:[899],errorMessage:"transaction type is axfer"},{pc:[975],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYgNCAxNTcwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJjYW5Td2FwIiAibWVzc2VuZ2VyIiAib3duZXIiICJnYXNPcmFjbGUiICJjaGFpbklkIiAicmViYWxhbmNlciIgInQiICJwIiAweDAwICJzdG9wQXV0aG9yaXR5IiAweDAxICJnIiAweDQzNDE3YWEzIDB4Zjc0NzViODIgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgcmViYWxhbmNlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhiemVybygwKSkgfSk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ6ZXJvCiAgICBieXRlYyA2IC8vICJyZWJhbGFuY2VyIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTAKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYWZ0ZXJfaWZfZWxzZUAzNgogICAgcHVzaGJ5dGVzcyAweGZmZjgyODQxIDB4NjVmNzA1NzMgMHhlODNhODdhYiAweDJjOWY2ODQ3IDB4MzE5MTliMjggMHg0ZWJhMDcyMSAweGM2MTdlZDczIDB4NTc1MzE1NjAgMHg2MzgwODI3OCAweDA2NTA3YzZhIDB4ZjVmOTZlYjMgMHg0YjA2MmNhMCAweGMzY2RkOTJhIC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlLGFwcGxpY2F0aW9uLGFwcGxpY2F0aW9uKXZvaWQiLCBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgIm5vb3AoKXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UodWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInJlY2VpdmVUb2tlbnModWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInJlZ2lzdGVyQnJpZGdlKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAiYWRkQnJpZGdlVG9rZW4oYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJyZW1vdmVCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3R2FzVG9rZW5zKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgImdldEJyaWRnaW5nQ29zdEluVG9rZW5zKGJ5dGUsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiaGFzaE1lc3NhZ2UodWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZSxieXRlWzMyXSxieXRlWzMyXSlieXRlWzMyXSIsIG1ldGhvZCAiaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkKGJ5dGUsYnl0ZVszMl0pYm9vbCIKICAgIGJ5dGVjIDEzIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25Db3N0KGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDA3ZGY4NDI5IDB4ODBjNWM3MGYgMHhmYWIxMTFhMiAweGVmMTVmODU1IDB4NmIxZWUyMjMgMHgxODcwYTQ5MiAweDM1NTczMjRkIDB4MDRiMTYxZjEgMHhkMmIzNTdlYiAvLyBtZXRob2QgImdldFJlY2VpdmVUb2tlbnNDb3N0KCl1aW50NjQiLCBtZXRob2QgImdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCl1aW50NjQiLCBtZXRob2QgInN3YXAodWludDY0LHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhZGRQb29sKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVtb3ZlUG9vbCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3RvcFN3YXAoKXZvaWQiLCBtZXRob2QgInN0YXJ0U3dhcCgpdm9pZCIsIG1ldGhvZCAic2V0U3RvcEF1dGhvcml0eShhZGRyZXNzKXZvaWQiLCBtZXRob2QgInNldFJlYmFsYW5jZXIoYWRkcmVzcyl2b2lkIgogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIHB1c2hieXRlc3MgMHgwY2E1YWU3YSAweDM5N2I5MThiIDB4Y2JmYzZkMDIgMHhlMTdiYWZiNCAvLyBtZXRob2QgInNldEdhc1VzYWdlKGJ5dGUsdWludDY0KXZvaWQiLCBtZXRob2QgInNldEdhc09yYWNsZShhcHBsaWNhdGlvbil2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDUgbWFpbl9vcHRJbkFzc2V0X3JvdXRlQDYgbWFpbl9ub29wX3JvdXRlQDcgbWFpbl9zd2FwQW5kQnJpZGdlX3JvdXRlQDggbWFpbl9yZWNlaXZlVG9rZW5zX3JvdXRlQDkgbWFpbl9yZWdpc3RlckJyaWRnZV9yb3V0ZUAxMCBtYWluX2FkZEJyaWRnZVRva2VuX3JvdXRlQDExIG1haW5fcmVtb3ZlQnJpZGdlVG9rZW5fcm91dGVAMTIgbWFpbl93aXRoZHJhd0dhc1Rva2Vuc19yb3V0ZUAxMyBtYWluX3dpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19yb3V0ZUAxNCBtYWluX2dldEJyaWRnaW5nQ29zdEluVG9rZW5zX3JvdXRlQDE1IG1haW5faGFzaE1lc3NhZ2Vfcm91dGVAMTYgbWFpbl9pc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWRfcm91dGVAMTcgbWFpbl9nZXRUcmFuc2FjdGlvbkNvc3Rfcm91dGVAMTggbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxOSBtYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDIwIG1haW5fc3dhcF9yb3V0ZUAyMSBtYWluX2FkZFBvb2xfcm91dGVAMjIgbWFpbl9yZW1vdmVQb29sX3JvdXRlQDIzIG1haW5fc3RvcFN3YXBfcm91dGVAMjQgbWFpbl9zdGFydFN3YXBfcm91dGVAMjUgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDI2IG1haW5fc2V0UmViYWxhbmNlcl9yb3V0ZUAyNyBtYWluX2dldEdhc1VzYWdlX3JvdXRlQDI4IG1haW5fc2V0R2FzVXNhZ2Vfcm91dGVAMjkgbWFpbl9zZXRHYXNPcmFjbGVfcm91dGVAMzAgbWFpbl9nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0X3JvdXRlQDMxIG1haW5fdHJhbnNmZXJPd25lcnNoaXBfcm91dGVAMzIKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdHJhbnNmZXJPd25lcnNoaXBfcm91dGVAMzI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdHJhbnNmZXJPd25lcnNoaXAKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdF9yb3V0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRHYXNPcmFjbGVfcm91dGVAMzA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0R2FzT3JhY2xlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEdhc1VzYWdlX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRHYXNVc2FnZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRHYXNVc2FnZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjE3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0R2FzVXNhZ2UKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0UmViYWxhbmNlcl9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRSZWJhbGFuY2VyCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldFN0b3BBdXRob3JpdHlfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTM3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFN3YXBfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RhcnRTd2FwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0b3BTd2FwX3JvdXRlQDI0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0b3BTd2FwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbW92ZVBvb2xfcm91dGVAMjM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTEwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlUG9vbAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRQb29sX3JvdXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZFBvb2wKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdF9yb3V0ZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRUcmFuc2FjdGlvbkNvc3Rfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25Db3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2lzT3RoZXJCcmlkZ2VUb2tlblN1cHBvcnRlZF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2hhc2hNZXNzYWdlX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGhhc2hNZXNzYWdlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJyaWRnaW5nQ29zdEluVG9rZW5zX3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJyaWRnaW5nQ29zdEluVG9rZW5zCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3dpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fd2l0aGRyYXdHYXNUb2tlbnNfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgd2l0aGRyYXdHYXNUb2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlQnJpZGdlVG9rZW5fcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlQnJpZGdlVG9rZW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkQnJpZGdlVG9rZW5fcm91dGVAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkQnJpZGdlVG9rZW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVnaXN0ZXJCcmlkZ2Vfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVnaXN0ZXJCcmlkZ2UKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVjZWl2ZVRva2Vuc19yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlY2VpdmVUb2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcEFuZEJyaWRnZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo5My05NwogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo5My05NwogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIGNhbGxzdWIgc3dhcEFuZEJyaWRnZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJbkFzc2V0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBvcHRJbkFzc2V0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6Z2V0UHJldkFzc2V0UGF5KGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRQcmV2QXNzZXRQYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2QXNzZXRQYXkoYXNzZXRJZDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM2CiAgICAvLyBhc3NlcnQoVHhuLmdyb3VwSW5kZXggPiAwLCBgQXNzZXQgdHhuIG1pc3NpbmdgKTsKICAgIHR4biBHcm91cEluZGV4CiAgICBhc3NlcnQgLy8gQXNzZXQgdHhuIG1pc3NpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozOQogICAgLy8gY29uc3QgcHJldklkeDogdWludDY0ID0gVHhuLmdyb3VwSW5kZXggLSAxOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IHBheSA9IGd0eG4uQXNzZXRUcmFuc2ZlclR4bihwcmV2SWR4KTsKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDQKICAgIC8vIGFzc2VydChwYXkuYXNzZXRSZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIGBBc3NldCBtdXN0IGdvIHRvIGFwcGApOwogICAgZHVwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBBc3NldCBtdXN0IGdvIHRvIGFwcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjQ1CiAgICAvLyBhc3NlcnQocGF5LnhmZXJBc3NldC5pZCA9PT0gYXNzZXRJZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDgKICAgIC8vIGFzc2VydChwYXkucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDkKICAgIC8vIGFzc2VydChwYXkuYXNzZXRDbG9zZVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBDbG9zZVRvIG5vdCBhbGxvd2VkYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0Q2xvc2VUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIENsb3NlVG8gbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1MAogICAgLy8gcmV0dXJuIHBheS5hc3NldEFtb3VudDsKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmdldFByZXZQYXkocmVsVHhJbmRleDogdWludDY0KSAtPiB1aW50NjQ6CmdldFByZXZQYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTMKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2UGF5KHJlbFR4SW5kZXg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTQKICAgIC8vIGlmIChUeG4uZ3JvdXBJbmRleCA8IHJlbFR4SW5kZXgpIHJldHVybiAwOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGZyYW1lX2RpZyAtMQogICAgPAogICAgYnogZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTYKICAgIC8vIGNvbnN0IHR4SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIHJlbFR4SW5kZXg7CiAgICB0eG4gR3JvdXBJbmRleAogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU4CiAgICAvLyBpZiAoZ3R4bi5UcmFuc2FjdGlvbih0eElkeCkudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQpIHJldHVybiAwOwogICAgZ3R4bnMgVHlwZUVudW0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBwYXkgPSBndHhuLlBheW1lbnRUeG4odHhJZHgpOwogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MQogICAgLy8gaWYgKHBheS5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA2CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjYzCiAgICAvLyBpZiAocGF5LnJla2V5VG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDgKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NjQKICAgIC8vIGlmIChwYXkuY2xvc2VSZW1haW5kZXJUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAxCiAgICBndHhucyBDbG9zZVJlbWFpbmRlclRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBnZXRQcmV2UGF5X2FmdGVyX2lmX2Vsc2VAMTAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjY2CiAgICAvLyByZXR1cm4gcGF5LmFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBndHhucyBBbW91bnQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgY2hhaW5JZDogYnl0ZXMsIG1lc3NlbmdlcjogdWludDY0LCBnYXNPcmFjbGU6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgcHJvdG8gNCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWNfMyAvLyAib3duZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gb3duZXI7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxNAogICAgLy8gdGhpcy5nYXNPcmFjbGUudmFsdWUgPSBnYXNPcmFjbGU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM5CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDEwIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1NAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gb3duZXI7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyB0aGlzLmNoYWluSWQudmFsdWUgPSBjaGFpbklkOwogICAgZnJhbWVfZGlnIC0zCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyB0aGlzLm1lc3Nlbmdlci52YWx1ZSA9IG1lc3NlbmdlcjsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5vcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdm9pZDoKb3B0SW5Bc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIG9wdEluQXNzZXQoYXNzZXRJZDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OC04NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldElkKSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo4MgogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc4LTgzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KGFzc2V0SWQpLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OC04NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldElkKSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2UodG9rZW5JZDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBkZXN0aW5hdGlvbkNoYWluSWQ6IGJ5dGVzLCByZWNlaXZlVG9rZW46IGJ5dGVzLCBub25jZTogYnl0ZXMsIGZlZVRva2VuQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkzLTEwNQogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIC8vIHN3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIGZlZVRva2VuQW1vdW50OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDYgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2MQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBjb25zdCBhbW91bnQgPSBnZXRQcmV2QXNzZXRQYXkodG9rZW5JZCk7CiAgICBmcmFtZV9kaWcgLTYKICAgIGNhbGxzdWIgZ2V0UHJldkFzc2V0UGF5CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBhc3NlcnQoYW1vdW50ID4gZmVlVG9rZW5BbW91bnQsICdCcmlkZ2U6IGFtb3VudCB0b28gbG93IGZvciBmZWUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgPgogICAgYXNzZXJ0IC8vIEJyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2VydCghcmVjaXBpZW50LmJ5dGVzLmVxdWFscyhiemVybygzMikpLCAnQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcycpOwogICAgcHVzaGludCAzMiAvLyAzMgogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNQogICAgPT0KICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgZmVlRnJvbU5hdGl2ZTogdWludDY0ID0gZ2V0UHJldlBheSgyKTsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBjYWxsc3ViIGdldFByZXZQYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcEFuZEJyaWRnZV9hZnRlcl9pZl9lbHNlQDMKICAgIGludGNfMCAvLyAwCgpzd2FwQW5kQnJpZGdlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW5ANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBjb25zdCBicmlkZ2luZ0ZlZTogdWludDY0ID0gZmVlRnJvbU5hdGl2ZSArIGZlZUZyb21TdGFibGU7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGVtaXQ8QnJpZGdpbmdGZWVGcm9tVG9rZW5zPih7IGZlZUZyb21OYXRpdmUsIGZlZUZyb21TdGFibGUsIGZlZVN0YWJsZVRva2VuQW1vdW50OiBmZWVUb2tlbkFtb3VudCB9KTsKICAgIHN3YXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBjb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTE2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QodG9rZW5JZCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICBmcmFtZV9kaWcgLTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTE3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZCh0b2tlbklkLCBzZW5kZXIsIGFtb3VudEFmdGVyRmVlKTsKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBzZW5kQW5kU3dhcFRvVlVzZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NgogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KGRlc3RpbmF0aW9uQ2hhaW5JZCAhPT0gdGhpcy5jaGFpbklkLnZhbHVlLCAnQnJpZGdlOiB3cm9uZyBkZXN0aW5hdGlvbiBjaGFpbicpOwogICAgZnJhbWVfZGlnIC00CiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NgogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmhhc2hNZXNzYWdlKGFtb3VudCwgcmVjaXBpZW50LCB0aGlzLmNoYWluSWQudmFsdWUsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBkaWcgMQogICAgZnJhbWVfZGlnIC01CiAgICB1bmNvdmVyIDIKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBjb25zdCBicmlkZ2VUcmFuc2FjdGlvbkNvc3QgPSB0aGlzLmdldFRyYW5zYWN0aW9uQ29zdChkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZnJhbWVfZGlnIC00CiAgICBjYWxsc3ViIGdldFRyYW5zYWN0aW9uQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2MQogICAgLy8gc2VudE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAncycgfSk7CiAgICBwdXNoYnl0ZXMgInMiCiAgICBkaWcgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gYXNzZXJ0KCF0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS5leGlzdHMsICdCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQnKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiB0b2tlbnMgYWxyZWFkeSBzZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gdGhpcy5zZW50TWVzc2FnZXMobWVzc2FnZSkudmFsdWUgPSBuZXcgU3RhdGljQnl0ZXMoKTsKICAgIHB1c2hieXRlcyAweAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGNvbnN0IGRlc3RpbmF0aW9uQ2hhaW5JZCA9IG1lc3NhZ2UuYXQoMSk7CiAgICBkaWcgMQogICAgZXh0cmFjdCAxIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1Ny0xNjAKICAgIC8vIGNvbnN0IG1lc3NhZ2VDb3N0ID0gYWJpQ2FsbChNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTctMTYwCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkNvc3QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAibWVzc2VuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHBheW1lbnRQYXJhbXMsIGFwcENhbGxQYXJhbXMpOwogICAgaXR4bl9iZWdpbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE2Mi0xNjUKICAgIC8vIGNvbnN0IHBheW1lbnRQYXJhbXMgPSBpdHhuLnBheW1lbnQoewogICAgLy8gICBhbW91bnQ6IG1lc3NhZ2VDb3N0LAogICAgLy8gICByZWNlaXZlcjogdGhpcy5tZXNzZW5nZXIudmFsdWUuYWRkcmVzcywKICAgIC8vIH0pOwogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAocGF5bWVudFBhcmFtcywgYXBwQ2FsbFBhcmFtcyk7CiAgICBpdHhuX25leHQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBhcmM0Lm1ldGhvZFNlbGVjdG9yKCdzZW5kTWVzc2FnZShieXRlWzMyXSl2b2lkJyksCiAgICBwdXNoYnl0ZXMgMHhhMzI0OTk4OSAvLyBtZXRob2QgInNlbmRNZXNzYWdlKGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE2Ny0xNzMKICAgIC8vIGNvbnN0IGFwcENhbGxQYXJhbXMgPSBpdHhuLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXBwQXJnczogWwogICAgLy8gICAgIGFyYzQubWV0aG9kU2VsZWN0b3IoJ3NlbmRNZXNzYWdlKGJ5dGVbMzJdKXZvaWQnKSwKICAgIC8vICAgICBtZXNzYWdlLAogICAgLy8gICBdLAogICAgLy8gfSk7CiAgICBpbnRjXzIgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gaXR4bi5zdWJtaXRHcm91cChwYXltZW50UGFyYW1zLCBhcHBDYWxsUGFyYW1zKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gZW1pdDxSZWNlaXZlRmVlPih7IGJyaWRnZVRyYW5zYWN0aW9uQ29zdCwgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCB9KTsKICAgIGRpZyAxCiAgICBpdG9iCiAgICBkaWcgMQogICAgaXRvYgogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0YjU1NDE5YiAvLyBtZXRob2QgIlJlY2VpdmVGZWUodWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzcKICAgIC8vIGFzc2VydChicmlkZ2luZ0ZlZSA+PSBicmlkZ2VUcmFuc2FjdGlvbkNvc3QgKyBtZXNzYWdlVHJhbnNhY3Rpb25Db3N0LCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgKwogICAgdW5jb3ZlciAyCiAgICA8PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhbW91bnQsCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOC0xNDUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBmcmFtZV9kaWcgLTUKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC00CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY29uc3QgQUxMQlJJREdFX01FU1NFTkdFUiA9IG5ldyBCeXRlKDEpOwogICAgYnl0ZWMgMTEgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzgtMTQ1CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOC0xNDYKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICAvLyApOwogICAgcHVzaGJ5dGVzIDB4MjI5ZmJhZWMgLy8gbWV0aG9kICJUb2tlbnNTZW50KHVpbnQ2NCxieXRlWzMyXSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdLGJ5dGUpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKc3dhcEFuZEJyaWRnZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MwogICAgLy8gY29uc3QgZmVlOiB1aW50NjQgPSB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwgewogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM2CiAgICAvLyBwcm90ZWN0ZWQgYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3RvciA9IEJveE1hcDx1aW50NjQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQzLTM0NgogICAgLy8gY29uc3QgZmVlOiB1aW50NjQgPSB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwgewogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImdhc09yYWNsZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQzLTM0NgogICAgLy8gY29uc3QgZmVlOiB1aW50NjQgPSB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwgewogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgxZGI3MGNkZCAvLyBtZXRob2QgImdldFByaWNlKGJ5dGUpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbih0b2tlbklkLCBmZWVUb2tlbkFtb3VudCk7CiAgICBiIHN3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnJlY2VpdmVUb2tlbnMoYW1vdW50OiB1aW50NjQsIHJlY2lwaWVudDogYnl0ZXMsIHNvdXJjZUNoYWluSWQ6IGJ5dGVzLCByZWNlaXZlVG9rZW46IGJ5dGVzLCBub25jZTogYnl0ZXMsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdm9pZDoKcmVjZWl2ZVRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc4LTE4NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyByZWNlaXZlVG9rZW5zKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIHJlY2VpdmVUb2tlbjogU3RhdGljQnl0ZXM8MzI+LAogICAgLy8gICBub25jZTogU3RhdGljQnl0ZXM8MzI+LAogICAgLy8gICByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDYgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2MQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODgKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS5leGlzdHMsICdCcmlkZ2U6IHNvdXJjZSBub3QgcmVnaXN0ZXJlZCcpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBzb3VyY2Ugbm90IHJlZ2lzdGVyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg5CiAgICAvLyBjb25zdCB2YWx1ZTogdWludDY0ID0gZ2V0UHJldlBheSgxKTsKICAgIGludGNfMSAvLyAxCiAgICBjYWxsc3ViIGdldFByZXZQYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyBhc3NlcnQodmFsdWUgPj0gc3RvcmFnZUZlZSwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMjQKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgPj0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIHVuY292ZXIgMwogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo4MAogICAgLy8gY29uc3QgaDogYnl0ZXMgPSBvcC5rZWNjYWsyNTYob3AuY29uY2F0KG1lc3NhZ2UuYnl0ZXMsIHNlbmRlckFkZHJlc3MpKTsKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTQKICAgIC8vIGNvbnN0IG1lc3NhZ2VXaXRoU2VuZGVyID0gaGFzaFdpdGhTZW5kZXJBZGRyZXNzKG1lc3NhZ2UsIFR4bi5zZW5kZXIuYnl0ZXMpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjgwCiAgICAvLyBjb25zdCBoOiBieXRlcyA9IG9wLmtlY2NhazI1NihvcC5jb25jYXQobWVzc2FnZS5ieXRlcywgc2VuZGVyQWRkcmVzcykpOwogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo4MwogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjg1CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo4OAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1OQogICAgLy8gcHJvY2Vzc2VkTWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdtJyB9KTsKICAgIHB1c2hieXRlcyAibSIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBhc3NlcnQoIXRoaXMucHJvY2Vzc2VkTWVzc2FnZXMobWVzc2FnZVdpdGhTZW5kZXIpLmV4aXN0cywgJ0JyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQnKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBtZXNzYWdlIHByb2Nlc3NlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTgKICAgIC8vIHRoaXMucHJvY2Vzc2VkTWVzc2FnZXMobWVzc2FnZVdpdGhTZW5kZXIpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjAxLTIwNAogICAgLy8gYXNzZXJ0KGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5yZWNlaXZlZE1lc3NhZ2VzLCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDEtMjA0CiAgICAvLyBhc3NlcnQoYWJpQ2FsbChNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbbWVzc2FnZVdpdGhTZW5kZXJdLAogICAgLy8gfSkucmV0dXJuVmFsdWUsICdCcmlkZ2U6IG5vIG1lc3NhZ2UnKTsKICAgIHB1c2hieXRlcyAweDMzZTE0N2FhIC8vIG1ldGhvZCAicmVjZWl2ZWRNZXNzYWdlcyhieXRlWzMyXSlib29sIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm8gbWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGNvbnN0IHRva2VuSWQ6IHVpbnQ2NCA9IG9wLmV4dHJhY3RVaW50NjQocmVjZWl2ZVRva2VuLmJ5dGVzLCAyNCk7CiAgICBmcmFtZV9kaWcgLTMKICAgIHB1c2hpbnQgMjQgLy8gMjQKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOC0yMTMKICAgIC8vIGNvbnN0IHJlY2VpdmVBbW91bnQgPSB0aGlzLnJlY2VpdmVBbmRTd2FwRnJvbVZVc2QoCiAgICAvLyAgIHRva2VuSWQsCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gY29uc3QgZXh0cmFHYXM6IHVpbnQ2NCA9IHZhbHVlIC0gc3RvcmFnZUZlZTsKICAgIC0KICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE3CiAgICAvLyBpZiAodmFsdWUgPiBzdG9yYWdlRmVlKSB7CiAgICA+CiAgICBieiByZWNlaXZlVG9rZW5zX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTgtMjIxCiAgICAvLyBwYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtNQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgZnJhbWVfZGlnIDIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gZW1pdDxUb2tlbnNSZWNlaXZlZD4oeyByZWNlaXZlQW1vdW50LCByZWNpcGllbnQ6IHJlY2lwaWVudEFkZHJlc3MsIG5vbmNlLCBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsIG1lc3NhZ2U6IG1lc3NhZ2VXaXRoU2VuZGVyIH0pOwogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY29uc3QgQUxMQlJJREdFX01FU1NFTkdFUiA9IG5ldyBCeXRlKDEpOwogICAgYnl0ZWMgMTEgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsgcmVjZWl2ZUFtb3VudCwgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLCBub25jZSwgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLCBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciB9KTsKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NDU4MzZhZDYgLy8gbWV0aG9kICJUb2tlbnNSZWNlaXZlZCh1aW50NjQsYWRkcmVzcyxieXRlWzMyXSxieXRlLGJ5dGVbMzJdKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2UoY2hhaW5JZDogYnl0ZXMsIGJyaWRnZUFkZHJlc3M6IGJ5dGVzKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI2LTIyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyByZWdpc3RlckJyaWRnZShjaGFpbklkOiBCeXRlLCBicmlkZ2VBZGRyZXNzOiBTdGF0aWNCeXRlczwzMj4pOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2MwogICAgLy8gb3RoZXJCcmlkZ2VzID0gQm94TWFwPEJ5dGUsIFN0YXRpY0J5dGVzPDMyPj4oeyBrZXlQcmVmaXg6ICdiJyB9KTsKICAgIHB1c2hieXRlcyAiYiIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyOQogICAgLy8gdGhpcy5vdGhlckJyaWRnZXMoY2hhaW5JZCkudmFsdWUgPSBicmlkZ2VBZGRyZXNzOwogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuYWRkQnJpZGdlVG9rZW4oY2hhaW5JZDogYnl0ZXMsIHRva2VuQWRkcmVzczogYnl0ZXMpIC0+IHZvaWQ6CmFkZEJyaWRnZVRva2VuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzItMjMzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGFkZEJyaWRnZVRva2VuKGNoYWluSWQ6IEJ5dGUsIHRva2VuQWRkcmVzczogU3RhdGljQnl0ZXM8MzI+KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NgogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzUKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkudmFsdWUgPSBuZXcgU3RhdGljQnl0ZXMoKTsKICAgIHB1c2hieXRlcyAweAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnJlbW92ZUJyaWRnZVRva2VuKGNoYWluSWQ6IGJ5dGVzLCB0b2tlbkFkZHJlc3M6IGJ5dGVzKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM4LTIzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyByZW1vdmVCcmlkZ2VUb2tlbihjaGFpbklkOiBCeXRlLCB0b2tlbkFkZHJlc3M6IFN0YXRpY0J5dGVzPDMyPik6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQxCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnMoYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CndpdGhkcmF3R2FzVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDQtMjQ1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHdpdGhkcmF3R2FzVG9rZW5zKGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBwYXltZW50KHsgYW1vdW50OiBhbW91bnQsIHJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0NwogICAgLy8gcGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zKGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHdpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyhhc3NldElkOiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGNvbnN0IGFwcEFjY3Q6IEFjY291bnQgPSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzczsKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBjb25zdCBiYWxhbmNlID0gYXNzZXQuYmFsYW5jZShhcHBBY2N0KTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1Ny0yNjIKICAgIC8vIGFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAib3duZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZnJhbWVfZGlnIDAKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1Ny0yNjIKICAgIC8vIGFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0Cgp3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmdldEJyaWRnaW5nQ29zdEluVG9rZW5zKGRlc3RpbmF0aW9uQ2hhaW5JZDogYnl0ZXMsIHRva2VuSWQ6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY2LTI3MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBnZXRCcmlkZ2luZ0Nvc3RJblRva2VucygKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICB0b2tlbklkOiB1aW50NjQsCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gY29uc3QgYnJpZGdlR2FzQW1vdW50OiB1aW50NjQgPSB0aGlzLmdldEdhc1VzYWdlKGRlc3RpbmF0aW9uQ2hhaW5JZCk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcyLTI3NQogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0R2FzVXNhZ2UsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAibWVzc2VuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcyLTI3NQogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0R2FzVXNhZ2UsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzctMjgwCiAgICAvLyByZXR1cm4gYWJpQ2FsbChHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6OQogICAgLy8gZ2FzT3JhY2xlID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjc5CiAgICAvLyBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkLCBicmlkZ2VHYXNBbW91bnQgKyBtZXNzZW5nZXJHYXNBbW91bnRdLAogICAgY292ZXIgMgogICAgKwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzctMjgwCiAgICAvLyByZXR1cm4gYWJpQ2FsbChHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZTsKICAgIHB1c2hieXRlcyAweDdiZjdkNTBjIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QoYnl0ZSx1aW50NjQpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyODAKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozMwogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjc3LTI4MAogICAgLy8gcmV0dXJuIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJblVTRCwgewogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWU7CiAgICAvCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UoYW1vdW50OiB1aW50NjQsIHJlY2lwaWVudDogYnl0ZXMsIHNvdXJjZUNoYWluSWQ6IGJ5dGVzLCBkZXN0aW5hdGlvbkNoYWluSWQ6IGJ5dGVzLCByZWNlaXZlVG9rZW46IGJ5dGVzLCBub25jZTogYnl0ZXMpIC0+IGJ5dGVzOgpoYXNoTWVzc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzLTI5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBoYXNoTWVzc2FnZSgKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2lwaWVudDogU3RhdGljQnl0ZXM8MzI+LAogICAgLy8gICBzb3VyY2VDaGFpbklkOiBCeXRlLAogICAgLy8gICBkZXN0aW5hdGlvbkNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIHJlY2VpdmVUb2tlbjogU3RhdGljQnl0ZXM8MzI+LAogICAgLy8gICBub25jZTogU3RhdGljQnl0ZXM8MzI+LAogICAgLy8gKTogU3RhdGljQnl0ZXM8MzI+IHsKICAgIHByb3RvIDYgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIGNvbnN0IGFtb3VudDMyID0gYnplcm8oMjQpLmNvbmNhdChvcC5pdG9iKGFtb3VudCkpOwogICAgcHVzaGludCAyNCAvLyAyNAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNgogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5MwogICAgLy8gY29uc3Qgc291cmNlQ2hhaW5JZDMyID0gYnplcm8oMzEpLmNvbmNhdChzb3VyY2VDaGFpbklkLmJ5dGVzKTsKICAgIHB1c2hpbnQgMzEgLy8gMzEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTQtMjk1CiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTYKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTQtMjk3CiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgLy8gICAuY29uY2F0KHJlY2VpdmVUb2tlbi5ieXRlcykKICAgIC8vICAgLmNvbmNhdChub25jZS5ieXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCBBTExCUklER0VfTUVTU0VOR0VSID0gbmV3IEJ5dGUoMSk7CiAgICBieXRlYyAxMSAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQobm9uY2UuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoQUxMQlJJREdFX01FU1NFTkdFUi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAxCiAgICAvLyBjb25zdCBoYXNoID0gb3Aua2VjY2FrMjU2KHBhY2tlZCk7IC8vIDMyIGJ5dGVzCiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyBjb25zdCB3aXRoU3JjID0gb3Auc2V0Qnl0ZShoYXNoLCAwLCBvcC5idG9pKHNvdXJjZUNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtNAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA1CiAgICAvLyBjb25zdCB3aXRoRHN0ID0gb3Auc2V0Qnl0ZSh3aXRoU3JjLCAxLCBvcC5idG9pKGRlc3RpbmF0aW9uQ2hhaW5JZC5ieXRlcykpOwogICAgZnJhbWVfZGlnIC0zCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMQogICAgc3dhcAogICAgc2V0Ynl0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KHdpdGhEc3QpOwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkKGNoYWluSWQ6IGJ5dGVzLCB0b2tlbjogYnl0ZXMpIC0+IHVpbnQ2NDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTAtMzExCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGlzT3RoZXJCcmlkZ2VUb2tlblN1cHBvcnRlZChjaGFpbklkOiBCeXRlLCB0b2tlbjogU3RhdGljQnl0ZXM8MzI+KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NgogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIHJldHVybiB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuKSkuZXhpc3RzOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0VHJhbnNhY3Rpb25Db3N0KGNoYWluSWQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldFRyYW5zYWN0aW9uQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE1LTMxNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBnZXRUcmFuc2FjdGlvbkNvc3QoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgKwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnN3YXAodG9rZW5JZDogdWludDY0LCByZWNlaXZlVG9rZW5JZDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCByZWNlaXZlQW1vdW50TWluOiB1aW50NjQpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjc4LTg0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHN3YXAoCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZVRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBBZGRyZXNzLAogICAgLy8gICByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDQgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2MQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODYKICAgIC8vIGNvbnN0IHNlbmRlciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo4NwogICAgLy8gY29uc3QgYW1vdW50ID0gZ2V0UHJldkFzc2V0UGF5KHRva2VuSWQpOwogICAgZnJhbWVfZGlnIC00CiAgICBjYWxsc3ViIGdldFByZXZBc3NldFBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo4OAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QodG9rZW5JZCwgc2VuZGVyLCBhbW91bnQpOwogICAgZnJhbWVfZGlnIC00CiAgICBkaWcgMgogICAgZGlnIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGNvbnN0IHJlY2VpdmVkQW1vdW50ID0gdGhpcy5yZWNlaXZlQW5kU3dhcEZyb21WVXNkKHJlY2VpdmVUb2tlbklkLCByZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4pOwogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIHVuY292ZXIgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTAKICAgIC8vIGVtaXQ8U3dhcHBlZD4oeyBzZW5kZXIsIHJlY2lwaWVudCwgdG9rZW5JZCwgcmVjZWl2ZVRva2VuSWQsIGFtb3VudCwgcmVjZWl2ZWRBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTU0MDQ0YjMgLy8gbWV0aG9kICJTd2FwcGVkKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5hZGRQb29sKHBvb2xJZDogdWludDY0LCB0b2tlbklkOiB1aW50NjQpIC0+IHZvaWQ6CmFkZFBvb2w6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gYWRkUG9vbChwb29sSWQ6IHVpbnQ2NCwgdG9rZW5JZDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTAyCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTAzCiAgICAvLyB0aGlzLnBvb2xzKHRva2VuSWQpLnZhbHVlID0gcG9vbElkOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMxCiAgICAvLyBwb29scyA9IEJveE1hcDx1aW50NjQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdwJyB9KTsKICAgIGJ5dGVjIDggLy8gInAiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwMwogICAgLy8gdGhpcy5wb29scyh0b2tlbklkKS52YWx1ZSA9IHBvb2xJZDsKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy1vcmFjbGUuY29udHJhY3QuYWxnby50czo4CiAgICAvLyBleHBvcnQgY29uc3QgT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTjogdWludDY0ID0gOTsKICAgIHB1c2hpbnQgOSAvLyA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtb3JhY2xlLmNvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNvbnN0IENIQUlOX1BSRUNJU0lPTjogdWludDY0ID0gNjsKICAgIGludGNfMiAvLyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ2YnIH0pOwogICAgcHVzaGJ5dGVzICJmIgogICAgZGlnIDMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyArIENIQUlOX1BSRUNJU0lPTik7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICB1bmNvdmVyIDIKICAgIGV4cAogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozMwogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTA3CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzKTsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHVuY292ZXIgMgogICAgZXhwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVtb3ZlUG9vbCh0b2tlbklkOiB1aW50NjQpIC0+IHZvaWQ6CnJlbW92ZVBvb2w6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMC0xMTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gcmVtb3ZlUG9vbCh0b2tlbklkOiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTMKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzEKICAgIC8vIHBvb2xzID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTMKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5zdG9wU3dhcCgpIC0+IHZvaWQ6CnN0b3BTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2OAogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJzdG9wQXV0aG9yaXR5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTAKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEyMgogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5zdGFydFN3YXAoKSAtPiB2b2lkOgpzdGFydFN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUwCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMzEKICAgIC8vIHRoaXMuY2FuU3dhcC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5zZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IGJ5dGVzKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMzctMTM4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM5CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDEwIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDAKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc2V0UmViYWxhbmNlcihyZWJhbGFuY2VyOiBieXRlcykgLT4gdm9pZDoKc2V0UmViYWxhbmNlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQ2LTE0NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBzZXRSZWJhbGFuY2VyKHJlYmFsYW5jZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0OQogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA2IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDkKICAgIC8vIHRoaXMucmViYWxhbmNlci52YWx1ZSA9IHJlYmFsYW5jZXI7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCh0b2tlbklkOiB1aW50NjQsIHJlY2lwaWVudDogYnl0ZXMsIHZVc2RBbW91bnQ6IHVpbnQ2NCwgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0KSAtPiB1aW50NjQ6CnJlY2VpdmVBbmRTd2FwRnJvbVZVc2Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1Mi0xNTcKICAgIC8vIHByb3RlY3RlZCByZWNlaXZlQW5kU3dhcEZyb21WVXNkKAogICAgLy8gICB0b2tlbklkOiB1aW50NjQsCiAgICAvLyAgIHJlY2lwaWVudDogQWRkcmVzcywKICAgIC8vICAgdlVzZEFtb3VudDogdWludDY0LAogICAgLy8gICByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gNCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHModG9rZW5JZCkuZXhpc3RzLCAnUm91dGVyOiBubyByZWNlaXZlIHBvb2wnKTsKICAgIGZyYW1lX2RpZyAtNAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozMQogICAgLy8gcG9vbHMgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHModG9rZW5JZCkuZXhpc3RzLCAnUm91dGVyOiBubyByZWNlaXZlIHBvb2wnKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gUm91dGVyOiBubyByZWNlaXZlIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTU5CiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKHRva2VuSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTYwLTE2MwogICAgLy8gcmV0dXJuIGFiaUNhbGwoUG9vbC5wcm90b3R5cGUuc3dhcEZyb21WVXNkLCB7CiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjIKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJyZWJhbGFuY2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTYyCiAgICAvLyBhcmdzOiBbcmVjaXBpZW50LCB2VXNkQW1vdW50LCByZWNlaXZlQW1vdW50TWluLCByZWNpcGllbnQgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjAtMTYzCiAgICAvLyByZXR1cm4gYWJpQ2FsbChQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsIHsKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKHRva2VuSWQ6IHVpbnQ2NCwgdXNlcjogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CnNlbmRBbmRTd2FwVG9WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjcKICAgIC8vIHByb3RlY3RlZCBzZW5kQW5kU3dhcFRvVlVzZCh0b2tlbklkOiB1aW50NjQsIHVzZXI6IEFkZHJlc3MsIGFtb3VudDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjgKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKHRva2VuSWQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZnJhbWVfZGlnIC0zCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMxCiAgICAvLyBwb29scyA9IEJveE1hcDx1aW50NjQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdwJyB9KTsKICAgIGJ5dGVjIDggLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTY4CiAgICAvLyBhc3NlcnQodGhpcy5wb29scyh0b2tlbklkKS5leGlzdHMsICdSb3V0ZXI6IG5vIHBvb2wnKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gUm91dGVyOiBubyBwb29sCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2OQogICAgLy8gY29uc3QgcG9vbElkID0gdGhpcy5wb29scyh0b2tlbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzYKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdG9rZW5JZCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgLy8gfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEFwcGxpY2F0aW9uKHBvb2xJZCkuYWRkcmVzcywKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0b2tlbklkLAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzEtMTc2CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRva2VuSWQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IEFwcGxpY2F0aW9uKHBvb2xJZCkuYWRkcmVzcywKICAgIC8vIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3OC0xODEKICAgIC8vIHJldHVybiBhYmlDYWxsKFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsIHsKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODAKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgcmViYWxhbmNlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhiemVybygwKSkgfSk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInJlYmFsYW5jZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODAKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzgtMTgxCiAgICAvLyByZXR1cm4gYWJpQ2FsbChQb29sLnByb3RvdHlwZS5zd2FwVG9WVXNkLCB7CiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdnJyB9KTsKICAgIGJ5dGVjIDEyIC8vICJnIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLnNldEdhc1VzYWdlKGNoYWluSWQ6IGJ5dGVzLCBnYXNBbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0R2FzVXNhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyLTIzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHNldEdhc1VzYWdlKGNoYWluSWQ6IEJ5dGUsIGdhc0Ftb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ2cnIH0pOwogICAgYnl0ZWMgMTIgLy8gImciCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoyNQogICAgLy8gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZSA9IGdhc0Ftb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzT3JhY2xlKGdhc09yYWNsZTogdWludDY0KSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4LTI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHNldEdhc09yYWNsZShnYXNPcmFjbGU6IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDQgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNC0zNQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQ6IEJ5dGUpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjEwCiAgICAvLyBnYXNVc2FnZSA9IEJveE1hcDxCeXRlLCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZycgfSk7CiAgICBieXRlYyAxMiAvLyAiZyIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM2CiAgICAvLyBjb25zdCBnYXNBbW91bnQgPSB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDAKICAgIC8vIHJldHVybiBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbiwgewogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImdhc09yYWNsZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDAKICAgIC8vIHJldHVybiBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbiwgewogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHhjMmFmY2NkMSAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4oYnl0ZSx1aW50NjQpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUub25seU93bmVyKCkgLT4gdm9pZDoKb25seU93bmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwKG5ld093bmVyOiBieXRlcykgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNi0xNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzMgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBuZXdPd25lcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CiAFAAEGBNR6JhAEFR98dQdjYW5Td2FwCW1lc3NlbmdlcgVvd25lcglnYXNPcmFjbGUHY2hhaW5JZApyZWJhbGFuY2VyAXQBcAEADXN0b3BBdXRob3JpdHkBAQFnBENBeqME90dbggwVH3x1AAAAAAAAPVQxGEAACSKvJwZMZykjZzEbQQDJgg0E//goQQRl9wVzBOg6h6sELJ9oRwQxkZsoBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBPqxEaIE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEOXuRiwTL/G0CBOF7r7Q2GgCOHAIFAfUB7AHMAawBmgGIAXYBZgFWAT4BGwD/AOsA3wDTALgApACUAIgAfABtAF4ASgA3ACUAEQACIkMxGRREMRhENhoBiAgcI0MxGRREMRhENhoBiAfJFihMULAjQzEZFEQxGEQ2GgEXwDKIB6YjQzEZFEQxGEQ2GgE2GgIXiAeDI0MxGRREMRhENhoBiAdmFihMULAjQzEZFEQxGEQ2GgGIBosjQzEZFEQxGEQ2GgGIBnAjQzEZFEQxGESIBl0jQzEZFEQxGESIBkQjQzEZFEQxGEQ2GgEXiAYkI0MxGRREMRhENhoBFzYaAheIBdcjQzEZFEQxGEQ2GgEXNhoCFzYaAzYaBBeIBXMjQzEZFEQxGEQnD7AjQzEZFEQxGEQnD7AjQzEZFEQxGEQ2GgGIBUAWKExQsCNDMRkURDEYRDYaATYaAogFGScJIk8CVChMULAjQzEZFEQxGEQ2GgEXNhoCNhoDNhoENhoFNhoGiAS9KExQsCNDMRkURDEYRDYaATYaAheIBDwWKExQsCNDMRkURDEYRDYaAReIA/cjQzEZFEQxGEQ2GgEXiAPOI0MxGRREMRhENhoBNhoCiAOqI0MxGRREMRhENhoBNhoCiAOFI0MxGRREMRhENhoBNhoCiANjI0MxGRREMRhENhoBFzYaAjYaAzYaBDYaBTYaBheIAokjQzEZFEQxGEQ2GgEXNhoCNhoDNhoENhoFNhoGF4gBFyNDMRkURDEYRCNDMRkURDEYRDYaAReIAMkjQzEZFEQxGBRENhoBNhoCNhoDF8AyNhoEF8AyiACPI0OKAQExFkQxFiMJSTgQJRJESTgUMgoSREk4EYv/EkRJOCAyAxJESTgVMgMSRDgSiYoBAYAASTEWi/8MQQAEIowAiTEWi/8JSYwBOBBJjAAjE0EABCKMAImLACMSRIsBOAcyChNBAAQijACJiwE4IDIDE0EABCKMAImLATgJMgMTQQAEIowAiYsBOAiMAImKBAAri/xnJwSL/2cnCov8ZycFi/1nKov+Z4mKAQCIBVCxMgqyFCKyEov/shElshAisgGzgBhCcmlkZ2U6IG9wdC1pbiBjb21wbGV0ZWSwiYoGACIpZUREi/qI/xZJi/8NRIEgr4v7EhREgQKI/zOL/0AA7iKLAUlLAghMFk8CFov/Fk4CUExQgAQ2uvrdTFCwiwCL/wmL+jEATwKIBAgiJwVlRIv8E0SL/Iv9UCcHTFC9RQFEIicFZURLAYv7TwKL/Iv9i/6IAnuL/IgCuYABc0sCUEm9RQEURIAAv0sBVwEBsSIqZUQnDbIashiyGiSyECKyAbO0PklXBABMVwAEKBJEFyIqZURyCEQiKmVEsUyyB0sBsggjshAisgG2gASjJJmJshpPA7IashgkshAisgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov7UIv8UIv9UIv+UCcLUIAEIp+67ExQsImL+haAAWZMUL5MF0xEi/8LsSInBGVEIicFZUSABB23DN2yGrIashgkshAisgGztD5JVwQATFcABCgSRBcKQv7TigYAIillRESAAWKL/FC9RQFEI4j96kkhBA9EIicFZUSL+ov7i/xPA4v9i/6IAXNJMQBQAkxRAAJMUQIgUElOAoABbUsBUEm9RQEURIAAv7EiKmVEgAQz4UeqshqyGLIaJLIQIrIBs7Q+SVcEAExXAAQoEkQiU0SL/YEYW4v7i/qL/4gCKkxJIQQJTCEEDUEAELGL+7IHiwKyCCOyECKyAbOLARaL+1CL/lAnC1CLAFCABEWDatZMULCJigIAiAMPgAFii/5Qi/+/iYoCAIgC/4v+i/9QJwdMUIAAv4mKAgCIAuyL/ov/UCcHTFC8SImKAQCIAtqxIitlRLIHi/+yCCOyECKyAbOJigEAiALBMgpJi/9wAExJTwJEQQAasSIrZUSyFIsBshKL/7IRiwCyACWyECKyAbOJigIBi/6IAiqxIiplRCcOshqL/rIashgkshAisgGztD5JVwQATFcABCgSRBexIicEZUROAggWgAR799UMshqL/rIashqyGCSyECKyAbO0PklXBABMVwAEKBJEF4v/FoABZUxQvkwXTEQKiYoGAYEYr4v6FlCBH6+L/FBMi/tQTFCL/lCL/1AnC1ACi/wXIkxWi/0XI0xWSRWBIBJEiYoCAYv+i/9QJwdMUL1FAYmKAQGL/4gBpyEECImKBAAiKWVERDEAi/yI+9GL/EsCSwKIAPyL/Yv+TwKL/4gAm4v8Fov9Fk8DFk8DFk8Ei/5QTwRQTwNQTwJQTFCABBVARLNMULCJigIAiAGPi/8WJwhLAVCL/ha/i/9xAUSBCUwJSSQIgAFmSwNQgQpPApQWv4ABZU8CUIEKTwKUFr+JigEAiAFWi/8WJwhMULxIiTEAIicKZUQSRCkiZ4mIATwpI2eJigEAiAEyJwqL/2eJigEAiAEmJwaL/2eJigQBi/wWJwhMUEm9RQFEvkwXTESxi/4Wi/8WIicGZUSL/RInCSJPAlSABA0bTAayGov9shpPArIaTLIashqyGCSyECKyAbO0PklXBABMVwAEKBJEF4mKAwGL/RYnCExQSb1FAUS+TBdMRLFJcghEshSL/7ISi/2yESWyECKyAbOxi/8WIicGZUSL/hInCSJPAlSABNl4rRSyGov+shpMshqyGrIYJLIQIrIBs7Q+SVcEAExXAAQoEkQXiYoBAScMi/9QvkwXTESJigIAiABRJwyL/lCL/xa/iYoBAIgAQScEi/9niYoBAScMi/9QvkwXTESxIicEZURMFoAEwq/M0bIai/+yGrIashgkshAisgGztD5JVwQATFcABCgSRBeJMQAiK2VEEkSJigEAiP/xK4v/Z4k=",clear:"CoEBQw=="},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 w=class r{static get create(){return{_resolveByMethod(i){switch(i.method){case"createApplication":case"createApplication(address,byte,application,application)void":return r.create.createApplication(i)}throw new Error("Unknown ' + verb + ' method")},createApplication(i){return{...i,method:"createApplication(address,byte,application,application)void",args:Array.isArray(i.args)?i.args:[i.args.owner,i.args.chainId,i.args.messenger,i.args.gasOracle]}}}}static optInAsset(i){return{...i,method:"optInAsset(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetId]}}static noop(i){return{...i,method:"noop()void",args:Array.isArray(i.args)?i.args:[]}}static swapAndBridge(i){return{...i,method:"swapAndBridge(uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(i.args)?i.args:[i.args.tokenId,i.args.recipient,i.args.destinationChainId,i.args.receiveToken,i.args.nonce,i.args.feeTokenAmount]}}static receiveTokens(i){return{...i,method:"receiveTokens(uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amount,i.args.recipient,i.args.sourceChainId,i.args.receiveToken,i.args.nonce,i.args.receiveAmountMin]}}static registerBridge(i){return{...i,method:"registerBridge(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.bridgeAddress]}}static addBridgeToken(i){return{...i,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.tokenAddress]}}static removeBridgeToken(i){return{...i,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.tokenAddress]}}static withdrawGasTokens(i){return{...i,method:"withdrawGasTokens(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amount]}}static withdrawBridgingFeeInTokens(i){return{...i,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetId]}}static getBridgingCostInTokens(i){return{...i,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(i.args)?i.args:[i.args.destinationChainId,i.args.tokenId]}}static hashMessage(i){return{...i,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(i.args)?i.args:[i.args.amount,i.args.recipient,i.args.sourceChainId,i.args.destinationChainId,i.args.receiveToken,i.args.nonce]}}static isOtherBridgeTokenSupported(i){return{...i,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.token]}}static getTransactionCost(i){return{...i,method:"getTransactionCost(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static getReceiveTokensCost(i){return{...i,method:"getReceiveTokensCost()uint64",args:Array.isArray(i.args)?i.args:[]}}static getSendTransactionStorageCost(i){return{...i,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(i.args)?i.args:[]}}static swap(i){return{...i,method:"swap(uint64,uint64,address,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.tokenId,i.args.receiveTokenId,i.args.recipient,i.args.receiveAmountMin]}}static addPool(i){return{...i,method:"addPool(uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.poolId,i.args.tokenId]}}static removePool(i){return{...i,method:"removePool(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.tokenId]}}static stopSwap(i){return{...i,method:"stopSwap()void",args:Array.isArray(i.args)?i.args:[]}}static startSwap(i){return{...i,method:"startSwap()void",args:Array.isArray(i.args)?i.args:[]}}static setStopAuthority(i){return{...i,method:"setStopAuthority(address)void",args:Array.isArray(i.args)?i.args:[i.args.stopAuthority]}}static setRebalancer(i){return{...i,method:"setRebalancer(address)void",args:Array.isArray(i.args)?i.args:[i.args.rebalancer]}}static getGasUsage(i){return{...i,method:"getGasUsage(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static setGasUsage(i){return{...i,method:"setGasUsage(byte,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.gasAmount]}}static setGasOracle(i){return{...i,method:"setGasOracle(application)void",args:Array.isArray(i.args)?i.args:[i.args.gasOracle]}}static getTransactionRelayerCost(i){return{...i,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static transferOwnership(i){return{...i,method:"transferOwnership(address)void",args:Array.isArray(i.args)?i.args:[i.args.newOwner]}}};var ii=class r{appClient;constructor(i){this.appClient=i instanceof ti?i:new ti({...i,appSpec:ni})}decodeReturnValue(i,a){return a!==void 0?gs(a,this.appClient.getABIMethod(i),ni.structs):void 0}static async fromCreatorAndName(i){return new r(await ti.fromCreatorAndName({...i,appSpec:ni}))}static async fromNetwork(i){return new r(await ti.fromNetwork({...i,appSpec:ni}))}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:i=>this.appClient.params.bare.clearState(i),optInAsset:i=>this.appClient.params.call(w.optInAsset(i)),noop:(i={args:[]})=>this.appClient.params.call(w.noop(i)),swapAndBridge:i=>this.appClient.params.call(w.swapAndBridge(i)),receiveTokens:i=>this.appClient.params.call(w.receiveTokens(i)),registerBridge:i=>this.appClient.params.call(w.registerBridge(i)),addBridgeToken:i=>this.appClient.params.call(w.addBridgeToken(i)),removeBridgeToken:i=>this.appClient.params.call(w.removeBridgeToken(i)),withdrawGasTokens:i=>this.appClient.params.call(w.withdrawGasTokens(i)),withdrawBridgingFeeInTokens:i=>this.appClient.params.call(w.withdrawBridgingFeeInTokens(i)),getBridgingCostInTokens:i=>this.appClient.params.call(w.getBridgingCostInTokens(i)),hashMessage:i=>this.appClient.params.call(w.hashMessage(i)),isOtherBridgeTokenSupported:i=>this.appClient.params.call(w.isOtherBridgeTokenSupported(i)),getTransactionCost:i=>this.appClient.params.call(w.getTransactionCost(i)),getReceiveTokensCost:(i={args:[]})=>this.appClient.params.call(w.getReceiveTokensCost(i)),getSendTransactionStorageCost:(i={args:[]})=>this.appClient.params.call(w.getSendTransactionStorageCost(i)),swap:i=>this.appClient.params.call(w.swap(i)),addPool:i=>this.appClient.params.call(w.addPool(i)),removePool:i=>this.appClient.params.call(w.removePool(i)),stopSwap:(i={args:[]})=>this.appClient.params.call(w.stopSwap(i)),startSwap:(i={args:[]})=>this.appClient.params.call(w.startSwap(i)),setStopAuthority:i=>this.appClient.params.call(w.setStopAuthority(i)),setRebalancer:i=>this.appClient.params.call(w.setRebalancer(i)),getGasUsage:i=>this.appClient.params.call(w.getGasUsage(i)),setGasUsage:i=>this.appClient.params.call(w.setGasUsage(i)),setGasOracle:i=>this.appClient.params.call(w.setGasOracle(i)),getTransactionRelayerCost:i=>this.appClient.params.call(w.getTransactionRelayerCost(i)),transferOwnership:i=>this.appClient.params.call(w.transferOwnership(i))};createTransaction={clearState:i=>this.appClient.createTransaction.bare.clearState(i),optInAsset:i=>this.appClient.createTransaction.call(w.optInAsset(i)),noop:(i={args:[]})=>this.appClient.createTransaction.call(w.noop(i)),swapAndBridge:i=>this.appClient.createTransaction.call(w.swapAndBridge(i)),receiveTokens:i=>this.appClient.createTransaction.call(w.receiveTokens(i)),registerBridge:i=>this.appClient.createTransaction.call(w.registerBridge(i)),addBridgeToken:i=>this.appClient.createTransaction.call(w.addBridgeToken(i)),removeBridgeToken:i=>this.appClient.createTransaction.call(w.removeBridgeToken(i)),withdrawGasTokens:i=>this.appClient.createTransaction.call(w.withdrawGasTokens(i)),withdrawBridgingFeeInTokens:i=>this.appClient.createTransaction.call(w.withdrawBridgingFeeInTokens(i)),getBridgingCostInTokens:i=>this.appClient.createTransaction.call(w.getBridgingCostInTokens(i)),hashMessage:i=>this.appClient.createTransaction.call(w.hashMessage(i)),isOtherBridgeTokenSupported:i=>this.appClient.createTransaction.call(w.isOtherBridgeTokenSupported(i)),getTransactionCost:i=>this.appClient.createTransaction.call(w.getTransactionCost(i)),getReceiveTokensCost:(i={args:[]})=>this.appClient.createTransaction.call(w.getReceiveTokensCost(i)),getSendTransactionStorageCost:(i={args:[]})=>this.appClient.createTransaction.call(w.getSendTransactionStorageCost(i)),swap:i=>this.appClient.createTransaction.call(w.swap(i)),addPool:i=>this.appClient.createTransaction.call(w.addPool(i)),removePool:i=>this.appClient.createTransaction.call(w.removePool(i)),stopSwap:(i={args:[]})=>this.appClient.createTransaction.call(w.stopSwap(i)),startSwap:(i={args:[]})=>this.appClient.createTransaction.call(w.startSwap(i)),setStopAuthority:i=>this.appClient.createTransaction.call(w.setStopAuthority(i)),setRebalancer:i=>this.appClient.createTransaction.call(w.setRebalancer(i)),getGasUsage:i=>this.appClient.createTransaction.call(w.getGasUsage(i)),setGasUsage:i=>this.appClient.createTransaction.call(w.setGasUsage(i)),setGasOracle:i=>this.appClient.createTransaction.call(w.setGasOracle(i)),getTransactionRelayerCost:i=>this.appClient.createTransaction.call(w.getTransactionRelayerCost(i)),transferOwnership:i=>this.appClient.createTransaction.call(w.transferOwnership(i))};send={clearState:i=>this.appClient.send.bare.clearState(i),optInAsset:async i=>{let a=await this.appClient.send.call(w.optInAsset(i));return{...a,return:a.return}},noop:async(i={args:[]})=>{let a=await this.appClient.send.call(w.noop(i));return{...a,return:a.return}},swapAndBridge:async i=>{let a=await this.appClient.send.call(w.swapAndBridge(i));return{...a,return:a.return}},receiveTokens:async i=>{let a=await this.appClient.send.call(w.receiveTokens(i));return{...a,return:a.return}},registerBridge:async i=>{let a=await this.appClient.send.call(w.registerBridge(i));return{...a,return:a.return}},addBridgeToken:async i=>{let a=await this.appClient.send.call(w.addBridgeToken(i));return{...a,return:a.return}},removeBridgeToken:async i=>{let a=await this.appClient.send.call(w.removeBridgeToken(i));return{...a,return:a.return}},withdrawGasTokens:async i=>{let a=await this.appClient.send.call(w.withdrawGasTokens(i));return{...a,return:a.return}},withdrawBridgingFeeInTokens:async i=>{let a=await this.appClient.send.call(w.withdrawBridgingFeeInTokens(i));return{...a,return:a.return}},getBridgingCostInTokens:async i=>{let a=await this.appClient.send.call(w.getBridgingCostInTokens(i));return{...a,return:a.return}},hashMessage:async i=>{let a=await this.appClient.send.call(w.hashMessage(i));return{...a,return:a.return}},isOtherBridgeTokenSupported:async i=>{let a=await this.appClient.send.call(w.isOtherBridgeTokenSupported(i));return{...a,return:a.return}},getTransactionCost:async i=>{let a=await this.appClient.send.call(w.getTransactionCost(i));return{...a,return:a.return}},getReceiveTokensCost:async(i={args:[]})=>{let a=await this.appClient.send.call(w.getReceiveTokensCost(i));return{...a,return:a.return}},getSendTransactionStorageCost:async(i={args:[]})=>{let a=await this.appClient.send.call(w.getSendTransactionStorageCost(i));return{...a,return:a.return}},swap:async i=>{let a=await this.appClient.send.call(w.swap(i));return{...a,return:a.return}},addPool:async i=>{let a=await this.appClient.send.call(w.addPool(i));return{...a,return:a.return}},removePool:async i=>{let a=await this.appClient.send.call(w.removePool(i));return{...a,return:a.return}},stopSwap:async(i={args:[]})=>{let a=await this.appClient.send.call(w.stopSwap(i));return{...a,return:a.return}},startSwap:async(i={args:[]})=>{let a=await this.appClient.send.call(w.startSwap(i));return{...a,return:a.return}},setStopAuthority:async i=>{let a=await this.appClient.send.call(w.setStopAuthority(i));return{...a,return:a.return}},setRebalancer:async i=>{let a=await this.appClient.send.call(w.setRebalancer(i));return{...a,return:a.return}},getGasUsage:async i=>{let a=await this.appClient.send.call(w.getGasUsage(i));return{...a,return:a.return}},setGasUsage:async i=>{let a=await this.appClient.send.call(w.setGasUsage(i));return{...a,return:a.return}},setGasOracle:async i=>{let a=await this.appClient.send.call(w.setGasOracle(i));return{...a,return:a.return}},getTransactionRelayerCost:async i=>{let a=await this.appClient.send.call(w.getTransactionRelayerCost(i));return{...a,return:a.return}},transferOwnership:async i=>{let a=await this.appClient.send.call(w.transferOwnership(i));return{...a,return:a.return}}};clone(i){return new r(this.appClient.clone(i))}async getBridgingCostInTokens(i){return(await this.appClient.send.call(w.getBridgingCostInTokens(i))).return}async hashMessage(i){return(await this.appClient.send.call(w.hashMessage(i))).return}async isOtherBridgeTokenSupported(i){return(await this.appClient.send.call(w.isOtherBridgeTokenSupported(i))).return}async getTransactionCost(i){return(await this.appClient.send.call(w.getTransactionCost(i))).return}async getReceiveTokensCost(i={args:[]}){return(await this.appClient.send.call(w.getReceiveTokensCost(i))).return}async getSendTransactionStorageCost(i={args:[]}){return(await this.appClient.send.call(w.getSendTransactionStorageCost(i))).return}async getGasUsage(i){return(await this.appClient.send.call(w.getGasUsage(i))).return}async getTransactionRelayerCost(i){return(await this.appClient.send.call(w.getTransactionRelayerCost(i))).return}state={global:{getAll:async()=>{let i=await this.appClient.state.global.getAll();return{chainId:i.chainId,messenger:i.messenger,stopAuthority:i.stopAuthority,rebalancer:i.rebalancer,canSwap:i.canSwap,gasOracle:i.gasOracle,owner:i.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 i=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async i=>await this.appClient.state.box.getMapValue("processedMessages",i)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async i=>await this.appClient.state.box.getMapValue("sentMessages",i)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async i=>await this.appClient.state.box.getMapValue("otherBridges",i)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async i=>await this.appClient.state.box.getMapValue("otherBridgeTokens",i)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async i=>await this.appClient.state.box.getMapValue("pools",i)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async i=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",i)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async i=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",i)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async i=>await this.appClient.state.box.getMapValue("gasUsage",i)}}};newGroup(){let i=this,a=this.algorand.newGroup(),o=Promise.resolve(),s=[];return{optInAsset(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.optInAsset(d))),s.push(void 0),this},noop(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.noop(d))),s.push(void 0),this},swapAndBridge(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.swapAndBridge(d))),s.push(void 0),this},receiveTokens(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.receiveTokens(d))),s.push(void 0),this},registerBridge(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.registerBridge(d))),s.push(void 0),this},addBridgeToken(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.addBridgeToken(d))),s.push(void 0),this},removeBridgeToken(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.removeBridgeToken(d))),s.push(void 0),this},withdrawGasTokens(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.withdrawGasTokens(d))),s.push(void 0),this},withdrawBridgingFeeInTokens(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.withdrawBridgingFeeInTokens(d))),s.push(void 0),this},getBridgingCostInTokens(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.getBridgingCostInTokens(d))),s.push(A=>i.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",A)),this},hashMessage(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.hashMessage(d))),s.push(A=>i.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",A)),this},isOtherBridgeTokenSupported(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.isOtherBridgeTokenSupported(d))),s.push(A=>i.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",A)),this},getTransactionCost(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.getTransactionCost(d))),s.push(A=>i.decodeReturnValue("getTransactionCost(byte)uint64",A)),this},getReceiveTokensCost(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.getReceiveTokensCost(d))),s.push(A=>i.decodeReturnValue("getReceiveTokensCost()uint64",A)),this},getSendTransactionStorageCost(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.getSendTransactionStorageCost(d))),s.push(A=>i.decodeReturnValue("getSendTransactionStorageCost()uint64",A)),this},swap(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.swap(d))),s.push(void 0),this},addPool(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.addPool(d))),s.push(void 0),this},removePool(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.removePool(d))),s.push(void 0),this},stopSwap(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.stopSwap(d))),s.push(void 0),this},startSwap(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.startSwap(d))),s.push(void 0),this},setStopAuthority(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setStopAuthority(d))),s.push(void 0),this},setRebalancer(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setRebalancer(d))),s.push(void 0),this},getGasUsage(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.getGasUsage(d))),s.push(A=>i.decodeReturnValue("getGasUsage(byte)uint64",A)),this},setGasUsage(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setGasUsage(d))),s.push(void 0),this},setGasOracle(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setGasOracle(d))),s.push(void 0),this},getTransactionRelayerCost(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.getTransactionRelayerCost(d))),s.push(A=>i.decodeReturnValue("getTransactionRelayerCost(byte)uint64",A)),this},transferOwnership(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.transferOwnership(d))),s.push(void 0),this},clearState(d){return o=o.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,A){return o=o.then(()=>a.addTransaction(d,A)),this},async composer(){return await o,a},async simulate(d){await o;let A=await(d?a.simulate(d):a.simulate());return{...A,returns:A.returns?.map((u,b)=>s[b]!==void 0?s[b](u):u.returnValue)}},async send(d){await o;let A=await a.send(d);return{...A,returns:A.returns?.map((u,b)=>s[b]!==void 0?s[b](u):u.returnValue)}}}}};p();I();C();import{populateAppCallResources as cs}from"@algorandfoundation/algokit-utils";import ls,{ABIMethod as us,AtomicTransactionComposer as ms,makeBasicAccountTransactionSigner as ps}from"algosdk";var Cs=new us({name:"noop",args:[],returns:{type:"void"}});function Qt(r){let{composer:i,appId:a,sender:o,signer:s,count:d}=r;for(let A=0;A<d;A++)i.addAppCallMethodCall({appId:a,method:Cs,args:[],sender:o,signer:s,note:`noop_${A}`})}function Xt(r){return(r*1e3).microAlgos()}async function pa(r,i,a){let o=new ms,s=ps({addr:i,sk:new Uint8Array(64)});r.forEach(u=>{o.addTransaction({txn:u,signer:s})});let A=(await cs(o,a)).buildGroup().map(u=>u.txn);return bt(...A)}function bt(...r){return r.map(a=>ls.encodeUnsignedTransaction(a)).map(a=>Y.from(a).toString("hex"))}async function ai(r,i,a){typeof r=="string"&&(r=BigInt(r));let s=(await a.account.getInformation(i)).assets;return s?s.find(({assetId:A})=>A===r)!==void 0:!1}async function oi(r,i,a){typeof r=="string"&&(r=BigInt(r));let s=(await a.account.getInformation(i)).appsLocalState;return s?s.find(({id:A})=>A===r)!==void 0:!1}p();I();C();p();I();C();var we=class{};p();I();C();import{PublicKey as Is}from"@solana/web3.js";import{Address as bs}from"@stellar/stellar-sdk";import ys,{Address as hs}from"algosdk";import{Big as ke}from"big.js";import Bo from"randombytes";import{utils as Yo}from"tronweb";p();I();C();import{Big as H}from"big.js";import Ca from"bn.js";p();I();C();function Ia(r,i){return H(100).minus(H(100).times(i).div(r)).toNumber()}function St(r,i){return De(r,i,3).round(0,H.roundDown)}function Je(r,i){return De(r,3,i)}function De(r,i,a){let o=H(a).minus(i).toNumber();return H(r).times(hn(o))}function hn(r){return H(10).pow(r)}function O(r,i){return H(r).times(hn(i))}function z(r,i){let a=H(r);return a.eq(0)?H(0):H(a).div(hn(i))}function ve(r){return z(H(r.tokenBalance).minus(r.vUsdBalance).toFixed(),3).div(2).toFixed()}function st(r,{feeShare:i,decimals:a},o){let s=H(r);if(s.lte(0))return"0";let d=s.times(i),A=s.minus(d),u=St(A,a),b=H(o.tokenBalance).plus(u),y=dt(b,o.aValue,o.dValue);return H(o.vUsdBalance).minus(y).round(0,H.roundDown).toFixed()}function vn(r,{feeShare:i,decimals:a},o){let s=H(r);if(s.lte(0))return H(0).toFixed();let d=s.plus(o.vUsdBalance),A=dt(d,o.aValue,o.dValue),u=Je(H(o.tokenBalance).minus(A),a),b=H(u).times(i);return H(u).minus(b).round(0,H.roundDown).toFixed()}function Co(r,i){let a=H(r);if(a.lte(0))return i;let o=a.plus(i.vUsdBalance),s=dt(o,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:s.toFixed(0),vUsdBalance:o.toFixed(0)}}function Io(r,{feeShare:i,decimals:a},o){if(H(r).lte(0))return H(0);let s=H(o.vUsdBalance).minus(r);if(s.lte(0))throw new ut;let d=dt(s,o.aValue,o.dValue),A=H(d).minus(o.tokenBalance),u=Je(A,a),b=H(i).div(H(1).minus(i)),y=H(u).times(b).round(0,H.roundUp);return H(u).plus(y).round(0,H.roundDown)}function bo(r,{feeShare:i,decimals:a},o){if(H(r).lte(0))return H(0);let s=H(i).div(H(1).minus(i)),d=H(r).times(s).round(0,H.roundUp),A=H(r).plus(d),u=St(A,a),b=H(o.tokenBalance).minus(u);if(b.lte(0))throw new ut;let y=dt(b,o.aValue,o.dValue);return H(y).minus(o.vUsdBalance).round(0,H.roundDown)}function dt(r,i,a){let o=H(4).times(i).times(H(a).minus(r)).minus(a),s=H(a).pow(3),d=o.pow(2),A=H(r).times(H(r).times(d).plus(H(4).times(i).times(s))).sqrt().round(0,H.roundDown),u=H(8).times(i).times(r),b=o.times(r).plus(A).div(u).round(0,H.roundDown);return b.eq(0)?H(0):b.plus(1)}function yo(r,i,a,o){let s=new Ca(r),d=new Ca(a),A=new Ca(i);return s.mul(d).shrn(o).sub(A).toString()}function ho(r){return H(r).gt(0)?`${Number(H(r).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function vo(r,i,a){let o=H(i).times(a),s=H(i).plus(a),d=H(8).times(r).times(o).times(s),A=o.times(H(16).times(r).minus(4)).div(3),u=d.times(d),b=A.times(A).times(A),y=u.plus(b),v=H(y).sqrt(),R=H(Math.cbrt(+d.plus(v).toFixed())),F=H(Math.cbrt(+d.minus(v).toFixed()));return R.plus(F).toFixed()}function mt(r,i,a){let o;switch(i){case"EVM":{o=Ro(r);break}case"SOLANA":{o=new Is(r).toBuffer();break}case"TRX":{o=Ys(r);break}case"SRB":{o=new bs(r).toBuffer();break}case"SUI":{o=Ro(r);break}case"ALG":{o=vs(r);break}}switch(a){case"EVM":return"0x"+o.toString("hex");case"SOLANA":return Array.from(o);case"TRX":return o;case"SRB":return o.toJSON().data;case"SUI":return"0x"+o.toString("hex");case"ALG":return o}}function tt(r){return r.replace(/^0x/i,"")}function Wo(r){return Y.from(r.replace(/^0x/i,""),"hex")}function Ro(r){let a=Wo(r);return Y.concat([Y.alloc(32-a.length,0),a],32)}function vs(r){if(ys.isValidAddress(r))return Y.from(hs.fromString(r).publicKey);if(/^\d+$/.test(r)){let i=BigInt(r).toString(16);return i=i.padStart(64,"0"),Y.from(i,"hex")}throw new V(`Unexpected Alg address: ${r}`)}function Ys(r){let i=Yn(r),a=Wo(i);return Rs(a,32)}function Yn(r){let i=Yo.crypto.decodeBase58Address(r);return i?Yo.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function Rs(r,i){if(r.length>=i)return r;let a=Y.alloc(i,0);return r.copy(a,i-r.length),a}function Kt(){return Bo(32)}function At(){let r=Bo(32).readBigInt64BE();return r<0?r*-1n:r}function Ee(r,i){let a={},o=i.sourceToken;switch(a.amount=O(i.amount,o.decimals).toFixed(),a.contractAddress=o.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,r){case"SUI":{if(!o.originTokenAddress)throw new V("SUI sourceToken must contain 'originTokenAddress'");a.fromTokenAddress=o.originTokenAddress;break}case"ALG":{a.fromTokenAddress=o.tokenAddress;break}default:a.fromTokenAddress=mt(o.tokenAddress,r,r)}switch(a.toAccountAddress=i.toAccountAddress,r){case"SUI":{if(!i.destinationToken.originTokenAddress)throw new V("SUI destinationToken must contain 'originTokenAddress'");a.toTokenAddress=i.destinationToken.originTokenAddress;break}case"ALG":{a.toTokenAddress=i.destinationToken.tokenAddress;break}default:a.toTokenAddress=mt(i.destinationToken.tokenAddress,r,r)}return a.minimumReceiveAmount=i.minimumReceiveAmount?O(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function ze(r,i,a){let o={};o.fromChainId=i.sourceToken.allbridgeChainId,o.fromChainSymbol=i.sourceToken.chainSymbol;let s=E.getChainProperty(i.destinationToken.chainSymbol).chainType;if(r==="SUI"){if(!i.sourceToken.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");o.fromTokenAddress=i.sourceToken.originTokenAddress}else o.fromTokenAddress=i.sourceToken.tokenAddress;o.toChainId=i.destinationToken.allbridgeChainId,o.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?o.gasFeePaymentMethod="stablecoin":o.gasFeePaymentMethod="native";let d=i.sourceToken;switch(i.messenger){case 3:if(!d.cctpAddress||!i.destinationToken.cctpAddress)throw new Ne("Such route does not support CCTP protocol");o.contractAddress=d.cctpAddress;break;case 4:if(!d.cctpV2Address||!i.destinationToken.cctpV2Address)throw new Ne("Such route does not support CCTP V2 protocol");o.contractAddress=d.cctpV2Address;break;case 5:if(!d.oftBridgeAddress||!i.destinationToken.oftBridgeAddress||d.oftId!==i.destinationToken.oftId)throw new Te("Such route does not support OFT protocol");o.contractAddress=d.oftBridgeAddress;break;case 1:case 2:o.contractAddress=d.bridgeAddress;break}o.messenger=i.messenger,o.fromAccountAddress=i.fromAccountAddress,o.amount=O(i.amount,d.decimals).toFixed();let{fee:A,feeFormat:u}=i;if(!A){let R=(await ba(i.sourceToken,o.toChainId,o.messenger,a))[o.gasFeePaymentMethod];if(!R)throw new In;A=R.int,u="int"}if(u=="float")switch(o.gasFeePaymentMethod){case"native":o.fee=O(A,E.getChainDecimalsByType(d.chainType)).toFixed(0);break;case"stablecoin":o.fee=O(A,d.decimals).toFixed(0);break}else o.fee=A;let{extraGas:b,extraGasFormat:y}=i;if(b&&+b>0){let v=await ya(d,i.destinationToken,o.messenger,a),R,F;switch(o.gasFeePaymentMethod){case"native":R=E.getChainDecimalsByType(d.chainType),F=ke(v.exchangeRate);break;case"stablecoin":R=d.decimals,F=ke(v.exchangeRate).div(v.sourceNativeTokenPrice);break}switch(y??"int"){case"float":{o.extraGas=O(b,R).toFixed(0);let Z=F.mul(b);o.extraGasDest=O(Z,E.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,ke.roundDown);break}case"int":{o.extraGas=b;let Z=z(o.extraGas,E.getChainDecimalsByType(d.chainType)),X=F.mul(Z);o.extraGasDest=O(X,E.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,ke.roundDown);break}}Ws(o.extraGas,o.gasFeePaymentMethod,v)}return["SUI","ALG"].includes(r)||(o.fromTokenAddress=mt(o.fromTokenAddress,r,r)),o.toAccountAddress=mt(i.toAccountAddress,s,r),o.toTokenAddress=mt(o.toTokenAddress,s,r),o.gasFeePaymentMethod=="stablecoin"&&Bs(o.amount,d.decimals,o.fee,o.extraGas),o}function Bs(r,i,a,o){let s=ke(r).minus(a).minus(o??0);if(s.lte(0))throw new xt(`Amount not enough to pay fee, ${z(ke(s).minus(1).neg(),i).toFixed()} stables is missing`)}async function ba(r,i,a,o){let s=await o.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i,messenger:a,sourceToken:r.tokenAddress}),d={native:{int:s.fee,float:z(s.fee,E.getChainDecimalsByType(r.chainType)).toFixed()},adminFeeShareWithExtras:s.adminFeeShareWithExtras};if(s.sourceNativeTokenPrice){let A=De(new ke(s.fee).mul(s.sourceNativeTokenPrice),E.getChainDecimalsByType(r.chainType),r.decimals).toFixed(0,ke.roundUp);d.stablecoin={int:A,float:z(A,r.decimals).toFixed()}}return d}function Ws(r,i,a){let o=a.extraGasMax[i];if(!o)throw new In(`Impossible to pay extra gas by '${i}' payment method`);let s=o.int;if(ke(r).gt(s))throw new Dn(`Extra gas ${r} in int format, exceeded limit ${s} for '${i}' payment method`)}async function ya(r,i,a,o){let s={},d=await o.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:a,sourceToken:r.tokenAddress}),A=i.txCostAmount.maxAmount,u=z(A,E.getChainDecimalsByType(i.chainType)).toFixed(),b=ke(u).div(d.exchangeRate).toFixed(E.getChainDecimalsByType(r.chainType),ke.roundDown),y=O(b,E.getChainDecimalsByType(r.chainType)).toFixed(0);if(s.native={int:y,float:b},d.sourceNativeTokenPrice){let v=ke(b).mul(d.sourceNativeTokenPrice).toFixed(r.decimals,ke.roundDown);s.stablecoin={int:O(v,r.decimals).toFixed(0),float:v}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:A,float:u},swap:{int:i.txCostAmount.swap,float:z(i.txCostAmount.swap,E.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:z(i.txCostAmount.transfer,E.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:d.exchangeRate,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}function fo(r){return r.sourceToken.chainSymbol!==r.destinationToken.chainSymbol}var Rn=class extends we{constructor(a,o){super();this.algorand=a;this.api=o;a.setDefaultSigner(Zo.makeBasicAccountTransactionSigner(Zo.mnemonicToSecretKey("tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret")))}chainType="ALG";send(a){throw new ie}async buildRawTransactionSend(a){let o=await ze(this.chainType,a,this.api);if(!a.sourceToken.bridgeId)throw new V("ALG sourceToken must contain 'bridgeId'");let s=BigInt(a.sourceToken.bridgeId),d=this.getBridge(s),A=Go.fromString(a.fromAccountAddress),u=BigInt(a.sourceToken.tokenAddress),b=o.toChainId,y=o.toAccountAddress,v=o.toTokenAddress,R=Kt(),F=BigInt(o.amount),Z=BigInt(o.fee);o.extraGas&&(Z=Z+BigInt(o.extraGas));let X=o.gasFeePaymentMethod==="stablecoin",N=this.algorand.newGroup(),S,P;X?(S=Z,P=F+S):(N.addPayment({sender:A,receiver:d.appAddress,amount:fs.MicroAlgo(Z)}),S=0n,P=F),N.addAssetTransfer({assetId:u,amount:P,sender:A,receiver:d.appAddress}).addAppCallMethodCall(await d.params.swapAndBridge({args:{tokenId:u,recipient:y,destinationChainId:b,receiveToken:v,nonce:R,feeTokenAmount:S},sender:A,extraFee:Xt(X?9:8)})),Qt({composer:N,appId:s,sender:A,count:X?3:2});let{transactions:T}=await N.buildTransactions();return pa(T,A,this.algorand.client.algod)}async buildRawTransactionSwap(a){let o=Ee(this.chainType,a),s=Go.fromString(a.fromAccountAddress),d=a.toAccountAddress,A=BigInt(a.sourceToken.tokenAddress),u=BigInt(a.destinationToken.tokenAddress),b=BigInt(o.minimumReceiveAmount),y=BigInt(o.amount);if(!a.sourceToken.bridgeId)throw new V("ALG sourceToken must contain 'bridgeId'");let v=BigInt(a.sourceToken.bridgeId),R=this.getBridge(v),F=this.algorand.newGroup();a.fromAccountAddress===d&&(await ai(u,d,this.algorand)||F.addAssetOptIn({sender:s,assetId:u})),F.addAssetTransfer({assetId:A,amount:y,sender:s,receiver:R.appAddress}),F.addAppCallMethodCall(await R.params.swap({args:{tokenId:A,recipient:d,receiveTokenId:u,receiveAmountMin:b},sender:s,extraFee:Xt(4)})),Qt({composer:F,appId:v,sender:s,count:1});let{transactions:Z}=await F.buildTransactions();return pa(Z,s,this.algorand.client.algod)}getBridge(a){return this.algorand.client.getTypedAppClientById(ii,{appId:a})}};p();I();C();import{Big as Xs}from"big.js";p();I();C();var Zs={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"}]},Fo=Zs;p();I();C();var Gs={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:"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:"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"}]},No=Gs;p();I();C();var Fs={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"}]},To=Fs;p();I();C();import*as si from"@project-serum/anchor";import{PublicKey as jo}from"@solana/web3.js";p();I();C();import*as Be from"@project-serum/anchor";import{PublicKey as Xe}from"@solana/web3.js";async function nt(r,i){return Be.utils.token.associatedAddress({mint:i,owner:r})}async function ht(r){let[i]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("config")],r);return i}async function wo(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("lock"),Uint8Array.from(r)],i);return a}async function Bn(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([r])],i);return a}async function Ut(r){let i=await ht(r),[a]=await Xe.findProgramAddress([i.toBuffer()],r);return a}async function Xo(r,i){let[a]=await Xe.findProgramAddress([r.toBuffer()],i);return a}async function Dt(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("token"),r.toBytes()],i);return a}async function So(r,i,a){let[o]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("other_bridge_token"),Y.from([r]),i],a);return o}async function ha(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([r])],i);return a}async function va(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([r])],i);return a}async function Vo(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("sent_message"),r],i);return a}async function Ya(r,i,a){let[o]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),r.toBytes()],a);return o}async function Mo(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("cctp_bridge"),r.toBytes()],i);return a}async function Po(r,i){let[a]=await Xe.findProgramAddress([Be.utils.bytes.utf8.encode("token"),r.toBytes()],i);return a}function Lo(r,i){let[a]=Xe.findProgramAddressSync([Be.utils.bytes.utf8.encode("lock"),i.toBuffer()],r);return a}function Ho(r,i,a,o){let s=Vt("message_transmitter",a),d=Vt("token_messenger",o),A=Vt("__event_authority",o),u=Vt("token_minter",o),b=Vt("local_token",o,[i]),y=Vt("remote_token_messenger",o,[r.toString()]),v=Vt("sender_authority",o);return{messageTransmitterAccount:s,tokenMessenger:d,tokenMessengerEventAuthority:A,tokenMinter:u,localToken:b,remoteTokenMessengerKey:y,authorityPda:v}}function Vt(r,i,a=[]){let o=[Y.from(Be.utils.bytes.utf8.encode(r))];for(let d of a)typeof d=="string"?o.push(Y.from(Be.utils.bytes.utf8.encode(d))):Array.isArray(d)?o.push(Y.from(Uint8Array.from(d))):Y.isBuffer(d)?o.push(Y.from(Uint8Array.from(d))):o.push(Y.from(Uint8Array.from(d.toBuffer())));return Xe.findProgramAddressSync(o,i)[0]}p();I();C();import{AnchorProvider as Ns}from"@project-serum/anchor";import{Connection as Ts,PublicKey as ws}from"@solana/web3.js";function vt(r,i){let a=new Ts(r,"confirmed"),o=new ws(i);return new Ns(a,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function di(r,i,a,o){let s,d=new jo(i),A=new jo(a),u=await nt(d,A),b=vt(o,i);si.setProvider(b);let y=await si.Spl.token(b).account.token.fetchNullable(u);if(y?.authority.equals(d))s=mt(u.toBase58(),"SOLANA",r);else{let v=await b.connection.getTokenAccountsByOwner(d,{mint:A});if(v.value.length===0&&!y)s=mt(u.toBase58(),"SOLANA",r);else if(v.value.length>0){let R=v.value[0];if(!R?.pubkey)throw new V("First token account or its public key is undefined");s=mt(R.pubkey.toBase58(),"SOLANA",r)}else throw new V("Associated account has wrong owner")}return s}var Wn=class extends we{constructor(a,o,s){super();this.web3=a;this.api=o;this.nodeRpcUrlsConfig=s}chainType="EVM";async send(a){let o=await this.buildRawTransactionSend(a);return this.sendRawTransaction(o)}async buildRawTransactionSwap(a){let o=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(a){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:u,toTokenAddress:b,minimumReceiveAmount:y}=a,R=this.getBridgeContract(s).methods.swap(o,A,b,u,y);return Promise.resolve({from:d,to:s,data:R.encodeABI()})}async buildRawTransactionSend(a){let o=await ze(this.chainType,a,this.api),{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:v,messenger:R,fee:F,gasFeePaymentMethod:Z,extraGas:X,extraGasDest:N}=o,S="0x"+Kt().toString("hex"),P,T,L=F;switch(X&&(L=Xs(L).plus(X).toFixed()),R){case 3:case 4:{let j=await this.buildRawTransactionCctpSend(a,o,L);P=j.sendMethod,T=j.value;break}case 5:{let j=this.buildRawTransactionOftSend(a,o,L,N);P=j.sendMethod,T=j.value;break}case 1:case 2:{let j=this.getBridgeContract(d);Z==="stablecoin"?(P=j.methods.swapAndBridge(u,s,y,b,v,S,R,L),T="0"):(P=j.methods.swapAndBridge(u,s,y,b,v,S,R,0),T=L)}break}return Promise.resolve({from:A,to:d,value:T,data:P.encodeABI()})}async buildRawTransactionCctpSend(a,o,s){let{amount:d,contractAddress:A,toChainId:u,toAccountAddress:b,gasFeePaymentMethod:y}=o,v=this.getCctpBridgeContract(A),R,F;if(a.destinationToken.chainType==="SOLANA"){let Z=await di(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));y==="stablecoin"?(R=v.methods.bridgeWithWalletAddress(d,Z,b,u,s),F="0"):(R=v.methods.bridgeWithWalletAddress(d,Z,b,u,0),F=s)}else y==="stablecoin"?(R=v.methods.bridge(d,b,u,s),F="0"):(R=v.methods.bridge(d,b,u,0),F=s);return{sendMethod:R,value:F}}buildRawTransactionOftSend(a,o,s,d){let{amount:A,contractAddress:u,toChainId:b,toAccountAddress:y,gasFeePaymentMethod:v}=o,R=this.getOftBridgeContract(u),F,Z;return v==="stablecoin"?(F=R.methods.bridge(a.sourceToken.tokenAddress,A,y,b,s,d??"0","10"),Z="0"):(F=R.methods.bridge(a.sourceToken.tokenAddress,A,y,b,0,d??"0","10"),Z=s),{sendMethod:F,value:Z}}async sendRawTransaction(a){let o=await this.web3.eth.estimateGas(a),s={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:d}=await this.web3.eth.sendTransaction({...a,gas:o,...s});return{txId:d.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(Fo.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(No.abi,a)}getOftBridgeContract(a){return new this.web3.eth.Contract(To.abi,a)}};p();I();C();var Ai=class{constructor(i,a,o,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o;this.tokenService=s}async approve(i,a){let o,s;a?(o=i,s=a):s=i;let d=fn(s.token,s.messenger);return this.tokenService.buildRawTransactionApprove({...s,spender:d},o)}async send(i,a){return _(i.amount),ee("amount",i.amount,i.sourceToken.decimals),fo(i)?gi(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):gi(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};p();I();C();import{BN as $t,Program as Wa,Spl as zs,web3 as Yt}from"@project-serum/anchor";import{Keypair as $o,PublicKey as de,SystemProgram as xs}from"@solana/web3.js";import{Big as it}from"big.js";p();I();C();var Zn={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{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:"PoolInfo 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"}]};p();I();C();var Jo={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};p();I();C();import{Spl as Ss}from"@project-serum/anchor";import Vs from"big.js";import{Web3 as ci}from"web3";async function Et(r,i){return await Ss.token(i).account.token.fetch(r)}async function ko(r,i,a){let o=await i.account.pool.fetch(a),s=o.decimals,d=Vs(o.feeShareBp.toString()).div(1e4).toFixed(),A={aValue:o.a.toString(),dValue:o.d.toString(),totalLpAmount:o.totalLpAmount.toString(),tokenBalance:o.tokenBalance.toString(),vUsdBalance:o.vUsdBalance.toString(),accRewardPerShareP:o.accRewardPerShareP.toString()};return st(r,{decimals:s,feeShare:d},A)}function zo(r){let i=r.amount,a="0x"+r.recipient.toString("hex"),o=r.sourceChainId,s=r.destinationChainId,d="0x"+r.receiveToken.toString("hex"),A="0x"+r.nonce.toString("hex"),u=1,b="0x"+r.chainBridge.toString("hex"),y=ci.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:o},{t:"bytes32",v:d},{t:"uint256",v:A},{t:"uint8",v:u});if(!y)throw new V("message cannot be undefined");let v=ci.utils.keccak256(Y.from(y.replace("0x",""),"hex")),R=Y.from(v.replace("0x",""),"hex");R[0]=o,R[1]=s;let F=ci.utils.encodePacked({t:"bytes32",v:"0x"+R.toString("hex")},{t:"bytes32",v:b});if(!F)throw new Ot("messageWithSigner cannot be undefined");let Z=ci.utils.keccak256(Y.from(F.replace("0x",""),"hex")),X=Y.from(Z.replace("0x",""),"hex");return X[0]=R[0],X[1]=R[1],X}p();I();C();import{ComputeBudgetInstruction as Oo,ComputeBudgetProgram as li,Connection as Qo,TransactionMessage as Ms}from"@solana/web3.js";import{Big as Ps}from"big.js";p();I();C();import{AddressLookupTableAccount as xo}from"@solana/web3.js";async function Mt(r,i){return await Promise.all(r.message.addressTableLookups.map(async a=>new xo({key:a.accountKey,state:xo.deserialize(await i.getAccountInfo(a.accountKey).then(o=>{if(!o)throw new V("Cannot get AccountInfo");return o.data}))})))}p();I();C();p();I();C();var Ra="AUTO";async function _t(r,i,a){let o=new Qo(a,"confirmed"),s=(await o.simulateTransaction(r)).value.unitsConsumed;await Uo(r.instructions,s,i,o)}async function Ko(r,i,a){let o=new Qo(a,"confirmed"),s=await Mt(r,o),d=Ms.decompile(r.message,{addressLookupTableAccounts:s});if(r.serialize().length>1232)throw new qn;await Uo(d.instructions,769230,i,o),r.message=d.compileToV0Message(s)}async function Uo(r,i,a,o){if(i>0){let s=Ls(i,r);if(a?.solana){let d=a.solana;if(d===Ra)await Ba(r,o);else if("pricePerUnitInMicroLamports"in d)await Ba(r,o,d.pricePerUnitInMicroLamports);else{let A=Ps(d.extraFeeInLamports).div(s).mul(hn(6)).toFixed(0);await Ba(r,o,A)}}}}function Ls(r,i){let a=i.findIndex(d=>d.programId.equals(li.programId)&&Oo.decodeInstructionType(d)==="SetComputeUnitLimit"),o=Number((r*1.3).toFixed(0)),s=li.setComputeUnitLimit({units:o});return a>=0?i[a]=s:i.push(s),o.toString()}async function Ba(r,i,a){let o=r.findIndex(A=>A.programId.equals(li.programId)&&Oo.decodeInstructionType(A)==="SetComputeUnitPrice"),s=BigInt(a||await Hs(i)),d=li.setComputeUnitPrice({microLamports:s});return o>=0?r[o]=d:r.push(d),s.toString()}async function Hs(r){let i=await r.getRecentPrioritizationFees(),a=0;for(let o of i)a+=o.prioritizationFee;return(a/i.length).toFixed(0)}p();I();C();import{NATIVE_MINT as js}from"@solana/spl-token";import{Connection as Js,TransactionMessage as Do,VersionedTransaction as ks}from"@solana/web3.js";import Eo,{AxiosError as _o}from"axios";var ui=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(i,a){this.connection=new Js(i),this.jupiterUrl=a.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=a.jupiterApiKeyHeader,this.maxAccounts=a.jupiterMaxAccounts}async getJupiterSwapTx(i,a,o,s){let d;try{let R=s?"ExactOut":"ExactIn",F=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${js.toString()}&amount=${o}&swapMode=${R}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(F+=`&maxAccounts=${this.maxAccounts}`),d=await Eo.get(F,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(R){throw R instanceof _o&&R.response&&R.response.data&&R.response.data.error?new Re(R.response.data.error):new Re("Cannot get route")}let A;if(s&&d?.data?.inAmount)A=d.data.inAmount;else if(s)throw new Re("Cannot get inAmount");let u;try{u=await Eo.post(`${this.jupiterUrl}/swap`,{quoteResponse:d.data,userPublicKey:i,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(R){throw R instanceof _o&&R.response&&R.response.data&&R.response.data.error?new Re(R.response.data.error):new Re("Cannot get swap transaction")}let b;if(u?.data?.swapTransaction)b=u.data.swapTransaction;else throw new Re("Cannot get swap transaction");let y=Y.from(b,"base64"),v=ks.deserialize(y);return s?{tx:v,amountIn:A}:{tx:v}}async amendJupiterWithSdkTx(i,a){try{let o=await Mt(i,this.connection),s=await Mt(a,this.connection),d=Do.decompile(i.message,{addressLookupTableAccounts:o}),A=Do.decompile(a.message,{addressLookupTableAccounts:s});if(A.instructions.shift(),d.instructions.push(...A.instructions),o.push(...s),i.message=d.compileToV0Message(o),a.message.header.numRequiredSignatures===2&&i.signatures.length===1){let u=a.signatures[0];if(!u)throw new V("Signature is undefined");i.signatures.push(u)}return i}catch(o){throw o instanceof Error&&o.message?new Re(`Some error occurred during creation final swap and bridge transaction. ${o.message}`):new Re("Some error occurred during creation final swap and bridge transaction")}}};var fa=1e6,qo=1.1,mi=class extends we{constructor(a,o,s){super();this.solanaRpcUrl=a;this.params=o;this.api=s;this.jupiterService=new ui(a,o.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(a){let o=Ee(this.chainType,a);return await this.buildSwapTransaction(o,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,o,s,d){let{fromAccountAddress:A,amount:u,contractAddress:b,fromTokenAddress:y,toTokenAddress:v,toAccountAddress:R,minimumReceiveAmount:F}=a,Z=A,X=b,N=y,S=v,P=s,T=R,L=new de(Z),j=vt(this.solanaRpcUrl,L.toString()),x=new Wa(Zn,X,j),D=await Ut(x.programId),Ze=await ht(x.programId),me=new de(N),xe=await Dt(me,x.programId),Oe=new de(o),qe=await nt(L,me),Pe=new de(T),he=new de(S),Ge=await Dt(he,x.programId),Le=new de(P),Fe=await nt(Pe,he),Qe=[Yt.ComputeBudgetProgram.setComputeUnitLimit({units:fa})];try{await Et(Fe,j)}catch{let xn=await zs.associatedToken(j).methods.create().accounts({mint:he,owner:Pe,associatedAccount:Fe}).instruction();Qe.push(xn)}let Ke=await x.methods.swap(new $t(u),new $t(F||0)).accounts({payer:L,config:Ze,bridgeAuthority:D,user:L,sendBridgeToken:xe,sendMint:me,sendPool:Oe,sendUserToken:qe,receiveBridgeToken:Ge,receiveMint:he,receivePool:Le,receiveUserToken:Fe}).preInstructions(Qe).transaction(),He=j.connection;return Ke.recentBlockhash=(await He.getLatestBlockhash()).blockhash,Ke.feePayer=L,await _t(Ke,d,this.solanaRpcUrl),await this.convertToVersionedTransaction(Ke,He)}async buildRawTransactionSend(a){let o=await ze(this.chainType,a,this.api),s=this.addPoolAddress(a,o),d=s.gasFeePaymentMethod=="stablecoin",A;if(d)try{let{tx:y,solTxSendUpdatedParams:v}=await this.processJup(s,a,!0);A=y,s={...s,...v}}catch{try{let{tx:v,solTxSendUpdatedParams:R}=await this.processJup(s,a,!1);A=v,s={...s,...R}}catch(v){throw v instanceof ce?v:v instanceof Error&&v.message?new Re(`Some error occurred during creation Jupiter swap transaction. ${v.message}`):new Re("Some error occurred during creation Jupiter swap transaction")}}let u,b;switch(o.messenger){case 1:{let y=await this.prepareSwapAndBridgeData(s);u=await this.buildSwapAndBridgeAllbridgeTransaction(y);break}case 2:{let y=await this.prepareSwapAndBridgeData(s),{transaction:v,messageAccount:R}=await this.buildSwapAndBridgeWormholeTransaction(y);u=v,b=R;break}case 3:case 4:{let y=await this.prepareSwapAndBridgeCctpData(s),{transaction:v,messageSentEventDataKeypair:R}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,y);u=v,b=R;break}case 5:throw new Te("Messenger OFT is not supported yet.")}if(d){if(!A)throw new Re("Swap tx is absent");u=await this.jupiterService.amendJupiterWithSdkTx(A,u)}return await Ko(u,a.txFeeParams,this.solanaRpcUrl),b&&u.sign([b]),u}async processJup(a,o,s){let{fee:d,extraGas:A,gasFeePaymentMethod:u}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(o.sourceToken,a),b=s?it(d):it(a.fee);A&&(b=b.plus(A)),s||(b=b.mul(qo));let{tx:y,amountIn:v}=await this.jupiterService.getJupiterSwapTx(o.fromAccountAddress,o.sourceToken.tokenAddress,b.toFixed(0),s),R;if(s){if(!v)throw new Re("Cannot get inAmount");R=it(a.amount).minus(it(v).mul(qo)).toFixed(0)}else R=it(a.amount).minus(b).toFixed(0);if(it(R).lte(0))throw new xt(`Amount not enough to pay fee, ${z(it(R).minus(1).neg(),o.sourceToken.decimals).toFixed()} stables is missing`);return{tx:y,solTxSendUpdatedParams:{amount:R,fee:d,extraGas:A,gasFeePaymentMethod:u}}}addPoolAddress(a,o){return{...o,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,o){if(o.gasFeePaymentMethod=="stablecoin"){let s=(await this.api.getReceiveTransactionCost({sourceChainId:o.fromChainId,destinationChainId:o.toChainId,messenger:o.messenger,sourceToken:a.tokenAddress})).sourceNativeTokenPrice,d=it(o.fee).div(s).mul(it(10).pow(E.getChainDecimalsByType("SOLANA")-a.decimals)).toFixed(0),A;return o.extraGas&&(A=it(o.extraGas).div(s).mul(it(10).pow(E.getChainDecimalsByType("SOLANA")-a.decimals)).toFixed(0)),{fee:d,extraGas:A,gasFeePaymentMethod:"native"}}return{fee:o.fee,extraGas:o.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,o,s){return Yt.SystemProgram.transfer({fromPubkey:o,toPubkey:s,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:o,contractAddress:s,fromChainId:d,fromAccountAddress:A,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:v,poolAddress:R,extraGas:F}=a,Z=u,X=A,N=b,S=v,P=y,T=s,L=d,j=vt(this.solanaRpcUrl,X),x=new Wa(Zn,T,j),D=Array.from(Kt()),Ze=new de(R),me=await ko(o,x,Ze),xe=await wo(D,x.programId),Oe=await Ut(x.programId),qe=await nt(new de(X),new de(Z)),Pe=await Dt(new de(Z),x.programId),he=await ha(N,x.programId),Ge=await So(N,Y.from(S),x.programId),Le=await ht(x.programId),Fe=await x.account.config.fetch(Le),Qe=await Bn(N,Fe.gasOracleProgramId),Ke=await Bn(L,Fe.gasOracleProgramId),He=zo({amount:me,recipient:Y.from(P),nonce:Y.from(D),receiveToken:Y.from(S),destinationChainId:N,sourceChainId:L,chainBridge:(await Ut(x.programId)).toBuffer()}),J={};return J.bridge=x,J.amount=new $t(o),J.vusdAmount=new $t(me),J.nonce=D,J.recipient=Array.from(P),J.receiveToken=Array.from(S),J.poolAccount=Ze,J.lockAccount=xe,J.bridgeAuthority=Oe,J.userToken=qe,J.bridgeTokenAccount=Pe,J.chainBridgeAccount=he,J.otherBridgeTokenAccount=Ge,J.userAccount=new de(X),J.destinationChainId=N,J.mint=new de(Z),J.config=Le,J.configAccountInfo=Fe,J.gasPrice=Qe,J.thisGasPrice=Ke,J.message=He,F&&(J.extraGasInstruction=this.getExtraGasInstruction(F,J.userAccount,Le)),J}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:o,vusdAmount:s,nonce:d,recipient:A,receiveToken:u,poolAccount:b,lockAccount:y,bridgeAuthority:v,userToken:R,bridgeTokenAccount:F,chainBridgeAccount:Z,otherBridgeTokenAccount:X,userAccount:N,destinationChainId:S,mint:P,config:T,configAccountInfo:L,gasPrice:j,thisGasPrice:x,message:D,extraGasInstruction:Ze}=a,me=L.allbridgeMessengerProgramId,xe=await va(S,me),Oe=await ht(me),qe=await Vo(D,me),Pe=[];Ze&&Pe.push(Ze);let he=await o.methods.swapAndBridge({vusdAmount:s,nonce:d,destinationChainId:S,recipient:A,receiveToken:u}).accounts({mint:P,user:N,config:T,lock:y,pool:b,gasPrice:j,thisGasPrice:x,bridgeAuthority:v,userToken:R,bridgeToken:F,chainBridge:Z,messenger:me,messengerGasUsage:xe,messengerConfig:Oe,sentMessageAccount:qe,otherBridgeToken:X}).preInstructions([Yt.ComputeBudgetProgram.setComputeUnitLimit({units:fa})]).postInstructions(Pe).transaction(),Ge=vt(this.solanaRpcUrl,N.toString()).connection;return he.recentBlockhash=(await Ge.getLatestBlockhash()).blockhash,he.feePayer=N,await this.convertToVersionedTransaction(he,Ge)}async convertToVersionedTransaction(a,o){let s=await o.getAddressLookupTable(new de(this.params.solanaLookUpTable)).then(A=>A.value);if(!s)throw new V("Cannot find allbridgeLookupTableAccount");let d=new Yt.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([s]);return new Yt.VersionedTransaction(d)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:o,vusdAmount:s,nonce:d,recipient:A,receiveToken:u,poolAccount:b,lockAccount:y,bridgeAuthority:v,userToken:R,bridgeTokenAccount:F,chainBridgeAccount:Z,otherBridgeTokenAccount:X,userAccount:N,destinationChainId:S,mint:P,config:T,configAccountInfo:L,gasPrice:j,thisGasPrice:x,message:D,extraGasInstruction:Ze}=a,me=this.params.wormholeMessengerProgramId,[xe]=de.findProgramAddressSync([Y.from("Bridge")],new de(me)),[Oe]=de.findProgramAddressSync([Y.from("fee_collector")],new de(me)),[qe]=de.findProgramAddressSync([Y.from("Sequence"),v.toBuffer()],new de(me)),Pe=await va(S,L.wormholeMessengerProgramId),he=await ht(L.wormholeMessengerProgramId),Ge=$o.generate(),Le=vt(this.solanaRpcUrl,N.toString()),Fe=await Le.connection.getAccountInfo(xe);if(Fe==null)throw new V("Cannot fetch wormhole bridge account info");let Qe=new $t(Fe.data.slice(16,24),"le").toString(),Ke=xs.transfer({fromPubkey:N,toPubkey:Oe,lamports:+Qe}),He=[];Ze&&He.push(Ze);let J={mint:P,user:N,config:T,lock:y,pool:b,gasPrice:j,thisGasPrice:x,bridgeAuthority:v,userToken:R,bridgeToken:F,chainBridge:Z,otherBridgeToken:X,messengerGasUsage:Pe,wormholeProgram:me,bridge:xe,message:Ge.publicKey,wormholeMessenger:L.wormholeMessengerProgramId,sequence:qe,feeCollector:Oe,wormholeMessengerConfig:he,clock:Yt.SYSVAR_CLOCK_PUBKEY},Ce=await o.methods.swapAndBridgeWormhole({vusdAmount:s,nonce:d,destinationChainId:S,recipient:A,receiveToken:u}).accounts(J).preInstructions([Yt.ComputeBudgetProgram.setComputeUnitLimit({units:fa}),Ke]).postInstructions(He).signers([Ge]).transaction();return Ce.recentBlockhash=(await Le.connection.getLatestBlockhash()).blockhash,Ce.feePayer=N,{transaction:await this.convertToVersionedTransaction(Ce,Le.connection),messageAccount:Ge}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:o,amount:s,fromAccountAddress:d,fromTokenAddress:A,toChainId:u,toAccountAddress:b,toTokenAddress:y,extraGas:v}=a,R=o;if(!R)throw new Ne("Such route does not support CCTP protocol");let F=4,Z=d,X=y,N=b,S=vt(this.solanaRpcUrl,Z),P=new Wa(Jo,R,S),T=new de(A),L=await Mo(T,P.programId),j=new de(Z),x=await P.account.cctpBridge.fetch(L),D={};return D.cctpBridge=P,D.cctpBridgeAccount=L,D.cctpAddressAccount=new de(R),D.amount=new $t(s),D.recipient=Array.from(N),D.receiveToken=Array.from(X),D.userToken=await nt(j,T),D.bridgeAuthority=await Xo(L,P.programId),D.bridgeTokenAccount=await Po(T,P.programId),D.chainBridgeAccount=await ha(u,P.programId),D.userAccount=j,D.destinationChainId=u,D.mint=T,D.gasPrice=await Bn(u,x.gasOracleProgramId),D.thisGasPrice=await Bn(F,x.gasOracleProgramId),D.provider=S,v&&(D.extraGasInstruction=this.getExtraGasInstruction(v,D.userAccount,L)),D}async buildSwapAndBridgeCctpTransaction(a,o){let{cctpBridge:s,cctpBridgeAccount:d,amount:A,recipient:u,receiveToken:b,bridgeAuthority:y,userToken:v,bridgeTokenAccount:R,chainBridgeAccount:F,userAccount:Z,destinationChainId:X,mint:N,gasPrice:S,thisGasPrice:P,extraGasInstruction:T,provider:L}=o,j=this.params.cctpParams.cctpDomains[a],x=this.params.cctpParams.cctpTransmitterProgramId,D=this.params.cctpParams.cctpTokenMessengerMinter;if(j==null||!x||!D)throw new V("CCTP is not configured");let Ze=new de(x),me=new de(D),{messageTransmitterAccount:xe,tokenMessenger:Oe,tokenMessengerEventAuthority:qe,tokenMinter:Pe,localToken:he,remoteTokenMessengerKey:Ge,authorityPda:Le}=Ho(j,N,Ze,me),Fe=[];T&&Fe.push(T);let Qe=$o.generate(),Ke=Lo(s.programId,Qe.publicKey),He=await s.methods.bridge({amount:A,destinationChainId:X,recipient:u,receiveToken:b}).accounts({mint:N,user:Z,cctpBridge:d,messageSentEventData:Qe.publicKey,lock:Ke,cctpMessenger:me,messageTransmitterProgram:Ze,messageTransmitterAccount:xe,tokenMessenger:Oe,tokenMinter:Pe,localToken:he,remoteTokenMessengerKey:Ge,authorityPda:Le,eventAuthority:qe,bridgeToken:R,gasPrice:S,thisGasPrice:P,chainBridge:F,userToken:v,bridgeAuthority:y}).preInstructions([Yt.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Fe).transaction(),J=L.connection;return He.recentBlockhash=(await J.getLatestBlockhash()).blockhash,He.feePayer=Z,{transaction:await this.convertToVersionedTransaction(He,J),messageSentEventDataKeypair:Qe}}send(a){throw new ie}};p();I();C();import{Address as Za,contract as uw}from"@stellar/stellar-sdk";import{Big as Ks}from"big.js";p();I();C();import{contract as n}from"@stellar/stellar-sdk";var Os=n.Spec,Qs=n.Client;var Gn=class extends Qs{constructor(a){super(new Os(["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"]),a);this.options=a}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 pi=class extends we{constructor(a,o,s){super();this.nodeRpcUrlsConfig=a;this.params=o;this.api=s}chainType="SRB";async buildRawTransactionSend(a){let o=await ze(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(o)}async buildRawTransactionSendFromParams(a){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toChainId:u,toAccountAddress:b,toTokenAddress:y,fee:v,gasFeePaymentMethod:R,extraGas:F}=a,Z=v;F&&(Z=Ks(Z).plus(F).toFixed());let X=this.getContract(Gn,s,d),N;return R==="stablecoin"?N=await X.swap_and_bridge({sender:d,token:Za.contract(Y.from(A)).toString(),amount:BigInt(o),recipient:Y.from(b),destination_chain_id:+u,receive_token:Y.from(y),nonce:At(),gas_amount:BigInt(0),fee_token_amount:BigInt(Z)}):N=await X.swap_and_bridge({sender:d,token:Za.contract(Y.from(A)).toString(),amount:BigInt(o),recipient:Y.from(b),destination_chain_id:+u,receive_token:Y.from(y),nonce:At(),gas_amount:BigInt(Z),fee_token_amount:BigInt(0)}),N.toXDR()}async buildRawTransactionSwap(a){let o=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(a){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:u,toTokenAddress:b,minimumReceiveAmount:y}=a;return(await this.getContract(Gn,s,d).swap({sender:d,amount:BigInt(o),token:Za.contract(Y.from(A)).toBuffer(),receive_token:Y.from(b),recipient:u,receive_amount_min:BigInt(y)})).toXDR()}send(a){throw new ie}getContract(a,o,s){let d={publicKey:s,contractId:o,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(d)}};p();I();C();import{SuiClient as rd}from"@mysten/sui/client";import{coinWithBalance as ue,Transaction as Ha}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as mr}from"@mysten/sui/utils";import{Big as ja}from"big.js";var Ja=et(Rt());p();I();C();var pt=et(Rt());Ye();function nr(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:i,arguments:[Q(r,a.bridge),Q(r,a.coin),_e(r,a.receiveAmountMin,"u64")]})}function ir(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[i],arguments:[Q(r,a.bridge),Q(r,a.userDeposit),Q(r,a.coin)]})}function ar(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[i],arguments:[Q(r,a.bridge),Q(r,a.userDeposit),_e(r,a.amountLp,"u64")]})}function or(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[i],arguments:[Q(r,a.bridge),Q(r,a.userDeposit)]})}function rr(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[i],arguments:[Q(r,a)]})}function Fa(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[i],arguments:[Q(r,a.bridge),Q(r,a.messenger),Q(r,a.wormholeState),Q(r,a.theClock),Q(r,a.gasOracle),Q(r,a.amount),Q(r,a.recipient),_e(r,a.destinationChainId,"u8"),Q(r,a.receiveToken),_e(r,a.nonce,"u256"),Q(r,a.feeSuiCoin),Q(r,a.feeTokenCoin)]})}function sr(r,i){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[i],arguments:[]})}function Na(r,i,a){return r.moveCall({target:`${pt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[i],arguments:[Q(r,a.bridge),Q(r,a.messenger),Q(r,a.gasOracle),Q(r,a.amount),Q(r,a.recipient),_e(r,a.destinationChainId,"u8"),Q(r,a.receiveToken),_e(r,a.nonce,"u256"),Q(r,a.feeSuiCoin),Q(r,a.feeTokenCoin)]})}var pr=et(wa());p();I();C();var Ar=et(wa());Ye();function Xa(r,i,a){return r.moveCall({target:`${Ar.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[i],arguments:[Q(r,a.cctpBridge),Q(r,a.gasOracle),Q(r,a.tokenMessengerMinterState),Q(r,a.messageTransmitterState),Q(r,a.treasury),Q(r,a.denyList),Q(r,a.amount),Q(r,a.feeSuiCoin),Q(r,a.feeTokenCoin),_e(r,a.destinationChainId,"u8"),Q(r,a.recipient),Q(r,a.recipientWalletAddress)]})}var Cr=et(Va());p();I();C();var ur=et(Va());p();I();C();p();I();C();Ye();import{bcs as Bt}from"@mysten/sui/bcs";import{fromHEX as ed,toHEX as td}from"@mysten/sui/utils";p();I();C();import{bcs as qs}from"@mysten/sui/bcs";Ye();var Ma=class r{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(i,a){this.$fullTypeName=ne(this.$typeName,...i),this.$typeArgs=i,this.elements=a}static reified(i){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName,K(i)),typeArgs:[K(i)],isPhantom:r.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>r.fromFields(i,a),fromFieldsWithTypes:a=>r.fromFieldsWithTypes(i,a),fromBcs:a=>r.fromBcs(i,a),bcs:r.bcs(Fn(i)),fromJSONField:a=>r.fromJSONField(i,a),fromJSON:a=>r.fromJSON(i,a),new:a=>new r([K(i)],a),kind:"VectorClassReified"}}static get r(){return r.reified}static get bcs(){return qs.vector}static fromFields(i,a){return r.reified(i).new(a.map(o=>te(i,o)))}static fromFieldsWithTypes(i,a){return r.reified(i).new(a.map(o=>$(i,o)))}static fromBcs(i,a){return r.fromFields(i,r.bcs(Fn(i)).parse(a))}toJSONField(){return this.elements.map(i=>Pt(this.$typeArgs[0],i))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(i,a){return r.reified(i).new(a.map(o=>q(i,o)))}static fromJSON(i,a){if(a.$typeName!==r.$typeName)throw new Error("not a vector json object");return r.fromJSONField(i,a.elements)}};function qt(r){return Ma.r(r)}function le(r){return typeof r=="string"?{phantomType:r,kind:"PhantomReified"}:{phantomType:r.fullTypeName,kind:"PhantomReified"}}var nd=Bt.bytes(32).transform({input:r=>ed(r),output:r=>td(r)});function Fn(r){switch(r){case"bool":return Bt.bool();case"u8":return Bt.u8();case"u16":return Bt.u16();case"u32":return Bt.u32();case"u64":return Bt.u64();case"u128":return Bt.u128();case"u256":return Bt.u256();case"address":return nd;default:return r.bcs}}function K(r){switch(r){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return r}switch(r.kind){case"PhantomReified":return r.phantomType;case"StructClassReified":return r.fullTypeName;case"VectorClassReified":return r.fullTypeName}throw new Error("unreachable")}function te(r,i){switch(r){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return`0x${i}`}if(r.kind==="VectorClassReified")return r.fromFields(i).elements;switch(r.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(i.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(i.url.bytes)).toString();case"0x2::object::ID":return`0x${i.bytes}`;case"0x2::object::UID":return`0x${i.id.bytes}`;case"0x1::option::Option":return i.vec.length===0?null:r.fromFields(i).vec[0];default:return r.fromFields(i)}}function $(r,i){switch(r){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(r.kind==="VectorClassReified")return r.fromFieldsWithTypes(i).elements;switch(r.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return i;case"0x2::object::UID":return i.id;case"0x2::balance::Balance":return r.fromFields({value:BigInt(i)});case"0x1::option::Option":return i===null?null:$(r.reifiedTypeArgs[0],i);default:return r.fromFieldsWithTypes(i)}}function at(r,i,a){if(a.length!==i.length)throw new Error(`provided item has mismatching number of type argments ${r} (expected ${a.length}, got ${i.length}))`);for(let o=0;o<i.length;o++)if(k(i[o])!==k(K(a[o])))throw new Error(`provided item has mismatching type argments ${r} (expected ${K(a[o])}, got ${i[o]}))`)}function gt(r,i){let{typeArgs:a}=We(r.type);at(r.type,a,i)}function Pt(r,i){let{typeName:a,typeArgs:o}=We(r);switch(a){case"bool":return i;case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return i.toString();case"address":case"signer":return i;case"vector":return i.map(s=>Pt(o[0],s));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:Pt(o[0],i);default:return i.toJSONField()}}function q(r,i){switch(r){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(r.kind==="VectorClassReified")return r.fromJSONField(i).elements;switch(r.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:q(r.reifiedTypeArgs[0],i);default:return r.fromJSONField(i)}}Ye();p();I();C();var Ci="0x1";import{bcs as qC}from"@mysten/sui/bcs";import{fromB64 as tI}from"@mysten/sui/utils";p();I();C();Ye();import{bcs as Pa}from"@mysten/sui/bcs";import{fromB64 as id}from"@mysten/sui/utils";function Ii(r){return r=k(r),r===`${Ci}::string::String`}var bi=class r{__StructClass=!0;static get $typeName(){return`${Ci}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;bytes;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.bytes=a.bytes}static reified(){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName),typeArgs:[],isPhantom:r.$isPhantom,reifiedTypeArgs:[],fromFields:i=>r.fromFields(i),fromFieldsWithTypes:i=>r.fromFieldsWithTypes(i),fromBcs:i=>r.fromBcs(i),bcs:r.bcs,fromJSONField:i=>r.fromJSONField(i),fromJSON:i=>r.fromJSON(i),fromSuiParsedData:i=>r.fromSuiParsedData(i),fromSuiObjectData:i=>r.fromSuiObjectData(i),fetch:async(i,a)=>r.fetch(i,a),new:i=>new r([],i),kind:"StructClassReified"}}static get r(){return r.reified()}static phantom(){return le(r.reified())}static get p(){return r.phantom()}static get bcs(){return Pa.struct("String",{bytes:Pa.vector(Pa.u8())})}static fromFields(i){return r.reified().new({bytes:te(qt("u8"),i.bytes)})}static fromFieldsWithTypes(i){if(!Ii(i.type))throw new Error("not a String type");return r.reified().new({bytes:$(qt("u8"),i.fields.bytes)})}static fromBcs(i){return r.fromFields(r.bcs.parse(i))}toJSONField(){return{bytes:Pt("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return r.reified().new({bytes:q(qt("u8"),i.bytes)})}static fromJSON(i){if(i.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return r.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Ii(i.type))throw new Error(`object at ${i.fields.id} is not a String object`);return r.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Ii(i.bcs.type))throw new Error("object at is not a String object");return r.fromBcs(id(i.bcs.bcsBytes))}if(i.content)return r.fromSuiParsedData(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(i,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching String object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Ii(o.data.bcs.type))throw new Error(`object at id ${a} is not a String object`);return r.fromSuiObjectData(o.data)}};Ye();p();I();C();Ye();p();I();C();var Wt="0x2";import{bcs as La}from"@mysten/sui/bcs";import{fromB64 as lr,fromHEX as ad,toHEX as od}from"@mysten/sui/utils";function yi(r){return r=k(r),r===`${Wt}::object::ID`}var Lt=class r{__StructClass=!0;static get $typeName(){return`${Wt}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;bytes;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.bytes=a.bytes}static reified(){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName),typeArgs:[],isPhantom:r.$isPhantom,reifiedTypeArgs:[],fromFields:i=>r.fromFields(i),fromFieldsWithTypes:i=>r.fromFieldsWithTypes(i),fromBcs:i=>r.fromBcs(i),bcs:r.bcs,fromJSONField:i=>r.fromJSONField(i),fromJSON:i=>r.fromJSON(i),fromSuiParsedData:i=>r.fromSuiParsedData(i),fromSuiObjectData:i=>r.fromSuiObjectData(i),fetch:async(i,a)=>r.fetch(i,a),new:i=>new r([],i),kind:"StructClassReified"}}static get r(){return r.reified()}static phantom(){return le(r.reified())}static get p(){return r.phantom()}static get bcs(){return La.struct("ID",{bytes:La.bytes(32).transform({input:i=>ad(i),output:i=>od(i)})})}static fromFields(i){return r.reified().new({bytes:te("address",i.bytes)})}static fromFieldsWithTypes(i){if(!yi(i.type))throw new Error("not a ID type");return r.reified().new({bytes:$("address",i.fields.bytes)})}static fromBcs(i){return r.fromFields(r.bcs.parse(i))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return r.reified().new({bytes:q("address",i.bytes)})}static fromJSON(i){if(i.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return r.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!yi(i.type))throw new Error(`object at ${i.fields.id} is not a ID object`);return r.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!yi(i.bcs.type))throw new Error("object at is not a ID object");return r.fromBcs(lr(i.bcs.bcsBytes))}if(i.content)return r.fromSuiParsedData(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(i,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching ID object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!yi(o.data.bcs.type))throw new Error(`object at id ${a} is not a ID object`);return r.fromSuiObjectData(o.data)}};function hi(r){return r=k(r),r===`${Wt}::object::UID`}var $e=class r{__StructClass=!0;static get $typeName(){return`${Wt}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;id;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.id=a.id}static reified(){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName),typeArgs:[],isPhantom:r.$isPhantom,reifiedTypeArgs:[],fromFields:i=>r.fromFields(i),fromFieldsWithTypes:i=>r.fromFieldsWithTypes(i),fromBcs:i=>r.fromBcs(i),bcs:r.bcs,fromJSONField:i=>r.fromJSONField(i),fromJSON:i=>r.fromJSON(i),fromSuiParsedData:i=>r.fromSuiParsedData(i),fromSuiObjectData:i=>r.fromSuiObjectData(i),fetch:async(i,a)=>r.fetch(i,a),new:i=>new r([],i),kind:"StructClassReified"}}static get r(){return r.reified()}static phantom(){return le(r.reified())}static get p(){return r.phantom()}static get bcs(){return La.struct("UID",{id:Lt.bcs})}static fromFields(i){return r.reified().new({id:te(Lt.reified(),i.id)})}static fromFieldsWithTypes(i){if(!hi(i.type))throw new Error("not a UID type");return r.reified().new({id:$(Lt.reified(),i.fields.id)})}static fromBcs(i){return r.fromFields(r.bcs.parse(i))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return r.reified().new({id:q(Lt.reified(),i.id)})}static fromJSON(i){if(i.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return r.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!hi(i.type))throw new Error(`object at ${i.fields.id} is not a UID object`);return r.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!hi(i.bcs.type))throw new Error("object at is not a UID object");return r.fromBcs(lr(i.bcs.bcsBytes))}if(i.content)return r.fromSuiParsedData(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(i,a){let o=await i.getObject({id:a,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UID object at id ${a}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!hi(o.data.bcs.type))throw new Error(`object at id ${a} is not a UID object`);return r.fromSuiObjectData(o.data)}};function ot(r,i){return r.moveCall({target:`${ur.PUBLISHED_AT}::bytes32::from_hex`,arguments:[_e(r,i,`${bi.$typeName}`)]})}p();I();C();async function ct(r,i,a=[]){let o=await r(i),s=a.concat(o.data);return o.hasNextPage&&o.nextCursor?ct(r,o.nextCursor,s):s}var en=class extends we{constructor(a,o){super();this.nodeRpcUrlsConfig=a;this.api=o;this.client=new rd({url:a.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new V("Method send not implemented.")}async buildRawTransactionSwap(a){let o=a.sourceToken.suiAddresses;if(!o)throw new V("SUI token must contain 'suiAddresses'");(0,Ja.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let s=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s,o)}async buildRawTransactionSwapFromParams(a,o){let{amount:s,fromAccountAddress:d,fromTokenAddress:A,toTokenAddress:u,minimumReceiveAmount:b}=a,y=new Ha;y.setSender(d);let v={bridge:o.bridgeObjectAddress,coin:ue({balance:BigInt(s),type:A}),receiveAmountMin:BigInt(b)},R=nr(y,[A,u],v),F=await ct(Z=>this.client.getCoins({owner:a.toAccountAddress,coinType:u,cursor:Z}));return F.length===0||!F[0]?y.transferObjects([R],a.toAccountAddress):y.mergeCoins(F[0].coinObjectId,[R]),await y.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(a,o,s){let d=Ha.from(a);return this.buildRawTransactionSendFromTx(s,d,o)}async buildRawTransactionSend(a){return this.buildRawTransactionSendFromTx(a,new Ha)}async buildRawTransactionSendFromTx(a,o,s){let d=await ze(this.chainType,a,this.api),{messenger:A}=d,u=a.sourceToken.suiAddresses;if(!u)throw new V("SUI token must contain 'suiAddresses'");switch((0,Ja.setAddress)(u.bridgeAddress,u.bridgeAddressOrigin),(0,Cr.setAddress)(u.utilsAddress),A){case 1:return this.buildRawTransactionAllbridgeSend(d,u,o,s);case 2:return this.buildRawTransactionWormholeSend(d,u,o,s);case 3:case 4:return this.buildRawTransactionCctpSend(a,d,u,o,s);case 5:throw new Te("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(a,o,s,d){let{amount:A,fromAccountAddress:u,fromTokenAddress:b,toChainId:y,toAccountAddress:v,toTokenAddress:R,fee:F,gasFeePaymentMethod:Z,extraGas:X}=a,N=F;if(X&&(N=ja(N).plus(X).toFixed()),s.setSender(u),Z==="stablecoin"){let S=BigInt(A)-BigInt(N),P,T;if(d){let[j]=s.splitCoins(d,[N]);P=d,T=j}else P=ue({balance:S,type:b}),T=ue({balance:BigInt(N),type:b});let L={bridge:o.bridgeObjectAddress,messenger:o.allbridgeMessengerObjectAddress,amount:P,destinationChainId:y,nonce:At(),recipient:ot(s,tt(v)),receiveToken:ot(s,tt(R)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:T,feeSuiCoin:ue({balance:BigInt(0),useGasCoin:!1})};Na(s,b,L)}else{let S=N==="0"?ue({balance:BigInt(N),useGasCoin:!1}):ue({balance:BigInt(N)}),P={bridge:o.bridgeObjectAddress,messenger:o.allbridgeMessengerObjectAddress,amount:d??ue({balance:BigInt(A),type:b}),destinationChainId:y,nonce:At(),recipient:ot(s,tt(v)),receiveToken:ot(s,tt(R)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:ue({balance:BigInt(0),type:b}),feeSuiCoin:S};Na(s,b,P)}return await s.toJSON({client:this.client})}async buildRawTransactionWormholeSend(a,o,s,d){let{amount:A,fromAccountAddress:u,fromTokenAddress:b,toChainId:y,toAccountAddress:v,toTokenAddress:R,fee:F,gasFeePaymentMethod:Z,extraGas:X}=a,N=F;if(X&&(N=ja(N).plus(X).toFixed()),s.setSender(u),Z==="stablecoin"){let S=BigInt(A)-BigInt(N),P,T;if(d){let[j]=s.splitCoins(d,[N]);P=d,T=j}else P=ue({balance:S,type:b}),T=ue({balance:BigInt(N),type:b});let L={bridge:o.bridgeObjectAddress,messenger:o.wormholeMessengerObjectAddress,wormholeState:o.wormholeStateObjectAddress,theClock:mr,amount:P,destinationChainId:y,nonce:At(),recipient:ot(s,tt(v)),receiveToken:ot(s,tt(R)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:T,feeSuiCoin:ue({balance:BigInt(0),useGasCoin:!1})};Fa(s,b,L)}else{let S=N==="0"?ue({balance:BigInt(N),useGasCoin:!1}):ue({balance:BigInt(N)}),P={bridge:o.bridgeObjectAddress,messenger:o.wormholeMessengerObjectAddress,wormholeState:o.wormholeStateObjectAddress,theClock:mr,amount:d??ue({balance:BigInt(A),type:b}),destinationChainId:y,nonce:At(),recipient:ot(s,tt(v)),receiveToken:ot(s,tt(R)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:ue({balance:BigInt(0),type:b}),feeSuiCoin:S};Fa(s,b,P)}return await s.toJSON({client:this.client})}async buildRawTransactionCctpSend(a,o,s,d,A){let{amount:u,fromAccountAddress:b,fromTokenAddress:y,toChainId:v,toAccountAddress:R,fee:F,gasFeePaymentMethod:Z,extraGas:X}=o;(0,pr.setAddress)(s.cctpAddress,s.cctpAddressOrigin);let N=F;X&&(N=ja(N).plus(X).toFixed()),d.setSender(b);let S=ot(d,tt(R)),P;if(a.destinationToken.chainType==="SOLANA"){let T=await di(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));P=ot(d,tt(T))}else P=S;if(Z==="stablecoin"){let T=BigInt(u)-BigInt(N),L,j;if(A){let[D]=d.splitCoins(A,[N]);L=A,j=D}else L=ue({balance:T,type:y}),j=ue({balance:BigInt(N),type:y});let x={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:L,destinationChainId:v,recipient:P,recipientWalletAddress:S,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:j,feeSuiCoin:ue({balance:BigInt(0),useGasCoin:!1})};Xa(d,y,x)}else{let T=N==="0"?ue({balance:BigInt(N),useGasCoin:!1}):ue({balance:BigInt(N)}),L={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:A??ue({balance:BigInt(u),type:y}),destinationChainId:v,recipient:P,recipientWalletAddress:S,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:ue({balance:BigInt(0),type:y}),feeSuiCoin:T};Xa(d,y,L)}return await d.toJSON({client:this.client})}};p();I();C();import{Big as Ad}from"big.js";p();I();C();p();I();C();import sd from"bn.js";function vi(r){return"0x"+new sd(r).toString("hex")}function Ir(r){return new Promise(i=>setTimeout(()=>i(),r))}async function Yi(r,i){let a=await r.trx.sign(i);if(!a.signature)throw new Ot("Transaction was not signed properly");let s=(await r.trx.sendRawTransaction(a)).transaction.txID;return await dd(r,s),{txId:s}}async function dd(r,i,a=1e4){let o=Date.now();for(;;){if(Date.now()-o>a)throw new bn("Transaction not found");let s=await r.trx.getUnconfirmedTransactionInfo(i);if(!s?.receipt){await Ir(2e3);continue}if(s.receipt.result==="SUCCESS")return s;throw new bn(`Transaction status is ${s.receipt.result}`)}}var Nn=class extends we{constructor(a,o){super();this.tronWeb=a;this.api=o}chainType="TRX";async send(a){let o=await ze(this.chainType,a,this.api),s=await this.buildRawTransactionSendFromParams(a,o);return await Yi(this.tronWeb,s)}async buildRawTransactionSwap(a){let o=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(a){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:u,toTokenAddress:b,minimumReceiveAmount:y}=a,v=[{type:"uint256",value:o},{type:"bytes32",value:A},{type:"bytes32",value:b},{type:"address",value:u},{type:"uint256",value:y}];return this.buildRawTransaction(s,"swap(uint256,bytes32,bytes32,address,uint256)",v,"0",d)}async buildRawTransactionSend(a){let o=await ze(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(a,o)}async buildRawTransactionSendFromParams(a,o){let{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:v,messenger:R,fee:F,gasFeePaymentMethod:Z,extraGas:X,extraGasDest:N}=o,S=F;X&&(S=Ad(S).plus(X).toFixed());let P=At().toString(),T,L,j;switch(R){case 3:case 4:Z==="stablecoin"?(T=[{type:"uint256",value:s},{type:"bytes32",value:y},{type:"uint256",value:b},{type:"uint256",value:S}],L="0"):(T=[{type:"uint256",value:s},{type:"bytes32",value:y},{type:"uint256",value:b},{type:"uint256",value:0}],L=S),j="bridge(uint256,bytes32,uint256,uint256)";break;case 5:Z==="stablecoin"?(T=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:y},{type:"uint256",value:b},{type:"uint256",value:S},{type:"uint256",value:N??"0"},{type:"uint256",value:"10"}],L="0"):(T=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:y},{type:"uint256",value:b},{type:"uint256",value:0},{type:"uint256",value:N??"0"},{type:"uint256",value:"10"}],L=S),j="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:Z==="stablecoin"?(T=[{type:"bytes32",value:u},{type:"uint256",value:s},{type:"bytes32",value:y},{type:"uint256",value:b},{type:"bytes32",value:v},{type:"uint256",value:P},{type:"uint8",value:R},{type:"uint256",value:S}],L="0"):(T=[{type:"bytes32",value:u},{type:"uint256",value:s},{type:"bytes32",value:y},{type:"uint256",value:b},{type:"bytes32",value:v},{type:"uint256",value:P},{type:"uint8",value:R},{type:"uint256",value:0}],L=S),j="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(d,j,T,L,A)}async buildRawTransaction(a,o,s,d,A){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,o,{callValue:+d},s,A);if(!u?.result?.result)throw new V("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}};var Ri=class{constructor(i,a,o,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o;this.tokenService=s;this.rawTxBuilder=new Ai(i,a,o,s)}rawTxBuilder;async getAllowance(i,a){let o,s;a?(o=i,s=a):s=i;let d=fn(s.token,s.messenger);return await this.tokenService.getAllowance({...s,spender:d},o)}async checkAllowance(i,a){let o,s;a?(o=i,s=a):s=i;let d=fn(s.token,s.messenger);return this.tokenService.checkAllowance({...s,spender:d},o)}async approve(i,a){let o=fn(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:o})}async send(i,a){return _(a.amount),ee("amount",a.amount,a.sourceToken.decimals),gi(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function fn(r,i=1){switch(i){case 3:if(r.cctpAddress)return r.cctpAddress;throw new Ne("Such route does not support CCTP protocol");case 4:if(r.cctpV2Address)return r.cctpV2Address;throw new Ne("Such route does not support CCTP V2 protocol");case 5:if(r.oftBridgeAddress)return r.oftBridgeAddress;throw new Te("Such route does not support OFT protocol");case 1:case 2:return r.bridgeAddress}}function gi(r,i,a,o,s){switch(E.getChainProperty(r).chainType){case"EVM":{if(s)return new Wn(s,i,a);{let d=a.getNodeRpcUrl(r);return new Wn(new cd(d),i,a)}}case"TRX":{if(s)return new Nn(s,i);{let d=a.getNodeRpcUrl(r);return new Nn(new gd({fullHost:d,solidityNode:d,eventServer:d}),i)}}case"SOLANA":return new mi(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:o.wormholeMessengerProgramId,solanaLookUpTable:o.solanaLookUpTable,cctpParams:o.cctpParams,jupiterParams:{jupiterUrl:o.jupiterUrl,jupiterApiKeyHeader:o.jupiterApiKeyHeader,jupiterMaxAccounts:o.jupiterMaxAccounts}},i);case"SRB":return new pi(a,o,i);case"SUI":return new en(a,i);case"ALG":if(s){let d=s,A=br.fromClients({algod:d});return new Rn(A,i)}else{let d=a.getNodeRpcUrl(r),A=br.fromConfig({algodConfig:{server:d}});return new Rn(A,i)}}}p();I();C();import{AlgorandClient as Zr}from"@algorandfoundation/algokit-utils";import{Big as wd}from"big.js";import Xd from"timed-cache";import{TronWeb as Sd}from"tronweb";import{FMT_BYTES as Vd,FMT_NUMBER as Md,Web3 as Pd}from"web3";p();I();C();import{Big as Ct}from"big.js";function yr(r,i,a,o,s){let d=O(r,3),A=Ct(d),u=Ct(a),b=Ct(o).plus(s),y,v;if(u.eq(0)||b.eq(0)){let F=A.div(2);y=Ct(o).plus(F),v=Ct(s).plus(F)}else y=Ct(o).plus(A.mul(o).div(b)),v=Ct(s).plus(A.mul(s).div(b));return Ct(vo(i,y.toFixed(),v.toFixed())).minus(u).toFixed()}function hr(r){let i=O(r,3);return Ct(i).round().toFixed()}p();I();C();import{assignGroupID as ka,bytesToBigInt as md}from"algosdk";p();I();C();import{getArc56ReturnValue as ld}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as Bi}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as Vy}from"@algorandfoundation/algokit-utils/types/app-factory";import{encodeAddress as ud}from"algosdk";var Wi={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"assetId"},{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:"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:"noop",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"deposit",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:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"}],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"},{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
+ 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
+ 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
+ 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:"account",name:"user"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"decimals",args:[],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
+ 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:[1446],errorMessage:'"Pool: withdraw prohibited'},{pc:[1249],errorMessage:"Asset must go to app"},{pc:[1232],errorMessage:"Asset txn missing"},{pc:[1270],errorMessage:"CloseTo not allowed"},{pc:[514,529,553,577,589,605,617,632,647,659,671,683,695,711,723,739,773,803,819,831,840,865],errorMessage:"OnCompletion is not NoOp"},{pc:[853],errorMessage:"OnCompletion is not OptIn"},{pc:[3306],errorMessage:"Only owner"},{pc:[1216],errorMessage:"Pool: deposit prohibited"},{pc:[1141],errorMessage:"Pool: is not stopAuthority"},{pc:[1206],errorMessage:"Pool: low token balance"},{pc:[1182],errorMessage:"Pool: low vUSD balance"},{pc:[1131],errorMessage:"Pool: only router"},{pc:[1701,1983],errorMessage:"Pool: reserves"},{pc:[2027],errorMessage:"Pool: slippage"},{pc:[2116,2175],errorMessage:"Pool: too large"},{pc:[1280],errorMessage:"Pool: too little"},{pc:[1369],errorMessage:"Pool: too much"},{pc:[1723],errorMessage:"Pool: zero D changes"},{pc:[1693],errorMessage:"Pool: zero changes"},{pc:[1263],errorMessage:"Rekey not allowed"},{pc:[1468],errorMessage:"RewardManager: not enough amount"},{pc:[2994],errorMessage:"RewardManager: too high"},{pc:[1256],errorMessage:"Wrong asset"},{pc:[984],errorMessage:"asset exists"},{pc:[869],errorMessage:"can only call when creating"},{pc:[517,532,556,580,592,608,620,635,650,662,674,686,698,714,726,742,776,806,822,834,843,856],errorMessage:"can only call when not creating"},{pc:[977,1080,1129,1139,1153,1163,1180,1204,1215,1225,1229,1284,1298,1308,1326,1336,1350,1360,1374,1412,1445,1451,1476,1531,1563,1614,1618,1624,1660,1686,1690,1697,1705,1719,1728,1775,1805,1815,1823,1833,1841,1870,1929,1939,1955,1976,1987,2002,2032,2066,2137,2148,2251,2260,2408,2413,2421,2529,2537,2578,2586,2917,2954,3015,3023,3028,3064,3092,3100,3118,3138,3152,3216,3250,3304],errorMessage:"check GlobalState exists"},{pc:[1463,1500,1516,2906,2934,3058,3078,3164,3186,3201],errorMessage:"check LocalState exists"},{pc:[2626],errorMessage:"n must be non-negative"},{pc:[1395,1426,1642,1674],errorMessage:"overflow"},{pc:[1242],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggNCAxMDAwMAogICAgYnl0ZWNibG9jayAidG9rZW5CYWxhbmNlIiAidlVzZEJhbGFuY2UiICJhc3NldCIgInJlc2VydmVzIiAiYmFsYW5jZSIgInVzZXJSZXdhcmREZWJ0IiAiZCIgInRvdGFsU3VwcGx5IiAiYWNjUmV3YXJkUGVyU2hhcmVQIiAweDAxMDAwMDAwMDAwMDAwIDB4MDEgImFkbWluRmVlQW1vdW50IiAiY2FuRGVwb3NpdCIgImNhbldpdGhkcmF3IiAib3duZXIiICJmZWVTaGFyZUJQIiAiYmFsYW5jZVJhdGlvTWluQlAiIDB4MDIgImFkbWluRmVlU2hhcmVCUCIgMHgxNTFmN2M3NSAiYSIgInJvdXRlciIgInN0b3BBdXRob3JpdHkiICJ0b2tlbkFtb3VudFJlZHVjZSIgInRva2VuQW1vdW50SW5jcmVhc2UiIDB4YmE4MTgwNzYgMHgwMyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIHB1c2hpbnQgMjAwMCAvLyAyMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY2FuRGVwb3NpdCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBwdXNoYnl0ZXNzIDB4NTE2ZDM0N2IgMHgwMWEzYTNmZiAweDc2MTBhNDYwIDB4ZTgzYTg3YWIgMHg5MmUwM2IxYyAweDIxZjFkZGZmIDB4ZDk3OGFkMTQgMHgwZDFiNGMwNiAweDc1YmY5YTI4IDB4ZjQ5M2Q3ZWQgMHg4ZDVjYjZkZiAweGZlMDRhNWNlIDB4MDI4ZTA4NTkgMHg0MWZjOTY2ZSAweGFiZjIwMDE0IDB4MDRiMTYxZjEgMHg2NjU5MWNjZiAweGE1YWU2YmQxIDB4YTA0YzViYzQgMHgzNjFiNjE1OSAweDMyYmJiMDExIDB4Yjg3NzllZTcgMHhlMTdiYWZiNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAib3B0SW5Ub0FwcGxpY2F0aW9uKCl2b2lkIiwgbWV0aG9kICJvcHRJbkFzc2V0KCl2b2lkIiwgbWV0aG9kICJub29wKCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhdyh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImRlY2ltYWxzKCl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlQXBwbGljYXRpb25fcm91dGVANSBtYWluX29wdEluVG9BcHBsaWNhdGlvbl9yb3V0ZUA2IG1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3IG1haW5fbm9vcF9yb3V0ZUA4IG1haW5fZGVwb3NpdF9yb3V0ZUA5IG1haW5fd2l0aGRyYXdfcm91dGVAMTAgbWFpbl9zd2FwVG9WVXNkX3JvdXRlQDExIG1haW5fc3dhcEZyb21WVXNkX3JvdXRlQDEyIG1haW5fc2V0RmVlU2hhcmVfcm91dGVAMTMgbWFpbl9hZGp1c3RUb3RhbExwQW1vdW50X3JvdXRlQDE0IG1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTUgbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNiBtYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNyBtYWluX3N0b3BXaXRoZHJhd19yb3V0ZUAxOCBtYWluX3N0YXJ0V2l0aGRyYXdfcm91dGVAMTkgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwIG1haW5fc2V0Um91dGVyX3JvdXRlQDIxIG1haW5fY2xhaW1SZXdhcmRzX3JvdXRlQDIyIG1haW5fc2V0QWRtaW5GZWVTaGFyZV9yb3V0ZUAyMyBtYWluX2NsYWltQWRtaW5GZWVfcm91dGVAMjQgbWFpbl9wZW5kaW5nUmV3YXJkX3JvdXRlQDI1IG1haW5fZGVjaW1hbHNfcm91dGVAMjYgbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNwoKbWFpbl9hZnRlcl9pZl9lbHNlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB0cmFuc2Zlck93bmVyc2hpcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWNpbWFsc19yb3V0ZUAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMwogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3BlbmRpbmdSZXdhcmRfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgcGVuZGluZ1Jld2FyZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2xhaW1BZG1pbkZlZV9yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xhaW1BZG1pbkZlZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRBZG1pbkZlZVNoYXJlX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0QWRtaW5GZWVTaGFyZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbGFpbVJld2FyZHNfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGNsYWltUmV3YXJkcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRSb3V0ZXJfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBzZXRSb3V0ZXIocm91dGVyOiBBZGRyZXNzKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldFJvdXRlcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFdpdGhkcmF3X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBzdGFydFdpdGhkcmF3KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0V2l0aGRyYXcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3RvcFdpdGhkcmF3X3JvdXRlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQyCiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcFdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0RGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcERlcG9zaXQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjYKICAgIC8vIHNldEJhbGFuY2VSYXRpb01pbkJQKGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJhbGFuY2VSYXRpb01pbkJQCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkanVzdFRvdGFsTHBBbW91bnRfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIGFkanVzdFRvdGFsTHBBbW91bnQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYWRqdXN0VG90YWxMcEFtb3VudAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRGZWVTaGFyZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEZlZVNoYXJlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N3YXBGcm9tVlVzZF9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBjYWxsc3ViIHN3YXBGcm9tVlVzZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcFRvVlVzZF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxMy0yMTcKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgY2FsbHN1YiBzd2FwVG9WVXNkCiAgICBpdG9iCiAgICBieXRlYyAxOSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgb3B0SW5Bc3NldAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluVG9BcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXRJZDogdWludDY0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YmlndWludFRvVWludDY0TW9kdWxvKHY6IGJ5dGVzKSAtPiB1aW50NjQ6CmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNgogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBiaWd1aW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBjb25zdCBsZW4gPSBvcC5sZW4oYik7CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMiAvLyA4CiAgICA+CiAgICBieiBiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIDgKICAgIC0KCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzAKICAgIC8vIGNvbnN0IGxhc3Q4ID0gYi5zbGljZShzdGFydCk7ICAgICAgICAgICAvLyBrZWVwIGxlYXN0LXNpZ25pZmljYW50IDggYnl0ZXMKICAgIGR1cAogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgPj0KICAgIGRpZyAyCiAgICBzd2FwCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzEKICAgIC8vIHJldHVybiBvcC5idG9pKGxhc3Q4KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byB1aW50NjQKICAgIGJ0b2kKICAgIHN3YXAKICAgIHJldHN1YgoKYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyOQogICAgLy8gY29uc3Qgc3RhcnQ6IHVpbnQ2NCA9IGxlbiA+IDggPyAobGVuIC0gOCkgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgcm91dGVyOiBieXRlcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gNiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZnJhbWVfZGlnIC02CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYXNzZXQudmFsdWUgPSBBc3NldChhc3NldElkKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjAgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gdGhpcy5hLnZhbHVlID0gYTsKICAgIGZyYW1lX2RpZyAtNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIxIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1OAogICAgLy8gdGhpcy5yb3V0ZXIudmFsdWUgPSByb3V0ZXI7CiAgICBmcmFtZV9kaWcgLTUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyAyMiAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUgPSBvd25lcjsKICAgIGZyYW1lX2RpZyAtNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBTWVNURU1fUFJFQ0lTSU9OOiB1aW50NjQgPSAzOwogICAgcHVzaGludCAzIC8vIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgPgogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFNZU1RFTV9QUkVDSVNJT046IHVpbnQ2NCA9IDM7CiAgICBwdXNoaW50IDMgLy8gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICAtCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZnJhbWVfZGlnIDAKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDI0IC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWUgPSBkZWNpbWFscyA8IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoU1lTVEVNX1BSRUNJU0lPTiAtIGRlY2ltYWxzKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDYKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Ub0FwcGxpY2F0aW9uKCkgLT4gdm9pZDoKb3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHN1cGVyLm9wdEluVG9BcHBsaWNhdGlvbihUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQyCiAgICAvLyBpZiAoIXRoaXMuYmFsYW5jZSh0bykuaGFzVmFsdWUpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlID0gMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDMKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKCm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYm56IG9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0NgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSAwOwogICAgZnJhbWVfZGlnIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9wdEluQXNzZXQoKSAtPiB2b2lkOgpvcHRJbkFzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjgxLTg3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4OQogICAgLy8gbG9nKCdQb29sOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIlBvb2w6IG9wdC1pbiBjb21wbGV0ZWQiCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcm91dGVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gInJvdXRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5NwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMucm91dGVyLnZhbHVlLmJ5dGVzLCAnUG9vbDogb25seSByb3V0ZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogb25seSByb3V0ZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlTdG9wQXV0aG9yaXR5KCkgLT4gdm9pZDoKb25seVN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJzdG9wQXV0aG9yaXR5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIFBvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC52YWxpZGF0ZUJhbGFuY2VSYXRpbygpIC0+IHZvaWQ6CnZhbGlkYXRlQmFsYW5jZVJhdGlvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBwcml2YXRlIHZhbGlkYXRlQmFsYW5jZVJhdGlvKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIGlmICh0b2tlbkJhbGFuY2UgPiB2VXNkQmFsYW5jZSkgewogICAgPgogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIFBvb2w6IGxvdyB2VVNEIGJhbGFuY2UKCnZhbGlkYXRlQmFsYW5jZVJhdGlvX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIH0gZWxzZSBpZiAodG9rZW5CYWxhbmNlIDwgdlVzZEJhbGFuY2UpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGFzc2VydCgodG9rZW5CYWxhbmNlICogQlApIC8gdlVzZEJhbGFuY2UgPj0gdGhpcy5iYWxhbmNlUmF0aW9NaW5CUC52YWx1ZSwgJ1Bvb2w6IGxvdyB0b2tlbiBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDEKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgPj0KICAgIGFzc2VydCAvLyBQb29sOiBsb3cgdG9rZW4gYmFsYW5jZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdCgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjktMTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlcG9zaXQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXNzZXJ0IC8vIFBvb2w6IGRlcG9zaXQgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGFzc2VydChUeG4uZ3JvdXBJbmRleCA+IDAsIGBBc3NldCB0eG4gbWlzc2luZ2ApOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGFzc2VydCAvLyBBc3NldCB0eG4gbWlzc2luZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBwcmV2SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIDE7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0MQogICAgLy8gY29uc3QgcGF5ID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKHByZXZJZHgpOwogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHBheS5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDUKICAgIC8vIGFzc2VydChwYXkueGZlckFzc2V0LmlkID09PSBhc3NldElkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgYXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OAogICAgLy8gYXNzZXJ0KHBheS5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBSZWtleSBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBSZWtleVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUmVrZXkgbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OQogICAgLy8gYXNzZXJ0KHBheS5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjUwCiAgICAvLyByZXR1cm4gcGF5LmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gYXNzZXJ0KGFtb3VudFNQID4gMCwgJ1Bvb2w6IHRvbyBsaXR0bGUnKTsKICAgIGR1cAogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsaXR0bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGlmIChvbGREID09PSAwIHx8IG9sZEJhbGFuY2UgPT09IDApIHsKICAgIGJ6IGRlcG9zaXRfaWZfYm9keUAyCiAgICBmcmFtZV9kaWcgNAogICAgYm56IGRlcG9zaXRfZWxzZV9ib2R5QDMKCmRlcG9zaXRfaWZfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBjb25zdCBoYWxmQW1vdW50OiB1aW50NjQgPSBhbW91bnRTUCA+PiAxOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyB0aGlzLmRlcG9zaXRMcChUeG4uc2VuZGVyLCB0aGlzLmQudmFsdWUgLSBvbGREKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgY2FsbHN1YiBkZXBvc2l0THAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMQogICAgLy8gY29uc3QgTUFYX1RPS0VOX0JBTEFOQ0U6IHVpbnQ2NCA9IDIgKiogNDA7IC8vIE1heCBwb3NzaWJsZSB0b2tlbiBiYWxhbmNlCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBhc3NlcnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUgPCBNQVhfVE9LRU5fQkFMQU5DRSwgJ1Bvb2w6IHRvbyBtdWNoJyk7CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIHJldHN1YgoKZGVwb3NpdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIDIKICAgIGl0b2IKICAgIGRpZyAxCiAgICBiKgogICAgZnJhbWVfZGlnIDQKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gOAogICAgYnplcm8KICAgIHN3YXAKICAgIGRpZyAxCiAgICBifAogICAgYnRvaQogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgZGVwb3NpdF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdyhhbW91bnRMcDogdWludDY0KSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OC0xNjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXcoYW1vdW50THA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gIlBvb2w6IHdpdGhkcmF3IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gdGhpcy53aXRoZHJhd0xwKFR4bi5zZW5kZXIsIGFtb3VudExwKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI2CiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNwogICAgLy8gYXNzZXJ0KHVzZXJMcEFtb3VudCA+PSBscEFtb3VudCwgJ1Jld2FyZE1hbmFnZXI6IG5vdCBlbm91Z2ggYW1vdW50Jyk7CiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgPj0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjkKICAgIC8vIGxldCBwZW5kaW5nOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTMxCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBmcmFtZV9idXJ5IDQKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzMKICAgIC8vIHVzZXJMcEFtb3VudCAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM0CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZSA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAzCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzYKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQIC8gUF9TQ0FMRSk7CiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGZyYW1lX2RpZyA0CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3MoZnJvbSksIHBlbmRpbmcgfSk7CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxNDEKICAgIC8vIGVtaXQ8V2l0aGRyYXc+KHsgZnJvbTogbmV3IEFkZHJlc3MoZnJvbSksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4ZDNhZmE0ZjEgLy8gbWV0aG9kICJXaXRoZHJhdyhhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBvbGRCYWxhbmNlOiB1aW50NjQgPSAodG9rZW5CYWxhbmNlICsgdlVzZEJhbGFuY2UpOwogICAgZHVwMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgZGlnIDQKICAgIGIqCiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA4CiAgICBiemVybwogICAgc3dhcAogICAgZGlnIDEKICAgIGJ8CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSAtPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgICsKICAgID4KICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIGNoYW5nZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYW1vdW50THAgPD0gdGhpcy5yZXNlcnZlcy52YWx1ZSwgJ1Bvb2w6IHJlc2VydmVzJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogcmVzZXJ2ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IGFtb3VudExwOwogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYXNzZXJ0IC8vIFBvb2w6IHplcm8gRCBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk5CiAgICAvLyBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDAKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcFRvVlVzZCh1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQsIHplcm9GZWU6IHVpbnQ2NCkgLT4gdWludDY0Ogpzd2FwVG9WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMAogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjIwLTIyMQogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gZmVlID0gKGFtb3VudCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgZnJhbWVfYnVyeSAyCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICAtCiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGZlZSA9IGFtb3VudCAtIHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRJbik7CiAgICBkdXAKICAgIGNhbGxzdWIgZnJvbVN5c3RlbVByZWNpc2lvbgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAtCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18zIC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCB2VXNkTmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlKTsKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIDwKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmVzdWx0ID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSAtIHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgZnJhbWVfYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA9IHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gdGhpcy5hZGRSZXdhcmRzKGZlZSk7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjYWxsc3ViIGFkZFJld2FyZHMKICAgIGZyYW1lX2J1cnkgMwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgNAoKc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGVtaXQ8U3dhcHBlZFRvVlVzZD4oeyBzZW5kZXI6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIGFtb3VudCwgdlVzZEFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgyYmJiZWNhMyAvLyBtZXRob2QgIlN3YXBwZWRUb1ZVc2QoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gdGhpcy52YWxpZGF0ZUJhbGFuY2VSYXRpbygpOwogICAgY2FsbHN1YiB2YWxpZGF0ZUJhbGFuY2VSYXRpbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyByZXR1cm4gcmVzdWx0OwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zd2FwRnJvbVZVc2QodXNlcjogYnl0ZXMsIGFtb3VudDogdWludDY0LCByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsIHplcm9GZWU6IHVpbnQ2NCkgLT4gdWludDY0Ogpzd2FwRnJvbVZVc2Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTktMjY0CiAgICAvLyBzd2FwRnJvbVZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gNCAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyB0aGlzLm9ubHlSb3V0ZXIoKTsKICAgIGNhbGxzdWIgb25seVJvdXRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBsZXQgcmVzdWx0U1A6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2OC0yNjkKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpZiAoYW1vdW50ID4gMCkgewogICAgZnJhbWVfZGlnIC0zCiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTMKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIGNvbnN0IG5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzUKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBmcmFtZV9idXJ5IDMKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gYXNzZXJ0KHJlc3VsdFNQIDw9IHRoaXMucmVzZXJ2ZXMudmFsdWUsICdQb29sOiByZXNlcnZlcycpOwogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSByZXN1bHRTUDsKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18zIC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSByZXN1bHRTUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg0CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgZnJhbWVfZGlnIDMKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIC8KICAgIGZyYW1lX2J1cnkgNAoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4NwogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4OQogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgPSBuZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZnJhbWVfZGlnIC0yCiAgICA+PQogICAgYXNzZXJ0IC8vIFBvb2w6IHNsaXBwYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyOTEtMjk1CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiByZXN1bHQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHVzZXIubmF0aXZlLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC00CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjkxLTI5NQogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogcmVzdWx0LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB1c2VyLm5hdGl2ZSwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gdGhpcy5hZGRSZXdhcmRzKGZlZSk7CiAgICBkaWcgMQogICAgY2FsbHN1YiBhZGRSZXdhcmRzCiAgICBmcmFtZV9idXJ5IDYKICAgIGZyYW1lX2J1cnkgNQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtNAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2YxZDU0MiAvLyBtZXRob2QgIlN3YXBwZWRGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzAwCiAgICAvLyB0aGlzLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCk7CiAgICBjYWxsc3ViIHZhbGlkYXRlQmFsYW5jZVJhdGlvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDEKICAgIC8vIHJldHVybiByZXN1bHQ7CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA5CiAgICAvLyBhc3NlcnQoZmVlU2hhcmVCUCA8PSBCUCwgJ1Bvb2w6IHRvbyBsYXJnZScpOwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIGFzc2VydChmZWVTaGFyZUJQIDw9IEJQLCAnUG9vbDogdG9vIGxhcmdlJyk7CiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnQoKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzEzCiAgICAvLyBhZGp1c3RUb3RhbExwQW1vdW50KCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBpZiAoZCA+IHRvdGFsU3VwcGx5KSB7CiAgICA+CiAgICBieiBhZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE5CiAgICAvLyB0aGlzLmRlcG9zaXRMcChUeG4uc2VuZGVyLCBkIC0gdG90YWxTdXBwbHkpOwogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICAtCiAgICBjYWxsc3ViIGRlcG9zaXRMcAoKYWRqdXN0VG90YWxMcEFtb3VudF9hZnRlcl9pZl9lbHNlQDI6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KSAtPiB2b2lkOgpzZXRCYWxhbmNlUmF0aW9NaW5CUDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNgogICAgLy8gc2V0QmFsYW5jZVJhdGlvTWluQlAoYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxhcmdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MwogICAgLy8gYmFsYW5jZVJhdGlvTWluQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjkKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BEZXBvc2l0KCkgLT4gdm9pZDoKc3RvcERlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHRoaXMub25seVN0b3BBdXRob3JpdHkoKTsKICAgIGNhbGxzdWIgb25seVN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zdGFydERlcG9zaXQoKSAtPiB2b2lkOgpzdGFydERlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcFdpdGhkcmF3KCkgLT4gdm9pZDoKc3RvcFdpdGhkcmF3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyB0aGlzLm9ubHlTdG9wQXV0aG9yaXR5KCk7CiAgICBjYWxsc3ViIG9ubHlTdG9wQXV0aG9yaXR5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NAogICAgLy8gdGhpcy5jYW5XaXRoZHJhdy52YWx1ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zdGFydFdpdGhkcmF3KCkgLT4gdm9pZDoKc3RhcnRXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0OQogICAgLy8gdGhpcy5jYW5XaXRoZHJhdy52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogYnl0ZXMpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjIgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXIocm91dGVyOiBieXRlcykgLT4gdm9pZDoKc2V0Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBzZXRSb3V0ZXIocm91dGVyOiBBZGRyZXNzKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcm91dGVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAyMSAvLyAicm91dGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU5CiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmdldFkoeDogdWludDY0KSAtPiB1aW50NjQ6CmdldFk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIHByaXZhdGUgZ2V0WSh4OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjYKICAgIC8vIGNvbnN0IHhfID0gQmlnVWludCh4KTsKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjcKICAgIC8vIGNvbnN0IGRfID0gQmlnVWludCh0aGlzLmQudmFsdWUpOwogICAgaXRvYgogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAiYSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjgKICAgIC8vIGNvbnN0IGE0ID0gQmlnVWludCh0aGlzLmEudmFsdWUgPDwgMik7CiAgICBwdXNoaW50IDIgLy8gMgogICAgc2hsCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gY29uc3QgYTggPSBCaWdVaW50KGE0ICogMm4pOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgYioKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgZE1pbnVzWElzUG9zaXRpdmUgPSBkXyA+PSB4XzsKICAgIGI8PQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIGNvbnN0IGRNaW51c1hBYnM6IGJpZ3VpbnQgPSBkTWludXNYSXNQb3NpdGl2ZSA/IChkXyAtIHhfKSA6ICh4XyAtIGRfKTsKICAgIGJ6IGdldFlfdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDIKICAgIGItCgpnZXRZX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NAogICAgLy8gY29uc3QgYTRCeURNaW51c1hBYnM6IGJpZ3VpbnQgPSBhNCAqIGRNaW51c1hBYnM7CiAgICBmcmFtZV9kaWcgNAogICAgYioKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyBpZiAoZE1pbnVzWElzUG9zaXRpdmUpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBieiBnZXRZX2Vsc2VfYm9keUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIGlmIChhNEJ5RE1pbnVzWEFicyA+PSBkXykgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAzCiAgICBiPj0KICAgIGJ6IGdldFlfZWxzZV9ib2R5QDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4MQogICAgLy8gcGFydDFBYnMgPSBhNEJ5RE1pbnVzWEFicyAtIGRfOwogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODIKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQoKZ2V0WV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTMKICAgIC8vIGNvbnN0IHBhcnQyOiBiaWd1aW50ID0gQmlnVWludCh4KSAqIChhNCAqIGRfICogZF8gKiBkXyArIHhfICogKHBhcnQxQWJzICogcGFydDFBYnMpKTsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBiKgogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYioKICAgIHVuY292ZXIgMgogICAgYisKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTQKICAgIC8vIGxldCBudW1lcmF0b3I6IGJpZ3VpbnQgPSB0aGlzLnNxcnQocGFydDIpOwogICAgY2FsbHN1YiBzcXJ0CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTcKICAgIC8vIGlmIChwYXJ0MUlzUG9zaXRpdmUpIHsKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTgKICAgIC8vIG51bWVyYXRvciArPSB4XyAqIHBhcnQxQWJzOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICBiKgogICAgYisKCmdldFlfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhudW1lcmF0b3IgLyAoYTggKiB4XykgKyAxbik7IC8vICsxIHRvIG9mZnNldCByb3VuZGluZyBlcnJvcnMKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgMgogICAgYioKICAgIGIvCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpnZXRZX2Vsc2VfYm9keUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gbnVtZXJhdG9yIC09IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiLQogICAgYiBnZXRZX2FmdGVyX2lmX2Vsc2VAMTIKCmdldFlfZWxzZV9ib2R5QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHBhcnQxQWJzID0gZF8gLSBhNEJ5RE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg1CiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX2Vsc2VfYm9keUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg4CiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzICsgZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGIrCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYiBnZXRZX2FmdGVyX2lmX2Vsc2VAOQoKZ2V0WV90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIGNvbnN0IGRNaW51c1hBYnM6IGJpZ3VpbnQgPSBkTWludXNYSXNQb3NpdGl2ZSA/IChkXyAtIHhfKSA6ICh4XyAtIGRfKTsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMwogICAgYi0KICAgIGIgZ2V0WV90ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC51cGRhdGVEKCkgLT4gdm9pZDoKdXBkYXRlRDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNwogICAgLy8gcHJpdmF0ZSB1cGRhdGVEKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gY29uc3QgeSA9IEJpZ1VpbnQodGhpcy52VXNkQmFsYW5jZS52YWx1ZSk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTQKICAgIC8vIGNvbnN0IHh5OiBiaWd1aW50ID0geCAqIHk7CiAgICBkdXAyCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjAgLy8gImEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDE1CiAgICAvLyBjb25zdCBhXyA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlKTsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNwogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjIKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyMwogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjQKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjgKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjYKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzEKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50SW5jcmVhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjQgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM1CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiB0b1N5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYW1vdW50IC8gdG9rZW5BbW91bnRSZWR1Y2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAwCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzcKICAgIC8vIH0gZWxzZSBpZiAodG9rZW5BbW91bnRJbmNyZWFzZSA+IDApIHsKICAgIGZyYW1lX2RpZyAxCiAgICBieiB0b1N5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzOAogICAgLy8gcmV0dXJuIGFtb3VudCAqIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAqCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyByZXR1cm4gYW1vdW50OwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKZnJvbVN5c3RlbVByZWNpc2lvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MwogICAgLy8gcHJpdmF0ZSBmcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQ4CiAgICAvLyByZXR1cm4gYW1vdW50ICogdG9rZW5BbW91bnRSZWR1Y2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAwCiAgICAqCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gfSBlbHNlIGlmICh0b2tlbkFtb3VudEluY3JlYXNlID4gMCkgewogICAgZnJhbWVfZGlnIDEKICAgIGJ6IGZyb21TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTAKICAgIC8vIHJldHVybiBhbW91bnQgLyB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmZyb21TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUyCiAgICAvLyByZXR1cm4gYW1vdW50OwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNxcnQobjogYnl0ZXMpIC0+IGJ5dGVzOgpzcXJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBwcml2YXRlIHNxcnQobjogYmlndWludCk6IGJpZ3VpbnQgewogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGFzc2VydChuID4gMG4sICduIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj4KICAgIGFzc2VydCAvLyBuIG11c3QgYmUgbm9uLW5lZ2F0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTcKICAgIC8vIGlmIChuID09PSAwbikgcmV0dXJuIDBuOwogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDIKICAgIHB1c2hieXRlcyAweAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnNxcnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDU4CiAgICAvLyBpZiAobiA8PSAzbikgcmV0dXJuIDFuOwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyAyNiAvLyAweDAzCiAgICBiPD0KICAgIGJ6IHNxcnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjEKICAgIC8vIGNvbnN0IGJsID0gYml0TGVuZ3RoKEJ5dGVzKG4pKTsKICAgIGZyYW1lX2RpZyAtMQogICAgYml0bGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjIKICAgIC8vIGxldCB3aWRlID0gZXhwdygyLCAoYmwgKyAxKSAvIDIpOwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAvCiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgZXhwdwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYzCiAgICAvLyBjb25zdCBoaSA9IEJpZ1VpbnQod2lkZVswXSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IGxvID0gQmlnVWludCh3aWRlWzFdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NQogICAgLy8gbGV0IHg6IGJpZ3VpbnQgPSBoaSAqIFNISUZUNjQgKyBsbzsKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBjb25zdCBTSElGVDY0OiBiaWd1aW50ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTZuOyAvLyAyXjY0CiAgICBieXRlYyAyNyAvLyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgYioKICAgIGIrCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY4CiAgICAvLyBsZXQgeTogYmlndWludCA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGRpZyAxCiAgICBiLwogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKCnNxcnRfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjkKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICBiPAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5LTQ3MgogICAgLy8gd2hpbGUgKHkgPCB4KSB7CiAgICAvLyAgIHggPSB5OwogICAgLy8gICB5ID0gKHggKyBuIC8geCkgLyAybjsKICAgIC8vIH0KICAgIGJ6IHNxcnRfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcxCiAgICAvLyB5ID0gKHggKyBuIC8geCkgLyAybjsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYi8KICAgIGRpZyAxCiAgICBiKwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgYi8KICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAwCiAgICBiIHNxcnRfd2hpbGVfdG9wQDUKCnNxcnRfYWZ0ZXJfd2hpbGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MwogICAgLy8gcmV0dXJuIHg7CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jYnJ0KG46IGJ5dGVzKSAtPiB1aW50NjQ6CmNicnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIHByaXZhdGUgY2JydChuOiBiaWd1aW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyBpZiAobiA9PT0gMG4pIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYnogY2JydF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY2JydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzgKICAgIC8vIGlmIChuIDwgOG4pIHJldHVybiAxOwogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoYnl0ZXMgMHgwOAogICAgYjwKICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyBjb25zdCBibCA9IGJpdExlbmd0aChCeXRlcyhuKSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJpdGxlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgyCiAgICAvLyBsZXQgd2lkZSA9IGV4cHcoMiwgKGJsICsgMikgLyAzKTsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBwdXNoaW50IDMgLy8gMwogICAgLwogICAgcHVzaGludCAyIC8vIDIKICAgIHN3YXAKICAgIGV4cHcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MwogICAgLy8gY29uc3QgaGkgPSBCaWdVaW50KHdpZGVbMF0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDg0CiAgICAvLyBjb25zdCBsbyA9IEJpZ1VpbnQod2lkZVsxXSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODUKICAgIC8vIGxldCB4OiBiaWd1aW50ID0gaGkgKiBTSElGVDY0ICsgbG87CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMgogICAgLy8gY29uc3QgU0hJRlQ2NDogYmlndWludCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2bjsgLy8gMl42NAogICAgYnl0ZWMgMjcgLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4NQogICAgLy8gbGV0IHg6IGJpZ3VpbnQgPSBoaSAqIFNISUZUNjQgKyBsbzsKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDg5CiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTEKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTIKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDAKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE3CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE0CgpjYnJ0X3doaWxlX3RvcEAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMQogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDE5CiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxNwoKY2JydF9hZnRlcl93aGlsZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMgogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHMoKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTAtNTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gY2xhaW1SZXdhcmRzKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjUzCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjUzCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGZyYW1lX2RpZyAzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU1CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NgogICAgLy8gY29uc3QgcGVuZGluZzogdWludDY0ID0gcmV3YXJkcyAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NwogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTgKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWUgPSByZXdhcmRzOwogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTgKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWUgPSByZXdhcmRzOwogICAgZnJhbWVfZGlnIDEKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHVzZXIgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHVzZXIgfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYwCiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnNldEFkbWluRmVlU2hhcmUoYWRtaW5GZWVTaGFyZUJQOiB1aW50NjQpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUtNjYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0QWRtaW5GZWVTaGFyZShhZG1pbkZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoYWRtaW5GZWVTaGFyZUJQIDw9IEJQLCAnUmV3YXJkTWFuYWdlcjogdG9vIGhpZ2gnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoYWRtaW5GZWVTaGFyZUJQIDw9IEJQLCAnUmV3YXJkTWFuYWdlcjogdG9vIGhpZ2gnKTsKICAgIDw9CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogdG9vIGhpZ2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjkKICAgIC8vIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlID0gYWRtaW5GZWVTaGFyZUJQOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmNsYWltQWRtaW5GZWUoKSAtPiB2b2lkOgpjbGFpbUFkbWluRmVlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjcyLTczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGNsYWltQWRtaW5GZWUoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NgogICAgLy8gaWYgKGFkbWluRmVlQW1vdW50ID4gMCkgewogICAgYnogY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3Ny04MQogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFkbWluRmVlQW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNCAvLyAib3duZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3Ny04MQogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFkbWluRmVlQW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODIKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgpjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkKHVzZXI6IGJ5dGVzKSAtPiB1aW50NjQ6CnBlbmRpbmdSZXdhcmQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODYtODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcGVuZGluZ1Jld2FyZCh1c2VyOiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyMAogICAgLy8gY29uc3QgUF9TQ0FMRTogYmlndWludCA9IEJpZ1VpbnQoMSA8PCBQKTsKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk2CiAgICAvLyBwcm90ZWN0ZWQgYWRkUmV3YXJkcyhyZXdhcmRBbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk4CiAgICAvLyBpZiAodG90YWxTdXBwbHkgPiAwKSB7CiAgICBieiBhZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk5CiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk5CiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDAKICAgIC8vIHJld2FyZEFtb3VudCAtPSBhZG1pbkZlZVJld2FyZHM7CiAgICBmcmFtZV9kaWcgLTEKICAgIGRpZyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDEKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGIqCiAgICBmcmFtZV9kaWcgMAogICAgaXRvYgogICAgYi8KICAgIGIrCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDEKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDIKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmFkZFJld2FyZHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmRlcG9zaXRMcCh0bzogYnl0ZXMsIGxwQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmRlcG9zaXRMcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHByb3RlY3RlZCBkZXBvc2l0THAodG86IEFjY291bnQsIGxwQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDgKICAgIC8vIGxldCBwZW5kaW5nOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDkKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodG8pLnZhbHVlOwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwOQogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBpZiAodXNlckxwQW1vdW50ID4gMCkgewogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlOwogICAgZnJhbWVfZGlnIDIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAwCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTExCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBmcmFtZV9idXJ5IDEKCmRlcG9zaXRMcF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyB1c2VyTHBBbW91bnQgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE0CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyMAogICAgLy8gY29uc3QgUF9TQ0FMRTogYmlndWludCA9IEJpZ1VpbnQoMSA8PCBQKTsKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIGlmIChwZW5kaW5nID4gMCkgewogICAgZnJhbWVfZGlnIDEKICAgIGJ6IGRlcG9zaXRMcF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTkKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTkKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIwCiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwKG5ld093bmVyOiBieXRlcykgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNi0xNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK",clear:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CiAFAAEIBJBOJhwMdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0CHJlc2VydmVzB2JhbGFuY2UOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAQVH3x1AWEGcm91dGVyDXN0b3BBdXRob3JpdHkRdG9rZW5BbW91bnRSZWR1Y2UTdG9rZW5BbW91bnRJbmNyZWFzZQS6gYB2AQMJAQAAAAAAAAAAMRhAACgnEoHQD2cnByJnJwiAAGcnCyJnKCJnKSJnKyJnJwYiZycMI2cnDSNnMRtBAKiCFwRRbTR7BAGjo/8EdhCkYAToOoerBJLgOxwEIfHd/wTZeK0UBA0bTAYEdb+aKAT0k9ftBI1ctt8E/gSlzgQCjghZBEH8lm4Eq/IAFAQEsWHxBGZZHM8Epa5r0QSgTFvEBDYbYVkEMruwEQS4d57nBOF7r7Q2GgCOFwFhAVQBSAE/ATMBIwEFAOMA0wDHALcAqwCfAJMAhwB4AGkAXQBNAEEAKQARAAIiQzEZFEQxGEQ2GgGICuAjQzEZFEQxGESADBUffHUAAAAAAAAAA7AjQzEZFEQxGEQ2GgEXwByICbMWJxNMULAjQzEZFEQxGESICXEjQzEZFEQxGEQ2GgEXiAlPI0MxGRREMRhEiAjlI0MxGRREMRhENhoBiAY/I0MxGRREMRhENhoBiAYkI0MxGRREMRhEiAYQI0MxGRREMRhEiAX8I0MxGRREMRhEiAXoI0MxGRREMRhEiAXUI0MxGRREMRhENhoBF4gFsiNDMRkURDEYRIgFfSNDMRkURDEYRDYaAReIBVsjQzEZFEQxGEQ2GgE2GgIXNhoDFzYaBCJTiAR7FicTTFCwI0MxGRREMRhENhoBNhoCFzYaAyJTiAO+FicTTFCwI0MxGRREMRhENhoBF4gCcCNDMRkURDEYRIgBfiNDMRkURDEYRCNDMRkURDEYRIgA4iNDMRkjEkQxGESIAK4jQzEZFEQxGBRENhoBNhoCNhoDFzYaBBc2GgUXNhoGF4gAKiNDigEBi/8VSSQNQQAYiwAkCUmLAElOAw9LAkxNi/9MTwJSF0yJIkL/6IoGACcOi/pnKov9ZycUi/xnJxWL+2cnFov6ZycPi/5nJxCL/2ciKmVEcQFMSU8CRIEDDUEAJ4sAgQMJgQpMlCcXTGeLAIEDDEEADoEDiwAJgQpMlCcYTGeJIkL/9yJC/96KAAAxAEkiJwRjRQFAAAaLACcEImaLACInBWNFAUAABosAJwUiZomICK6xIiplRDIKshQishKyESWyECKyAbOAFlBvb2w6IG9wdC1pbiBjb21wbGV0ZWSwiTEAIicVZUQSRIkxACInFmVEEkSJigAAIihlTElPAkQiKWVMSU4CTgNEDUEAEIsBIQQLiwAKIicQZUQPRImLAIsBDEH/94sAIQQLiwEKIicQZUQPRImKAAAiJwxlREQiJwZlTElPAkQiKmVEMRZEMRYjCUk4ECUSREk4FDIKEkRJOBFPAhJESTggMgMSREk4FTIDEkQ4EogE2klOAklEIitlRAgrTGciKGVMSU4CTgNEIillTElOAk4ERAhMQQAFiwRAADSLASORIihlREsBCChMZyIpZUQIKUxniAQiMQAiJwZlRIsACYgG/CIoZUSBgICAgIAgDESJIihlRIsBFosCFksBo4sEFkxLAaJJFSQORCSvTEsBqxdPBAgoTGciKWVEiwMWTwSjTwOiSRUkDkRPAqsXCClMZ0L/n4oBACInDWVERCInBmVEMQBJIicEY0xJTwJESYv/D0QiJwhlTE4CRCJMQQAWiwIWiwOjJwmiiP2riwEiJwVjRAmMBIsCi/8JiwFJIicEY0SL/wlLAScETwJmIicHZUSL/wknB0xnTBaLA6MnCaKI/XMnBUxmiwRBACOxIiplRIsBSU4CshSLBElOArISshElshAisgGzFlAnGUxQsIv/FosBSwFQgATTr6TxTFCwIihlRCIpZURKCCIoZURPAxZLBKNLAhZMSwGiSRUkDkQkr0xLAasXTwNMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUxnIihlRCIpZUQIDUQiK2VEi/8PRCIrZUSL/wkrTGeIAq8iJwZlRIsADESxIiplRIv/iANBMQCyFLISshElshAisgGziYoDAYAAiP2FIkcDi/5BAGGL/0AADSInD2VEi/4LIQQKjAKL/osCCYgC1kmIAwOL/kwJjAIiKGVESwEIKExnIitlRAgrTGciKGVEiAGbSYwAIillRAxBAAkiKWVEiwAJjAEpiwBniwJJiATIjAOLAYwEiwOLBCIqZUQWi/4WSwIWTwQWi/1PBFBPA1BPAlBMUIAEK7vso0xQsIj9BYwAiYoEAYAASYj85SJHBIv9QQCFIillRIv9CClMZyIpZUSIASdJjAAiKGVMSU4CjAFEDEEADYsBiwAJSYwCiAJUjAMiK2VEiwJJTwIORCIrZURMCStMZ4v/QAANIicPZUSLAwshBAqMBIsDiwRJTgIJKIsAZ0mL/g9EsSIqZUSL/LIUSwGyErIRJbIQIrIBs0sBiAQCjAaMBYsFiwYiKmVEFov9FksCFk8EFov8TwRQTwNQTwJQTFCABNPx1UJMULCI/EGMAImKAQCIBKOL/yEEDkQnD4v/Z4mKAACIBJEiJwZlTElPAkQiJwdlTElOAk4DRA1BAAoxAIsAiwEJiAPWiYoBAIgEaIv/IQQORCcQi/9niYj75CcMImeJiARRJwwjZ4mI+9QnDSJniYgEQScNI2eJigEAiAQ2JxaL/2eJigEAiAQqJxWL/2eJigEBIkmL/xZJIicGZUQWSU4CIicUZUSBApAWSU4DJxGjTgKmSUEAdIsDiwKhiwSjjACLBkEAWosAiwOnQQBHiwCLA6GMASOLBIsDSU4Co0sBo6OLAUmjiwJJTwKjTwKgo4gBFkxBABWLAosBo6CLBYsCo6InCqCI+kmMAImLAosBo6FC/+iLA4sAoYwBIkL/tosAiwOgjAEiQv+riwKLA6FC/4mKAAAiKGVEFiIpZUQWSqMiJxRlRBZJSwKjTwRPBKCjSU4CTgOAAQSjJwqhTwKjJxqiSwFLAqNLAUsCo08Co6CIAJRJTgJKoIgA8k4DpEEAFYsAoYgA5osBTAmMAYsBI5AnBkxniYsATKGIANCLAQiMAUL/6IoBASInF2VMSU8CRCInGGVMTgJEQQAIi/+LAAqMAImLAUEACIv/iwELjACJi/+MAImKAQEiJxdlTElPAkQiJxhlTE4CREEACIv/iwALjACJiwFBAAiL/4sBCowAiYv/jACJigEBIkmL/4AApUSL/4AAqEEABYAAjACJi/8nGqZBAAUnCowAiYv/kyMIgQIKgQJMlUwWTBZMJxujoEmMAIv/SwGioCcRoowBiwGLAKRBABWL/4sBSU4CoksBoCcRoowBjABC/+OJigEBIkcDi/+AAKhBAAQijACJi/+AAQikQQAEI4wAiYv/k4ECCIEDCoECTJVMFkwWTCcbo6CMAYsBSaNJjAOAAKhAACcnEYsBSU4Co4v/iwOioCcaokmMAKhAAAuLAScKoYsAqEEAPYsAjAGLAScKoEmMAklLAaOji/+mQQAHiwKMAUL/5osBSUsBo6OL/6VBAAqLAScKoYwBQv/piwGI+EKMAImLAIwBQv+MigAAgABJMQBJIicEY0xJTwJEQQBIiwMWIicIZUSjJwmiiPgUSYwBiwIiJwVjRAlJjABBACiLAkknBYsBZrEiKmVESwGyFIsASU4CshKyESWyECKyAbMWUCcZTFCwiYoBAIgBNYv/IQQORCcSi/9niYoAAIgBIyInC2VMSU8CREEAHbEiKmVEIicOZUSyFIsAshKyESWyECKyAbMnCyJniYoBAYv/IicEY0QWIicIZUSjJwmiiPeBi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IicEY0xJTwJEQQAWiwIWiwCjJwmiiPcVi/4iJwVjRAmMAYsCi/8Ii/4iJwRjRIv/CIv+JwRPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPbfi/4nBU8CZosBQQAjsSIqZUSL/rIUiwFJTgKyErIRJbIQIrIBsxaL/kxQJxlMULCL/xaL/kxQgATPq4cjTFCwiTEAIicOZUQSRImKAQCI//AnDov/Z4k=",clear:"CoEBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{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:{}},fi=class{constructor(i){this.value=i}asByteArray(){return this.value}asString(){return this.value!==void 0?Y.from(this.value).toString("utf-8"):void 0}},M=class r{static get create(){return{_resolveByMethod(i){switch(i.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return r.create.createApplication(i)}throw new Error("Unknown ' + verb + ' method")},createApplication(i){return{...i,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.owner,i.args.router,i.args.a,i.args.assetId,i.args.feeShareBp,i.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(i){return{...i,method:"optInToApplication()void",args:Array.isArray(i.args)?i.args:[]}}}}static optInAsset(i){return{...i,method:"optInAsset()void",args:Array.isArray(i.args)?i.args:[]}}static noop(i){return{...i,method:"noop()void",args:Array.isArray(i.args)?i.args:[]}}static deposit(i){return{...i,method:"deposit()void",args:Array.isArray(i.args)?i.args:[]}}static withdraw(i){return{...i,method:"withdraw(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amountLp]}}static swapToVUsd(i){return{...i,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(i.args)?i.args:[i.args.user,i.args.amount,i.args.zeroFee]}}static swapFromVUsd(i){return{...i,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(i.args)?i.args:[i.args.user,i.args.amount,i.args.receiveAmountMin,i.args.zeroFee]}}static setFeeShare(i){return{...i,method:"setFeeShare(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.feeShareBp]}}static adjustTotalLpAmount(i){return{...i,method:"adjustTotalLpAmount()void",args:Array.isArray(i.args)?i.args:[]}}static setBalanceRatioMinBp(i){return{...i,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.balanceRatioMinBp]}}static stopDeposit(i){return{...i,method:"stopDeposit()void",args:Array.isArray(i.args)?i.args:[]}}static startDeposit(i){return{...i,method:"startDeposit()void",args:Array.isArray(i.args)?i.args:[]}}static stopWithdraw(i){return{...i,method:"stopWithdraw()void",args:Array.isArray(i.args)?i.args:[]}}static startWithdraw(i){return{...i,method:"startWithdraw()void",args:Array.isArray(i.args)?i.args:[]}}static setStopAuthority(i){return{...i,method:"setStopAuthority(address)void",args:Array.isArray(i.args)?i.args:[i.args.stopAuthority]}}static setRouter(i){return{...i,method:"setRouter(address)void",args:Array.isArray(i.args)?i.args:[i.args.router]}}static claimRewards(i){return{...i,method:"claimRewards()void",args:Array.isArray(i.args)?i.args:[]}}static setAdminFeeShare(i){return{...i,method:"setAdminFeeShare(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.adminFeeShareBp]}}static claimAdminFee(i){return{...i,method:"claimAdminFee()void",args:Array.isArray(i.args)?i.args:[]}}static pendingReward(i){return{...i,method:"pendingReward(account)uint64",args:Array.isArray(i.args)?i.args:[i.args.user]}}static decimals(i){return{...i,method:"decimals()uint64",args:Array.isArray(i.args)?i.args:[]}}static transferOwnership(i){return{...i,method:"transferOwnership(address)void",args:Array.isArray(i.args)?i.args:[i.args.newOwner]}}};var Zi=class r{appClient;constructor(i){this.appClient=i instanceof Bi?i:new Bi({...i,appSpec:Wi})}decodeReturnValue(i,a){return a!==void 0?ld(a,this.appClient.getABIMethod(i),Wi.structs):void 0}static async fromCreatorAndName(i){return new r(await Bi.fromCreatorAndName({...i,appSpec:Wi}))}static async fromNetwork(i){return new r(await Bi.fromNetwork({...i,appSpec:Wi}))}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:(i={args:[]})=>this.appClient.params.optIn(M.optIn.optInToApplication(i))},clearState:i=>this.appClient.params.bare.clearState(i),optInAsset:(i={args:[]})=>this.appClient.params.call(M.optInAsset(i)),noop:(i={args:[]})=>this.appClient.params.call(M.noop(i)),deposit:(i={args:[]})=>this.appClient.params.call(M.deposit(i)),withdraw:i=>this.appClient.params.call(M.withdraw(i)),swapToVUsd:i=>this.appClient.params.call(M.swapToVUsd(i)),swapFromVUsd:i=>this.appClient.params.call(M.swapFromVUsd(i)),setFeeShare:i=>this.appClient.params.call(M.setFeeShare(i)),adjustTotalLpAmount:(i={args:[]})=>this.appClient.params.call(M.adjustTotalLpAmount(i)),setBalanceRatioMinBp:i=>this.appClient.params.call(M.setBalanceRatioMinBp(i)),stopDeposit:(i={args:[]})=>this.appClient.params.call(M.stopDeposit(i)),startDeposit:(i={args:[]})=>this.appClient.params.call(M.startDeposit(i)),stopWithdraw:(i={args:[]})=>this.appClient.params.call(M.stopWithdraw(i)),startWithdraw:(i={args:[]})=>this.appClient.params.call(M.startWithdraw(i)),setStopAuthority:i=>this.appClient.params.call(M.setStopAuthority(i)),setRouter:i=>this.appClient.params.call(M.setRouter(i)),claimRewards:(i={args:[]})=>this.appClient.params.call(M.claimRewards(i)),setAdminFeeShare:i=>this.appClient.params.call(M.setAdminFeeShare(i)),claimAdminFee:(i={args:[]})=>this.appClient.params.call(M.claimAdminFee(i)),pendingReward:i=>this.appClient.params.call(M.pendingReward(i)),decimals:(i={args:[]})=>this.appClient.params.call(M.decimals(i)),transferOwnership:i=>this.appClient.params.call(M.transferOwnership(i))};createTransaction={optIn:{optInToApplication:(i={args:[]})=>this.appClient.createTransaction.optIn(M.optIn.optInToApplication(i))},clearState:i=>this.appClient.createTransaction.bare.clearState(i),optInAsset:(i={args:[]})=>this.appClient.createTransaction.call(M.optInAsset(i)),noop:(i={args:[]})=>this.appClient.createTransaction.call(M.noop(i)),deposit:(i={args:[]})=>this.appClient.createTransaction.call(M.deposit(i)),withdraw:i=>this.appClient.createTransaction.call(M.withdraw(i)),swapToVUsd:i=>this.appClient.createTransaction.call(M.swapToVUsd(i)),swapFromVUsd:i=>this.appClient.createTransaction.call(M.swapFromVUsd(i)),setFeeShare:i=>this.appClient.createTransaction.call(M.setFeeShare(i)),adjustTotalLpAmount:(i={args:[]})=>this.appClient.createTransaction.call(M.adjustTotalLpAmount(i)),setBalanceRatioMinBp:i=>this.appClient.createTransaction.call(M.setBalanceRatioMinBp(i)),stopDeposit:(i={args:[]})=>this.appClient.createTransaction.call(M.stopDeposit(i)),startDeposit:(i={args:[]})=>this.appClient.createTransaction.call(M.startDeposit(i)),stopWithdraw:(i={args:[]})=>this.appClient.createTransaction.call(M.stopWithdraw(i)),startWithdraw:(i={args:[]})=>this.appClient.createTransaction.call(M.startWithdraw(i)),setStopAuthority:i=>this.appClient.createTransaction.call(M.setStopAuthority(i)),setRouter:i=>this.appClient.createTransaction.call(M.setRouter(i)),claimRewards:(i={args:[]})=>this.appClient.createTransaction.call(M.claimRewards(i)),setAdminFeeShare:i=>this.appClient.createTransaction.call(M.setAdminFeeShare(i)),claimAdminFee:(i={args:[]})=>this.appClient.createTransaction.call(M.claimAdminFee(i)),pendingReward:i=>this.appClient.createTransaction.call(M.pendingReward(i)),decimals:(i={args:[]})=>this.appClient.createTransaction.call(M.decimals(i)),transferOwnership:i=>this.appClient.createTransaction.call(M.transferOwnership(i))};send={optIn:{optInToApplication:async(i={args:[]})=>{let a=await this.appClient.send.optIn(M.optIn.optInToApplication(i));return{...a,return:a.return}}},clearState:i=>this.appClient.send.bare.clearState(i),optInAsset:async(i={args:[]})=>{let a=await this.appClient.send.call(M.optInAsset(i));return{...a,return:a.return}},noop:async(i={args:[]})=>{let a=await this.appClient.send.call(M.noop(i));return{...a,return:a.return}},deposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.deposit(i));return{...a,return:a.return}},withdraw:async i=>{let a=await this.appClient.send.call(M.withdraw(i));return{...a,return:a.return}},swapToVUsd:async i=>{let a=await this.appClient.send.call(M.swapToVUsd(i));return{...a,return:a.return}},swapFromVUsd:async i=>{let a=await this.appClient.send.call(M.swapFromVUsd(i));return{...a,return:a.return}},setFeeShare:async i=>{let a=await this.appClient.send.call(M.setFeeShare(i));return{...a,return:a.return}},adjustTotalLpAmount:async(i={args:[]})=>{let a=await this.appClient.send.call(M.adjustTotalLpAmount(i));return{...a,return:a.return}},setBalanceRatioMinBp:async i=>{let a=await this.appClient.send.call(M.setBalanceRatioMinBp(i));return{...a,return:a.return}},stopDeposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.stopDeposit(i));return{...a,return:a.return}},startDeposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.startDeposit(i));return{...a,return:a.return}},stopWithdraw:async(i={args:[]})=>{let a=await this.appClient.send.call(M.stopWithdraw(i));return{...a,return:a.return}},startWithdraw:async(i={args:[]})=>{let a=await this.appClient.send.call(M.startWithdraw(i));return{...a,return:a.return}},setStopAuthority:async i=>{let a=await this.appClient.send.call(M.setStopAuthority(i));return{...a,return:a.return}},setRouter:async i=>{let a=await this.appClient.send.call(M.setRouter(i));return{...a,return:a.return}},claimRewards:async(i={args:[]})=>{let a=await this.appClient.send.call(M.claimRewards(i));return{...a,return:a.return}},setAdminFeeShare:async i=>{let a=await this.appClient.send.call(M.setAdminFeeShare(i));return{...a,return:a.return}},claimAdminFee:async(i={args:[]})=>{let a=await this.appClient.send.call(M.claimAdminFee(i));return{...a,return:a.return}},pendingReward:async i=>{let a=await this.appClient.send.call(M.pendingReward(i));return{...a,return:a.return}},decimals:async(i={args:[]})=>{let a=await this.appClient.send.call(M.decimals(i));return{...a,return:a.return}},transferOwnership:async i=>{let a=await this.appClient.send.call(M.transferOwnership(i));return{...a,return:a.return}}};clone(i){return new r(this.appClient.clone(i))}async pendingReward(i){return(await this.appClient.send.call(M.pendingReward(i))).return}async decimals(i={args:[]}){return(await this.appClient.send.call(M.decimals(i))).return}state={global:{getAll:async()=>{let i=await this.appClient.state.global.getAll();return{feeShareBp:i.feeShareBP,router:i.router,tokenBalance:i.tokenBalance,vUsdBalance:i.vUsdBalance,balanceRatioMinBp:i.balanceRatioMinBP,reserves:i.reserves,a:i.a,d:i.d,tokenAmountReduce:i.tokenAmountReduce,tokenAmountIncrease:i.tokenAmountIncrease,stopAuthority:i.stopAuthority,canDeposit:i.canDeposit,canWithdraw:i.canWithdraw,asset:i.asset,adminFeeShareBp:i.adminFeeShareBP,totalSupply:i.totalSupply,accRewardPerShareP:new fi(i.accRewardPerShareP),adminFeeAmount:i.adminFeeAmount,owner:i.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 fi(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:i=>{let a=typeof i=="string"?i:ud(i.publicKey);return{getAll:async()=>{let o=await this.appClient.state.local(a).getAll();return{balance:o.balance,userRewardDebt:o.userRewardDebt}},balance:async()=>await this.appClient.state.local(a).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(a).getValue("userRewardDebt")}}};newGroup(){let i=this,a=this.algorand.newGroup(),o=Promise.resolve(),s=[];return{optInAsset(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.optInAsset(d))),s.push(void 0),this},noop(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.noop(d))),s.push(void 0),this},deposit(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.deposit(d))),s.push(void 0),this},withdraw(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.withdraw(d))),s.push(void 0),this},swapToVUsd(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.swapToVUsd(d))),s.push(A=>i.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",A)),this},swapFromVUsd(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.swapFromVUsd(d))),s.push(A=>i.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",A)),this},setFeeShare(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setFeeShare(d))),s.push(void 0),this},adjustTotalLpAmount(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.adjustTotalLpAmount(d))),s.push(void 0),this},setBalanceRatioMinBp(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setBalanceRatioMinBp(d))),s.push(void 0),this},stopDeposit(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.stopDeposit(d))),s.push(void 0),this},startDeposit(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.startDeposit(d))),s.push(void 0),this},stopWithdraw(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.stopWithdraw(d))),s.push(void 0),this},startWithdraw(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.startWithdraw(d))),s.push(void 0),this},setStopAuthority(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setStopAuthority(d))),s.push(void 0),this},setRouter(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setRouter(d))),s.push(void 0),this},claimRewards(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.claimRewards(d))),s.push(void 0),this},setAdminFeeShare(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.setAdminFeeShare(d))),s.push(void 0),this},claimAdminFee(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.claimAdminFee(d))),s.push(void 0),this},pendingReward(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.pendingReward(d))),s.push(A=>i.decodeReturnValue("pendingReward(account)uint64",A)),this},decimals(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.decimals(d))),s.push(A=>i.decodeReturnValue("decimals()uint64",A)),this},transferOwnership(d){return o=o.then(async()=>a.addAppCallMethodCall(await i.params.transferOwnership(d))),s.push(void 0),this},get optIn(){return{optInToApplication:d=>(o=o.then(async()=>a.addAppCallMethodCall(await i.params.optIn.optInToApplication(d))),s.push(void 0),this)}},clearState(d){return o=o.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,A){return o=o.then(()=>a.addTransaction(d,A)),this},async composer(){return await o,a},async simulate(d){await o;let A=await(d?a.simulate(d):a.simulate());return{...A,returns:A.returns?.map((u,b)=>s[b]!==void 0?s[b](u):u.returnValue)}},async send(d){await o;let A=await a.send(d);return{...A,returns:A.returns?.map((u,b)=>s[b]!==void 0?s[b](u):u.returnValue)}}}}};p();I();C();p();I();C();var be=class{lpAmount;rewardDebt;constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return z(this.lpAmount,3).toFixed()}earned(i,a){let o=yo(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?z(o,a).toFixed():o}};p();I();C();var Se=class{};var Tn=class extends Se{constructor(a,o){super();this.algorand=a;this.api=o}chainType="ALG";P=48;async buildRawTransactionClaimRewards(a){let o=a.accountAddress,s=BigInt(a.token.tokenAddress),d=BigInt(a.token.poolAddress),A=this.getPool(d),u=this.algorand.newGroup();u.addAppCallMethodCall(await A.params.claimRewards({args:[],sender:o,extraFee:Xt(1),assetReferences:[s]}));let{transactions:b}=await u.buildTransactions();return b=ka(b),bt(...b)}async buildRawTransactionDeposit(a){let o=a.accountAddress,s=BigInt(a.amount),d=BigInt(a.token.tokenAddress),A=BigInt(a.token.poolAddress),u=this.getPool(A),b=await oi(A,o,this.algorand),y=this.algorand.newGroup();b||y.addAppCallMethodCall(await u.params.optIn.optInToApplication({args:[],sender:o})),y.addAssetTransfer({assetId:d,amount:s,sender:o,receiver:u.appAddress}),y.addAppCallMethodCall(await u.params.deposit({args:[],sender:o,extraFee:Xt(1)})),Qt({composer:y,appId:A,sender:o,count:4});let{transactions:v}=await y.buildTransactions();return v=ka(v),bt(...v)}async buildRawTransactionWithdraw(a){let o=a.accountAddress,s=BigInt(a.amount),d=BigInt(a.token.tokenAddress),A=BigInt(a.token.poolAddress),u=this.getPool(A),b=this.algorand.newGroup();b.addAppCallMethodCall(await u.params.withdraw({args:{amountLp:s},sender:o,extraFee:Xt(2),assetReferences:[d]})),Qt({composer:b,appId:A,sender:o,count:4});let{transactions:y}=await b.buildTransactions();return y=ka(y),bt(...y)}async getPoolInfoFromChain(a){let s=await this.getPool(BigInt(a.poolAddress)).state.global.getAll(),d=s.a?.toString(),A=s.d?.toString(),u=s.tokenBalance?.toString(),b=s.vUsdBalance?.toString(),y=s.totalSupply?.toString(),v=md(s.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(d&&A&&u&&b&&y&&v){let R=ve({tokenBalance:u,vUsdBalance:b});return{aValue:d,dValue:A,tokenBalance:u,vUsdBalance:b,totalLpAmount:y,accRewardPerShareP:v,p:this.P,imbalance:R}}throw new V("Unable to pool info from chain")}async getUserBalanceInfo(a,o){let s=BigInt(o.poolAddress),d=this.getPool(s);try{let{balance:A,userRewardDebt:u}=await d.state.local(a).getAll();if(A!==void 0&&u!==void 0)return new be({lpAmount:A.toString(),rewardDebt:u.toString()})}catch{let b=(await this.algorand.account.getInformation(a)).appsLocalState;if(b&&!b.find(({id:v})=>v===s))return new be({lpAmount:"0",rewardDebt:"0"})}throw new V("Unable to get user balance")}getPool(a){return this.algorand.client.getTypedAppClientById(Zi,{appId:a})}};p();I();C();import{Web3 as ft}from"web3";p();I();C();var pd={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"}]},wn=pd;var Xn=class extends Se{constructor(a,o){super();this.web3=a;this.api=o}chainType="EVM";P=52;async getUserBalanceInfo(a,o){let s;try{s=await ei(this.getUserBalanceInfoByBatch(a,o),`Cannot get UserBalanceInfo for ${o.name} on ${o.chainSymbol}`,5e3)}catch{s=await ma(()=>this.getUserBalanceInfoPerProperty(a,o),`Cannot get UserBalanceInfo for ${o.name} on ${o.chainSymbol}`,5,2e3)}return s}async getPoolInfoFromChain(a){let o;try{o=await ei(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{o=await ma(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return o}async getUserBalanceInfoByBatch(a,o){let s=new this.web3.eth.BatchRequest,d=this.getPoolContract(o.poolAddress),A=d.methods.userRewardDebt(a).encodeABI(),u=d.methods.balanceOf(a).encodeABI();s.add({method:"eth_call",params:[{to:o.poolAddress,data:A},"latest"]}),s.add({method:"eth_call",params:[{to:o.poolAddress,data:u},"latest"]});let[b,y]=await s.execute();if(b&&y&&!b.error&&!y.error)return new be({lpAmount:ft.utils.toBigInt(y.result).toString(),rewardDebt:ft.utils.toBigInt(b.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,o){let s=(await this.getPoolContract(o.poolAddress).methods.userRewardDebt(a).call()).toString(),d=(await this.getPoolContract(o.poolAddress).methods.balanceOf(a).call()).toString();return new be({lpAmount:d,rewardDebt:s})}async getPoolInfoByBatch(a){let o=new this.web3.eth.BatchRequest,s=this.getPoolContract(a.poolAddress),d=s.methods.a().encodeABI(),A=s.methods.d().encodeABI(),u=s.methods.tokenBalance().encodeABI(),b=s.methods.vUsdBalance().encodeABI(),y=s.methods.totalSupply().encodeABI(),v=s.methods.accRewardPerShareP().encodeABI();o.add({method:"eth_call",params:[{to:a.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:a.poolAddress,data:A},"latest"]}),o.add({method:"eth_call",params:[{to:a.poolAddress,data:u},"latest"]}),o.add({method:"eth_call",params:[{to:a.poolAddress,data:b},"latest"]}),o.add({method:"eth_call",params:[{to:a.poolAddress,data:y},"latest"]}),o.add({method:"eth_call",params:[{to:a.poolAddress,data:v},"latest"]});let[R,F,Z,X,N,S]=await o.execute();if(R&&F&&Z&&X&&N&&S&&!R.error&&!F.error&&!Z.error&&!X.error&&!N.error&&!S.error){let P=ft.utils.toBigInt(Z.result).toString(),T=ft.utils.toBigInt(X.result).toString(),L=ve({tokenBalance:P,vUsdBalance:T});return{aValue:ft.utils.toBigInt(R.result).toString(),dValue:ft.utils.toBigInt(F.result).toString(),tokenBalance:P,vUsdBalance:T,totalLpAmount:ft.utils.toBigInt(N.result).toString(),accRewardPerShareP:ft.utils.toBigInt(S.result).toString(),p:this.P,imbalance:L}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let o=this.getPoolContract(a.poolAddress),s=(await o.methods.a().call()).toString(),d=(await o.methods.d().call()).toString(),A=(await o.methods.tokenBalance().call()).toString(),u=(await o.methods.vUsdBalance().call()).toString(),b=(await o.methods.totalSupply().call()).toString(),y=(await o.methods.accRewardPerShareP().call()).toString(),v=ve({tokenBalance:A,vUsdBalance:u});return{aValue:s,dValue:d,tokenBalance:A,vUsdBalance:u,totalLpAmount:b,accRewardPerShareP:y,p:this.P,imbalance:v}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(wn.abi,a)}};p();I();C();var Gi=class{constructor(i,a,o,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o;this.tokenService=s}async approve(i,a){if(a){let o=i,s=a;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress},o)}else{let o=i;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress})}}async deposit(i,a){return _(i.amount),ee("amount",i.amount,i.token.decimals),i.amount=O(i.amount,i.token.decimals).toFixed(),tn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return _(i.amount),ee("amount",i.amount,i.token.decimals),i.amount=O(i.amount,3).toFixed(),tn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return tn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};p();I();C();import{AnchorProvider as Cd,BN as vr,Program as Id,Spl as bd,web3 as yd}from"@project-serum/anchor";import{Connection as hd,PublicKey as Zt}from"@solana/web3.js";var Fi=class extends Se{constructor(a,o){super();this.solanaRpcUrl=a;this.api=o}chainType="SOLANA";P=48;async getUserBalanceInfo(a,o){let s=this.buildAnchorProvider(a),d=this.getBridge(o.bridgeAddress,s),A=new Zt(o.poolAddress),u=await d.account.pool.fetch(A);try{let b=await Ya(new Zt(a),u.mint,d.programId),{lpAmount:y,rewardDebt:v}=await d.account.userDeposit.fetch(b);return new be({lpAmount:y.toString(),rewardDebt:v.toString()})}catch{return new be({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let o=this.buildAnchorProvider(a.bridgeAddress),s=await this.getBridge(a.bridgeAddress,o).account.pool.fetch(a.poolAddress),d=s.vUsdBalance.toString(),A=s.tokenBalance.toString(),u=ve({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:u}}async buildRawTransactionDeposit(a){let{bridge:o,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),A=await o.methods.deposit(new vr(a.amount)).accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new Zt(a.accountAddress),await _t(A,a.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionWithdraw(a){let{bridge:o,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),A=await o.methods.withdraw(new vr(a.amount)).accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new Zt(a.accountAddress),await _t(A,a.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionClaimRewards(a){let{bridge:o,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),A=await o.methods.claimRewards().accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new Zt(a.accountAddress),await _t(A,a.txFeeParams,this.solanaRpcUrl),A}async prepareDataForTransaction(a){let o=this.buildAnchorProvider(a.accountAddress),s=this.getBridge(a.token.bridgeAddress,o),{accounts:d,preInstructions:A}=await this._getLPTransactionData(s,a.token.poolAddress,a.accountAddress,o);return{bridge:s,accounts:d,preInstructions:A}}getBridge(a,o){return new Id(Zn,a,o)}buildAnchorProvider(a){let o=new hd(this.solanaRpcUrl,"confirmed"),s=new Zt(a);return new Cd(o,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,o,s,d){let A=new Zt(s),u=await ht(a.programId),b=await Ut(a.programId),y=new Zt(o),R=(await a.account.pool.fetch(y)).mint,F=await nt(A,R),Z=await Dt(R,a.programId),X=await Ya(A,R,a.programId),N=[yd.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Et(F,d)}catch{let L=await bd.associatedToken(d).methods.create().accounts({mint:R,owner:A,associatedAccount:F}).instruction();N.push(L)}try{await a.account.userDeposit.fetch(X)}catch{let T=await a.methods.initDepositAccount().accounts({mint:R,user:A,userDeposit:X}).instruction();N.push(T)}return{accounts:{mint:R,user:A,config:u,pool:y,bridgeAuthority:b,userDeposit:X,userToken:F,bridgeToken:Z},preInstructions:N}}};p();I();C();import{contract as mw}from"@stellar/stellar-sdk";p();I();C();import{contract as t}from"@stellar/stellar-sdk";var vd=t.Spec,Yd=t.Client;var Ni=class extends Yd{constructor(a){super(new vd(["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"]),a);this.options=a}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}};p();I();C();import{contract as W2,rpc as Rd}from"@stellar/stellar-sdk";var Yr=Rd.Api;function nn(r){let{simulation:i,options:a}=r;if(!i)throw new Error("Soroban assembled transaction does not have simulation");if(Yr.isSimulationSuccess(i))return i.result==null?void 0:a.parseResultXdr(i.result.retval);throw new Error(i.error)}function an(r){let{simulation:i}=r;if(!i)throw new Error("Soroban assembled transaction does not have simulation");return Yr.isSimulationError(i)}var Ti=class extends Se{constructor(a,o,s){super();this.nodeRpcUrlsConfig=a;this.params=o;this.api=s}chainType="SRB";P=48;async getUserBalanceInfo(a,o){let d=await this.getContract(o.poolAddress).get_user_deposit({user:a});if(an(d))throw new V;let A=nn(d);if(!A)throw new V;let u=A.unwrap();return new be({lpAmount:u.lp_amount.toString(),rewardDebt:u.reward_debt.toString()})}async getPoolInfoFromChain(a){let s=await this.getContract(a.poolAddress).get_pool();if(an(s))throw new V;let d=nn(s);if(!d)throw new V;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:ve({tokenBalance:A.token_balance.toString(),vUsdBalance:A.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,o){let s={publicKey:o,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Ni(s)}};p();I();C();import{SuiClient as Nd}from"@mysten/sui/client";import{Transaction as ji}from"@mysten/sui/transactions";var rn=et(Rt());p();I();C();Ye();p();I();C();Ye();import{bcs as Rr}from"@mysten/sui/bcs";import{fromB64 as Bd}from"@mysten/sui/utils";function wi(r){return r=k(r),r.startsWith(`${Wt}::balance::Balance<`)}var fe=class r{__StructClass=!0;static get $typeName(){return`${Wt}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;value;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.value=a.value}static reified(i){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName,K(i)),typeArgs:[K(i)],isPhantom:r.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>r.fromFields(i,a),fromFieldsWithTypes:a=>r.fromFieldsWithTypes(i,a),fromBcs:a=>r.fromBcs(i,a),bcs:r.bcs,fromJSONField:a=>r.fromJSONField(i,a),fromJSON:a=>r.fromJSON(i,a),fromSuiParsedData:a=>r.fromSuiParsedData(i,a),fromSuiObjectData:a=>r.fromSuiObjectData(i,a),fetch:async(a,o)=>r.fetch(a,i,o),new:a=>new r([K(i)],a),kind:"StructClassReified"}}static get r(){return r.reified}static phantom(i){return le(r.reified(i))}static get p(){return r.phantom}static get bcs(){return Rr.struct("Balance",{value:Rr.u64()})}static fromFields(i,a){return r.reified(i).new({value:te("u64",a.value)})}static fromFieldsWithTypes(i,a){if(!wi(a.type))throw new Error("not a Balance type");return gt(a,[i]),r.reified(i).new({value:$("u64",a.fields.value)})}static fromBcs(i,a){return r.fromFields(i,r.bcs.parse(a))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return r.reified(i).new({value:q("u64",a.value)})}static fromJSON(i,a){if(a.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return at(ne(r.$typeName,K(i)),a.$typeArgs,[i]),r.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!wi(a.type))throw new Error(`object at ${a.fields.id} is not a Balance object`);return r.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!wi(a.bcs.type))throw new Error("object at is not a Balance object");let o=We(a.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let s=k(o[0]),d=k(K(i));if(s!==k(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return r.fromBcs(i,Bd(a.bcs.bcsBytes))}if(a.content)return r.fromSuiParsedData(i,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(i,a,o){let s=await i.getObject({id:o,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching Balance object at id ${o}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!wi(s.data.bcs.type))throw new Error(`object at id ${o} is not a Balance object`);return r.fromSuiObjectData(a,s.data)}};var Oa=et(Rt());p();I();C();Ye();var za=et(Rt());import{bcs as Xi}from"@mysten/sui/bcs";import{fromB64 as Wd}from"@mysten/sui/utils";function Si(r){return r=k(r),r.startsWith(`${za.PKG_V1}::pool_rewards::PoolRewards<`)}var Ht=class r{__StructClass=!0;static get $typeName(){return`${za.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.accRewardPerShareP=a.accRewardPerShareP,this.adminFeeShareBp=a.adminFeeShareBp,this.adminFee=a.adminFee,this.rewards=a.rewards,this.lpSupply=a.lpSupply}static reified(i){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName,K(i)),typeArgs:[K(i)],isPhantom:r.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>r.fromFields(i,a),fromFieldsWithTypes:a=>r.fromFieldsWithTypes(i,a),fromBcs:a=>r.fromBcs(i,a),bcs:r.bcs,fromJSONField:a=>r.fromJSONField(i,a),fromJSON:a=>r.fromJSON(i,a),fromSuiParsedData:a=>r.fromSuiParsedData(i,a),fromSuiObjectData:a=>r.fromSuiObjectData(i,a),fetch:async(a,o)=>r.fetch(a,i,o),new:a=>new r([K(i)],a),kind:"StructClassReified"}}static get r(){return r.reified}static phantom(i){return le(r.reified(i))}static get p(){return r.phantom}static get bcs(){return Xi.struct("PoolRewards",{acc_reward_per_share_p:Xi.u128(),admin_fee_share_bp:Xi.u64(),admin_fee:fe.bcs,rewards:fe.bcs,lp_supply:Xi.u64()})}static fromFields(i,a){return r.reified(i).new({accRewardPerShareP:te("u128",a.acc_reward_per_share_p),adminFeeShareBp:te("u64",a.admin_fee_share_bp),adminFee:te(fe.reified(i),a.admin_fee),rewards:te(fe.reified(i),a.rewards),lpSupply:te("u64",a.lp_supply)})}static fromFieldsWithTypes(i,a){if(!Si(a.type))throw new Error("not a PoolRewards type");return gt(a,[i]),r.reified(i).new({accRewardPerShareP:$("u128",a.fields.acc_reward_per_share_p),adminFeeShareBp:$("u64",a.fields.admin_fee_share_bp),adminFee:$(fe.reified(i),a.fields.admin_fee),rewards:$(fe.reified(i),a.fields.rewards),lpSupply:$("u64",a.fields.lp_supply)})}static fromBcs(i,a){return r.fromFields(i,r.bcs.parse(a))}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(i,a){return r.reified(i).new({accRewardPerShareP:q("u128",a.accRewardPerShareP),adminFeeShareBp:q("u64",a.adminFeeShareBp),adminFee:q(fe.reified(i),a.adminFee),rewards:q(fe.reified(i),a.rewards),lpSupply:q("u64",a.lpSupply)})}static fromJSON(i,a){if(a.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return at(ne(r.$typeName,K(i)),a.$typeArgs,[i]),r.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Si(a.type))throw new Error(`object at ${a.fields.id} is not a PoolRewards object`);return r.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Si(a.bcs.type))throw new Error("object at is not a PoolRewards object");let o=We(a.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let s=k(o[0]),d=k(K(i));if(s!==k(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return r.fromBcs(i,Wd(a.bcs.bcsBytes))}if(a.content)return r.fromSuiParsedData(i,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(i,a,o){let s=await i.getObject({id:o,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching PoolRewards object at id ${o}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!Si(s.data.bcs.type))throw new Error(`object at id ${o} is not a PoolRewards object`);return r.fromSuiObjectData(a,s.data)}};p();I();C();Ye();var xa=et(Rt());import{bcs as on}from"@mysten/sui/bcs";import{fromB64 as fd}from"@mysten/sui/utils";function Vi(r){return r=k(r),r.startsWith(`${xa.PKG_V1}::pool_state::PoolState<`)}var jt=class r{__StructClass=!0;static get $typeName(){return`${xa.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.tokenBalance=a.tokenBalance,this.vusdBalance=a.vusdBalance,this.d=a.d,this.a=a.a,this.balanceRatioMinBp=a.balanceRatioMinBp}static reified(i){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName,K(i)),typeArgs:[K(i)],isPhantom:r.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>r.fromFields(i,a),fromFieldsWithTypes:a=>r.fromFieldsWithTypes(i,a),fromBcs:a=>r.fromBcs(i,a),bcs:r.bcs,fromJSONField:a=>r.fromJSONField(i,a),fromJSON:a=>r.fromJSON(i,a),fromSuiParsedData:a=>r.fromSuiParsedData(i,a),fromSuiObjectData:a=>r.fromSuiObjectData(i,a),fetch:async(a,o)=>r.fetch(a,i,o),new:a=>new r([K(i)],a),kind:"StructClassReified"}}static get r(){return r.reified}static phantom(i){return le(r.reified(i))}static get p(){return r.phantom}static get bcs(){return on.struct("PoolState",{token_balance:on.u64(),vusd_balance:on.u64(),d:on.u64(),a:on.u64(),balance_ratio_min_bp:on.u64()})}static fromFields(i,a){return r.reified(i).new({tokenBalance:te("u64",a.token_balance),vusdBalance:te("u64",a.vusd_balance),d:te("u64",a.d),a:te("u64",a.a),balanceRatioMinBp:te("u64",a.balance_ratio_min_bp)})}static fromFieldsWithTypes(i,a){if(!Vi(a.type))throw new Error("not a PoolState type");return gt(a,[i]),r.reified(i).new({tokenBalance:$("u64",a.fields.token_balance),vusdBalance:$("u64",a.fields.vusd_balance),d:$("u64",a.fields.d),a:$("u64",a.fields.a),balanceRatioMinBp:$("u64",a.fields.balance_ratio_min_bp)})}static fromBcs(i,a){return r.fromFields(i,r.bcs.parse(a))}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(i,a){return r.reified(i).new({tokenBalance:q("u64",a.tokenBalance),vusdBalance:q("u64",a.vusdBalance),d:q("u64",a.d),a:q("u64",a.a),balanceRatioMinBp:q("u64",a.balanceRatioMinBp)})}static fromJSON(i,a){if(a.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return at(ne(r.$typeName,K(i)),a.$typeArgs,[i]),r.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Vi(a.type))throw new Error(`object at ${a.fields.id} is not a PoolState object`);return r.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Vi(a.bcs.type))throw new Error("object at is not a PoolState object");let o=We(a.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let s=k(o[0]),d=k(K(i));if(s!==k(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return r.fromBcs(i,fd(a.bcs.bcsBytes))}if(a.content)return r.fromSuiParsedData(i,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(i,a,o){let s=await i.getObject({id:o,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching PoolState object at id ${o}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!Vi(s.data.bcs.type))throw new Error(`object at id ${o} is not a PoolState object`);return r.fromSuiObjectData(a,s.data)}};import{bcs as Sn}from"@mysten/sui/bcs";import{fromB64 as Zd}from"@mysten/sui/utils";function Mi(r){return r=k(r),r.startsWith(`${Oa.PKG_V1}::pool::Pool<`)}var Pi=class r{__StructClass=!0;static get $typeName(){return`${Oa.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.id=a.id,this.state=a.state,this.rewards=a.rewards,this.feeShareBp=a.feeShareBp,this.canDeposit=a.canDeposit,this.canWithdraw=a.canWithdraw,this.decimals=a.decimals,this.balance=a.balance}static reified(i){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName,K(i)),typeArgs:[K(i)],isPhantom:r.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>r.fromFields(i,a),fromFieldsWithTypes:a=>r.fromFieldsWithTypes(i,a),fromBcs:a=>r.fromBcs(i,a),bcs:r.bcs,fromJSONField:a=>r.fromJSONField(i,a),fromJSON:a=>r.fromJSON(i,a),fromSuiParsedData:a=>r.fromSuiParsedData(i,a),fromSuiObjectData:a=>r.fromSuiObjectData(i,a),fetch:async(a,o)=>r.fetch(a,i,o),new:a=>new r([K(i)],a),kind:"StructClassReified"}}static get r(){return r.reified}static phantom(i){return le(r.reified(i))}static get p(){return r.phantom}static get bcs(){return Sn.struct("Pool",{id:$e.bcs,state:jt.bcs,rewards:Ht.bcs,fee_share_bp:Sn.u64(),can_deposit:Sn.bool(),can_withdraw:Sn.bool(),decimals:Sn.u8(),balance:fe.bcs})}static fromFields(i,a){return r.reified(i).new({id:te($e.reified(),a.id),state:te(jt.reified(i),a.state),rewards:te(Ht.reified(i),a.rewards),feeShareBp:te("u64",a.fee_share_bp),canDeposit:te("bool",a.can_deposit),canWithdraw:te("bool",a.can_withdraw),decimals:te("u8",a.decimals),balance:te(fe.reified(i),a.balance)})}static fromFieldsWithTypes(i,a){if(!Mi(a.type))throw new Error("not a Pool type");return gt(a,[i]),r.reified(i).new({id:$($e.reified(),a.fields.id),state:$(jt.reified(i),a.fields.state),rewards:$(Ht.reified(i),a.fields.rewards),feeShareBp:$("u64",a.fields.fee_share_bp),canDeposit:$("bool",a.fields.can_deposit),canWithdraw:$("bool",a.fields.can_withdraw),decimals:$("u8",a.fields.decimals),balance:$(fe.reified(i),a.fields.balance)})}static fromBcs(i,a){return r.fromFields(i,r.bcs.parse(a))}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(i,a){return r.reified(i).new({id:q($e.reified(),a.id),state:q(jt.reified(i),a.state),rewards:q(Ht.reified(i),a.rewards),feeShareBp:q("u64",a.feeShareBp),canDeposit:q("bool",a.canDeposit),canWithdraw:q("bool",a.canWithdraw),decimals:q("u8",a.decimals),balance:q(fe.reified(i),a.balance)})}static fromJSON(i,a){if(a.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return at(ne(r.$typeName,K(i)),a.$typeArgs,[i]),r.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Mi(a.type))throw new Error(`object at ${a.fields.id} is not a Pool object`);return r.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Mi(a.bcs.type))throw new Error("object at is not a Pool object");let o=We(a.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let s=k(o[0]),d=k(K(i));if(s!==k(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return r.fromBcs(i,Zd(a.bcs.bcsBytes))}if(a.content)return r.fromSuiParsedData(i,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(i,a,o){let s=await i.getObject({id:o,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching Pool object at id ${o}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!Mi(s.data.bcs.type))throw new Error(`object at id ${o} is not a Pool object`);return r.fromSuiObjectData(a,s.data)}};p();I();C();Ye();var Ka=et(Rt());import{bcs as Qa}from"@mysten/sui/bcs";import{fromB64 as Gd}from"@mysten/sui/utils";function Li(r){return r=k(r),r.startsWith(`${Ka.PKG_V1}::user_deposit::UserDeposit<`)}var Hi=class r{__StructClass=!0;static get $typeName(){return`${Ka.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=r.$typeName;$fullTypeName;$typeArgs;$isPhantom=r.$isPhantom;id;lpAmount;rewardDebt;constructor(i,a){this.$fullTypeName=ne(r.$typeName,...i),this.$typeArgs=i,this.id=a.id,this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}static reified(i){return{typeName:r.$typeName,fullTypeName:ne(r.$typeName,K(i)),typeArgs:[K(i)],isPhantom:r.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>r.fromFields(i,a),fromFieldsWithTypes:a=>r.fromFieldsWithTypes(i,a),fromBcs:a=>r.fromBcs(i,a),bcs:r.bcs,fromJSONField:a=>r.fromJSONField(i,a),fromJSON:a=>r.fromJSON(i,a),fromSuiParsedData:a=>r.fromSuiParsedData(i,a),fromSuiObjectData:a=>r.fromSuiObjectData(i,a),fetch:async(a,o)=>r.fetch(a,i,o),new:a=>new r([K(i)],a),kind:"StructClassReified"}}static get r(){return r.reified}static phantom(i){return le(r.reified(i))}static get p(){return r.phantom}static get bcs(){return Qa.struct("UserDeposit",{id:$e.bcs,lp_amount:Qa.u64(),reward_debt:Qa.u64()})}static fromFields(i,a){return r.reified(i).new({id:te($e.reified(),a.id),lpAmount:te("u64",a.lp_amount),rewardDebt:te("u64",a.reward_debt)})}static fromFieldsWithTypes(i,a){if(!Li(a.type))throw new Error("not a UserDeposit type");return gt(a,[i]),r.reified(i).new({id:$($e.reified(),a.fields.id),lpAmount:$("u64",a.fields.lp_amount),rewardDebt:$("u64",a.fields.reward_debt)})}static fromBcs(i,a){return r.fromFields(i,r.bcs.parse(a))}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(i,a){return r.reified(i).new({id:q($e.reified(),a.id),lpAmount:q("u64",a.lpAmount),rewardDebt:q("u64",a.rewardDebt)})}static fromJSON(i,a){if(a.$typeName!==r.$typeName)throw new Error("not a WithTwoGenerics json object");return at(ne(r.$typeName,K(i)),a.$typeArgs,[i]),r.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Li(a.type))throw new Error(`object at ${a.fields.id} is not a UserDeposit object`);return r.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Li(a.bcs.type))throw new Error("object at is not a UserDeposit object");let o=We(a.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let s=k(o[0]),d=k(K(i));if(s!==k(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return r.fromBcs(i,Gd(a.bcs.bcsBytes))}if(a.content)return r.fromSuiParsedData(i,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(i,a,o){let s=await i.getObject({id:o,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching UserDeposit object at id ${o}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!Li(s.data.bcs.type))throw new Error(`object at id ${o} is not a UserDeposit object`);return r.fromSuiObjectData(a,s.data)}};p();I();C();function Wr(r,i,a){if(i.length===0||!i[0])return[];let o=i[0],s=r.reduce((u,b)=>u+BigInt(b),BigInt(0)),d=BigInt(o.balance),A=[];for(let u of i.slice(1)){if(d>s)return Br(a,o,A,r);d+=BigInt(u.balance),A.push(u)}return d>=s?Br(a,o,A,r):[]}function Br(r,i,a,o){let s=o.map(d=>r.pure.u64(d));return a.length>0&&r.mergeCoins(i.coinObjectId,a.map(d=>d.coinObjectId)),r.splitCoins(i.coinObjectId,s)}p();I();C();var Fd="0x0000000000000000000000000000000000000000000000000000000000000000";async function fr(r,i,a){let o=await r.devInspectTransactionBlock({sender:Fd,transactionBlock:i});if(o.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(o,null,2)}`);let s=o.results?.pop()?.returnValues?.pop();if(!s)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(o,null,2)}`);let[d,A]=s;return typeof a=="object"?a.fromBcs(Uint8Array.from(d)).toJSONField():Fn(a).parse(Uint8Array.from(d))}var Ji=class extends Se{constructor(a,o){super();this.suiRpcUrl=a;this.api=o;this.client=new Nd({url:a})}chainType="SUI";client;async getUserBalanceInfo(a,o){if(!o.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");let s=o.suiAddresses;if(!s)throw new V("SUI token must contain 'suiAddresses'");(0,rn.setAddress)(s.bridgeAddress,s.bridgeAddressOrigin);let A=(await this.fetchDeposits(a,o.originTokenAddress)).reduce((u,b)=>{if(b.data)return u.lpAmount+=BigInt(b.data.content.fields.lp_amount),u.rewardDebt+=BigInt(b.data.content.fields.reward_debt),u;throw new V("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new be({lpAmount:A.lpAmount.toString(),rewardDebt:A.rewardDebt.toString()})}async fetchDeposits(a,o){return await ct(s=>this.client.getOwnedObjects({owner:a,filter:{StructType:Hi.phantom(le(o)).phantomType},options:{showContent:!0},cursor:s}))}async getPoolInfoFromChain(a){let o=a.suiAddresses;if(!o)throw new V("SUI token must contain 'suiAddresses'");if((0,rn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!a.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");let s=48,d=new ji;rr(d,a.originTokenAddress,o.bridgeObjectAddress);let A=await fr(this.client,d,Pi.reified(le(a.originTokenAddress))),u=A.state.tokenBalance,b=A.state.vusdBalance,y=ve({tokenBalance:u,vUsdBalance:b});return{dValue:A.state.d,aValue:A.state.a,totalLpAmount:A.rewards.lpSupply,vUsdBalance:b,tokenBalance:u,accRewardPerShareP:A.rewards.accRewardPerShareP,p:s,imbalance:y}}async buildRawTransactionDeposit(a){let o=a.token.suiAddresses;if(!o)throw new V("SUI token must contain 'suiAddresses'");if((0,rn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!a.token.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");let s=await ct(R=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:R}));if(s.length===0||!s[0])throw new lt("No coins to deposit");let d=s[0],A=new ji;A.setSender(a.accountAddress);let{depositObj:u,isNewDeposit:b}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,A),[y]=Wr([a.amount],s,A);if(!y)throw new lt("No coins to deposit");if(!a.token.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");let v=ir(A,a.token.originTokenAddress,{bridge:o.bridgeObjectAddress,userDeposit:u,coin:y});return A.mergeCoins(d.coinObjectId,[v]),b&&A.transferObjects([u],a.accountAddress),await A.toJSON({client:this.client})}async getDepositObject(a,o,s){let d=await this.fetchDeposits(a,o);if(d.length===0||!d[0]){let A=le(o).phantomType;return{depositObj:sr(s,A),isNewDeposit:!0}}else{if(d[0].data?.objectId)return{depositObj:d[0].data.objectId,isNewDeposit:!1};throw new V("Something went wrong while deposit")}}async buildRawTransactionWithdraw(a){let o=a.token.suiAddresses;if(!o)throw new V("SUI token must contain 'suiAddresses'");if((0,rn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!a.token.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");let s=le(a.token.originTokenAddress).phantomType,d=new ji;d.setSender(a.accountAddress);let{depositObj:A,isNewDeposit:u}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d);if(u)throw new lt("No deposit found");let b=ar(d,s,{bridge:o.bridgeObjectAddress,userDeposit:A,amountLp:BigInt(a.amount)}),y=await ct(v=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:v}));if(!b[0]||!b[1])throw new V("No rewards found");return y[0]?d.mergeCoins(y[0].coinObjectId,[b[0],b[1]]):(d.mergeCoins(b[0],[b[1]]),d.transferObjects([b[0]],a.accountAddress)),await d.toJSON({client:this.client})}async buildRawTransactionClaimRewards(a){let o=a.token.suiAddresses;if(!o)throw new V("SUI token must contain 'suiAddresses'");if((0,rn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!a.token.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");let s=le(a.token.originTokenAddress).phantomType,d=new ji;d.setSender(a.accountAddress);let{depositObj:A,isNewDeposit:u}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d);if(u)throw new lt("No deposit found");let b=or(d,s,{bridge:o.bridgeObjectAddress,userDeposit:A}),y=await ct(v=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:v}));return y[0]?d.mergeCoins(y[0].coinObjectId,[b]):d.transferObjects([b],a.accountAddress),await d.toJSON({client:this.client})}};p();I();C();import{Web3 as ki}from"web3";import{encodeFunctionCall as Td}from"web3-eth-abi";var Vn=class extends Se{constructor(a,o,s){super();this.tronWeb=a;this.api=o;this.tronJsonRpc=s}chainType="TRX";P=52;async getUserBalanceInfo(a,o){let s;if(this.tronJsonRpc)try{s=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,a,o)}catch{s=await this.getUserBalanceInfoPerProperty(a,o)}else s=await this.getUserBalanceInfoPerProperty(a,o);return s}async getUserBalanceInfoByBatch(a,o,s){let d=Yn(s.poolAddress),A=Yn(o),u=[{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"]}],y=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();if(Array.isArray(y)&&y.length===2){let v=R=>{let F=y.find(Z=>Z.id===R);if(!F||!F.result)throw new Error(`Missing or invalid result for id ${R}`);return ki.utils.toBigInt(F.result).toString()};return new be({lpAmount:ki.utils.toBigInt(v(2)).toString(),rewardDebt:ki.utils.toBigInt(v(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(a,o){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let s=this.getContract(o.poolAddress),d=(await s.methods.userRewardDebt(a).call()).toString(),A=(await s.methods.balanceOf(a).call()).toString();return new be({lpAmount:A,rewardDebt:d})}async getPoolInfoFromChain(a){let o;if(this.tronJsonRpc)try{o=await this.getPoolInfoByBatch(this.tronJsonRpc,a)}catch{o=await this.getPoolInfoPerProperty(a)}else o=await this.getPoolInfoPerProperty(a);return o}async getPoolInfoByBatch(a,o){let s=Yn(o.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"]}],u=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json();if(Array.isArray(u)&&u.length===6){let b=F=>{let Z=u.find(X=>X.id===F);if(!Z||!Z.result)throw new Error(`Missing or invalid result for id ${F}`);return ki.utils.toBigInt(Z.result).toString()},y=b(3),v=b(4),R=ve({tokenBalance:y,vUsdBalance:v});return{aValue:b(1),dValue:b(2),tokenBalance:y,vUsdBalance:v,totalLpAmount:b(5),accRewardPerShareP:b(6),p:this.P,imbalance:R}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let o=this.getContract(a.poolAddress),[s,d,A,u,b,y]=await Promise.all([o.methods.a().call(),o.methods.d().call(),o.methods.tokenBalance().call(),o.methods.vUsdBalance().call(),o.methods.totalSupply().call(),o.methods.accRewardPerShareP().call()]),v=A.toString(),R=u.toString(),F=ve({tokenBalance:v,vUsdBalance:R});return{aValue:s.toString(),dValue:d.toString(),tokenBalance:v,vUsdBalance:R,totalLpAmount:b.toString(),accRewardPerShareP:y.toString(),p:this.P,imbalance:F}}buildRawTransactionDeposit(a){let{amount:o,accountAddress:s}=a,d=[{type:"uint256",value:o}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",d,"0",s)}buildRawTransactionWithdraw(a){let{amount:o,accountAddress:s}=a,d=[{type:"uint256",value:o}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",d,"0",s)}buildRawTransactionClaimRewards(a){let{accountAddress:o}=a,s=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",s,"0",o)}async buildRawTransaction(a,o,s,d,A){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,o,{callValue:+d},s,A);if(!u?.result?.result)throw new V("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}getContract(a){return this.tronWeb.contract(wn.abi,a)}getFunctionAbi(a,...o){let s=wn.abi.find(d=>d.type==="function"&&"name"in d&&d.name===a);if(!s)throw new Error(`${a} method not found in Pool ABI`);return Td(s,o)}};var zi=class{constructor(i,a,o,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o;this.tokenService=s;this.rawTxBuilder=new Gi(i,a,this.params,s);let d=o.cachePoolInfoChainSec>0?o.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Xd({defaultTtl:d})}rawTxBuilder;cache;async getAllowance(i,a){if(a){let o=i,s=a;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress},o)}else{let o=i;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress})}}async checkAllowance(i,a){if(a){let o=i,s=a;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress},o)}else{let o=i;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,o){_(i),ee("amount",i,a.decimals);let s=await this.getPoolInfoFromChain(a,o),{vUsdBalance:d,tokenBalance:A,aValue:u,dValue:b}=s,y=yr(i,u,b,A,d);return z(y,3).toFixed()}async getAmountToBeWithdrawn(i,a,o,s){_(i),ee("amount",i,o.decimals);let d=await this.getPoolInfoFromChain(o,s),A=hr(i),u=Je(A,o.decimals),y=(await this.getUserBalanceInfo(a,o,s)).earned(d)||"0",v=wd(u).plus(y).toFixed();return z(v,o.decimals).toFixed()}async getUserBalanceInfo(i,a,o){return tn(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,o).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let o={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},s=this.cache.get(o);if(s)return s;{let d=await tn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(o,d),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},d),d}}};function tn(r,i,a,o,s){switch(E.getChainProperty(r).chainType){case"EVM":{if(s)return new Xn(s,i);{let d=a.getNodeRpcUrl(r),A=new Pd(d);return A.defaultReturnFormat={number:Md.STR,bytes:Vd.HEX},new Xn(A,i)}}case"TRX":{let d=a.getNodeRpcUrl(r),A=o.tronJsonRpc;if(s)return new Vn(s,i,A);{let u=new Sd({fullHost:d});return new Vn(u,i,A)}}case"SOLANA":{let d=a.getNodeRpcUrl(r);return new Fi(d,i)}case"SRB":return new Ti(a,o,i);case"SUI":return new Ji(a.getNodeRpcUrl(r),i);case"ALG":if(s){let d=s,A=Zr.fromClients({algod:d});return new Tn(A,i)}else{let d=a.getNodeRpcUrl(r),A=Zr.fromConfig({algodConfig:{server:d}});return new Tn(A,i)}}}p();I();C();p();I();C();import{TronWeb as jd}from"tronweb";import{FMT_BYTES as Jd,FMT_NUMBER as kd,Web3 as zd}from"web3";p();I();C();p();I();C();var Ld={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"}]},xi=Ld;p();I();C();p();I();C();p();I();C();var Jt=class{};var Mn=class extends Jt{constructor(a,o){super();this.web3=a;this.api=o}chainType="EVM";async balanceOf(a){let o=(await this.getYieldContract(a.token.yieldAddress).methods.balanceOf(a.owner).call()).toString();return z(o,3).toFixed()}async getEstimatedAmountOnDeposit(a){let o=O(a.amount,a.token.decimals).toFixed(),s=(await this.getYieldContract(a.token.yieldAddress).methods.getEstimatedAmountOnDeposit(o,a.token.yieldId).call()).toString();return z(s,3).toFixed()}async getWithdrawProportionAmount(a){let o=O(a.amount,3).toFixed();return await this.getYieldContract(a.cydToken.yieldAddress).methods.getWithdrawProportionAmount(a.owner,o).call()}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.deposit(a.amount,a.token.yieldId,a.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.withdraw(a.amount).encodeABI()})}buildTxParams(a){return{from:a.owner,to:a.yieldAddress,value:"0"}}getYieldContract(a){return new this.web3.eth.Contract(xi.abi,a)}};p();I();C();var Oi=class{constructor(i,a,o,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o;this.tokenService=s}async approve(i,a){return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.yieldAddress},a)}async deposit(i,a){return _(i.amount),ee("amount",i.amount,i.token.decimals),_(i.minVirtualAmount),ee("minVirtualAmount",i.minVirtualAmount,3),i.amount=O(i.amount,i.token.decimals).toFixed(),i.minVirtualAmount=O(i.minVirtualAmount,3).toFixed(),sn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return _(i.amount),ee("amount",i.amount,3),i.amount=O(i.amount,3).toFixed(),sn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).buildRawTransactionWithdraw(i)}};p();I();C();var Pn=class extends Jt{constructor(a,o){super();this.tronWeb=a;this.api=o}chainType="TRX";async balanceOf(a){let o=(await(await this.getContract(a.token.yieldAddress)).methods.balanceOf(a.owner).call()).toString();return z(o,3).toFixed()}async getEstimatedAmountOnDeposit(a){let o=O(a.amount,a.token.decimals).toFixed(),s=(await(await this.getContract(a.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(o,a.token.yieldId).call()).toString();return z(s,3).toFixed()}async getWithdrawProportionAmount(a){let o=O(a.amount,3).toFixed();return(await(await this.getContract(a.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(a.owner,o).call()).toString().split(",")}async buildRawTransactionDeposit(a){let{amount:o,owner:s,token:d,minVirtualAmount:A}=a,u=[{type:"uint256",value:o},{type:"uint256",value:d.yieldId},{type:"uint256",value:A}];return this.buildRawTransaction(a.token.yieldAddress,"deposit(uint256,uint256,uint256)",u,"0",s)}async buildRawTransactionWithdraw(a){let{amount:o,owner:s}=a,d=[{type:"uint256",value:o}];return this.buildRawTransaction(a.token.yieldAddress,"withdraw(uint256)",d,"0",s)}async buildRawTransaction(a,o,s,d,A){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,o,{callValue:+d},s,A);if(!u?.result?.result)throw new V("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}getContract(a){return this.tronWeb.contract(xi.abi,a)}};p();I();C();function Hd(r){if(!Qi(r))throw new $n("Token does not support Yield")}function Qi(r){return!!r.yieldAddress&&r.yieldId!==void 0}var Ki=class{constructor(i,a,o,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o;this.tokenService=s;this.rawTxBuilder=new Oi(i,a,o,s)}rawTxBuilder;async getCYDTokens(){let i=[],a=await this.api.getChainDetailsMap("pool");return Object.values(a).forEach(o=>{if(o.yieldAddress){let s=o.tokens.find(A=>A.tokenAddress===o.yieldAddress),d=o.tokens.filter(Qi);if(d.length>0){let A=s??{allbridgeChainId:o.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:o.bridgeId,bridgeAddress:o.bridgeAddress,chainId:o.chainId,chainName:o.name,chainSymbol:o.chainSymbol,chainType:o.chainType,confirmations:o.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:o.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:o.yieldAddress};i.push({...A,yieldAddress:o.yieldAddress,tokens:d})}}}),i}async getAllowance(i,a){return await this.tokenService.getAllowance({...i,spender:i.token.yieldAddress},a)}async checkAllowance(i,a){return this.tokenService.checkAllowance({...i,spender:i.token.yieldAddress},a)}async balanceOf(i,a){return sn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).balanceOf(i)}async getEstimatedAmountOnDeposit(i,a){return _(i.amount),ee("amount",i.amount,i.token.decimals),sn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.token.yieldAddress,a).getEstimatedAmountOnDeposit(i)}async getWithdrawAmounts(i,a){_(i.amount),ee("amount",i.amount,3);let o=await sn(i.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).getWithdrawProportionAmount(i);return i.cydToken.tokens.filter(s=>o[s.yieldId]!==void 0).map(s=>({amount:z(o[s.yieldId],s.decimals).toFixed(),token:s}))}};function sn(r,i,a,o,s){switch(E.getChainProperty(r).chainType){case"EVM":{if(s)return new Mn(s,i);{let d=a.getNodeRpcUrl(r),A=new zd(d);return A.defaultReturnFormat={number:kd.STR,bytes:Jd.HEX},new Mn(A,i)}}case"TRX":{if(s)return new Pn(s,i);{let d=a.getNodeRpcUrl(r),A=new jd({fullHost:d});return A.setAddress(o),new Pn(A,i)}}case"SOLANA":throw new ie;case"SRB":throw new ie;case"SUI":throw new ie;case"ALG":throw new ie}}p();I();C();import{Big as pe}from"big.js";function Nr(r,i,a){let o=xd(r,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),s=Od(o.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:o,swapFromVUsdCalcResult:s}}function Tr(r,i,a){let o=Qd(r,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),s=Kd(o.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:o,swapFromVUsdCalcResult:s}}function xd(r,{feeShare:i,decimals:a},o){let s=pe(r),d=s.times(i),A=s.minus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:Gr(St(A,a),o),amountExcludingCommissionInSystemPrecision:Gr(St(s,a),o)}}function Gr(r,i){if(r.eq(0))return"0";let a=pe(i.tokenBalance).plus(r),o=dt(a.toFixed(),i.aValue,i.dValue);return pe(i.vUsdBalance).minus(o).round().toFixed()}function Od(r,{feeShare:i,decimals:a},o){if(pe(r).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let d=pe(r).plus(o.vUsdBalance),A=dt(d,o.aValue,o.dValue),u=Je(pe(o.tokenBalance).minus(A),a),b=pe(u).times(i),y=pe(u).minus(b).round();return{bridgeFeeInTokenPrecision:b.round().toFixed(),amountIncludingCommissionInTokenPrecision:y.toFixed(),amountExcludingCommissionInTokenPrecision:u.toFixed()}}function Qd(r,{feeShare:i,decimals:a},o){let s=pe(i).div(pe(1).minus(i)),d=pe(r).times(s),A=pe(r).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:Fr(St(A,a),o),amountExcludingCommissionInSystemPrecision:Fr(St(r,a),o)}}function Fr(r,i){let a=pe(i.tokenBalance).minus(r),o=dt(a.toFixed(),i.aValue,i.dValue);return pe(o).minus(i.vUsdBalance).round().toFixed()}function Kd(r,{feeShare:i,decimals:a},o){if(pe(r).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=pe(o.vUsdBalance).minus(r),d=dt(s.toFixed(),o.aValue,o.dValue),A=pe(d).minus(o.tokenBalance),u=Je(A.toFixed(),a),b=pe(i).div(pe(1).minus(i)),y=pe(u).times(b),v=pe(u).plus(y);return{bridgeFeeInTokenPrecision:y.round().toFixed(),amountIncludingCommissionInTokenPrecision:v.round().toFixed(),amountExcludingCommissionInTokenPrecision:u.toFixed()}}p();I();C();import{Big as Gt}from"big.js";function wr(r,i,a,o,s){let d=st(r,i,a),A=Je(d,i.decimals),u=vn(d,o,s),b=Gt(r).times(i.feeShare),y=Gt(u).div(Gt(1).minus(o.feeShare)).minus(u);return{sourceLPSwap:{fee:z(b,i.decimals).neg().round(i.decimals,Gt.roundUp).toFixed(),swap:z(Gt(r).minus(A).minus(b),i.decimals).neg().round(i.decimals,Gt.roundUp).toFixed()},destLPSwap:{fee:z(y,o.decimals).neg().round(o.decimals,Gt.roundUp).toFixed(),swap:z(Je(d,o.decimals).minus(u).minus(y),o.decimals).neg().round(o.decimals,Gt.roundUp).toFixed()}}}p();I();C();p();I();C();p();I();C();import{AlgorandClient as Xr}from"@algorandfoundation/algokit-utils";import{ABIMethod as Ud,OnApplicationComplete as Dd}from"algosdk";var Ui=class{constructor(i){this.nodeRpcUrlsConfig=i}async checkAssetOptIn(i,a,o){let s=this.getAlgorand(o);return ai(i,a,s)}async buildRawTransactionAssetOptIn(i,a,o){let s=this.getAlgorand(o);typeof i=="string"&&(i=BigInt(i));let d=await s.createTransaction.assetOptIn({assetId:i,sender:a});return bt(d)}async checkAppOptIn(i,a,o){let s=this.getAlgorand(o);return oi(i,a,s)}async buildRawTransactionAppOptIn(i,a,o){let s=this.getAlgorand(o);typeof i=="string"&&(i=BigInt(i));let d=s.newGroup(),A=s.account.random();d.addAppCallMethodCall({appId:i,method:new Ud({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:a,signer:A,onComplete:Dd.OptInOC});let{transactions:u}=await d.buildTransactions();return bt(...u)}getAlgorand(i){if(i)return Xr.fromClients({algod:i});{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG");return Xr.fromConfig({algodConfig:{server:a}})}}};p();I();C();p();I();C();import tA from"axios";p();I();C();var Sr="3.26.0-alpha.10";p();I();C();function Vr(r){return Object.entries(r).reduce((i,a)=>{let o=a[0],s=a[1],d=eA(o,s);return d&&(i[o]=d),i},{})}function Mr(r){let i={};for(let[a,o]of Object.entries(r)){let s=a;for(let d of o.tokens){let A=dn({chainSymbol:s,poolAddress:d.poolAddress}),u=ve(d.poolInfo);i[A]={...d.poolInfo,imbalance:u}}}return i}function Ed(r,i){let{name:a,...o}=r,{poolInfo:s,...d}=i;return{...d,...o,chainName:a}}function _d(r){switch(r){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function $d(r){return Object.entries(r).reduce((i,[a,o])=>(i[a]=qd(o),i),{})}function qd(r){return Object.entries(r).reduce((i,[a,o])=>{let s=_d(a);return s&&o!=null&&(i[s]=o),i},{})}function eA(r,i){let a=E.getChainsProperties()[r];if(!a)return null;let o={...a,allbridgeChainId:i.chainId,bridgeId:i.bridgeId,bridgeAddress:i.bridgeAddress,oftBridgeAddress:i.oftBridgeAddress,yieldAddress:i.yieldAddress,transferTime:$d(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations,suiAddresses:i.suiAddresses};return{...o,tokens:i.tokens.map(s=>Ed(o,s))}}function dn(r){return r.chainSymbol+"_"+r.poolAddress}function Pr(r){let i=[];for(let[a,o]of Object.entries(r)){let s=a;for(let d of o.tokens)i.push({chainSymbol:s,poolAddress:d.poolAddress})}return i}function Lr(r){let i={};for(let[a,o]of Object.entries(r)){let s=a;for(let[d,A]of Object.entries(o))A.imbalance=ve(A),i[dn({chainSymbol:s,poolAddress:d})]=A}return i}var An=class{api;constructor(i){this.api=tA.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Sr},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Vr(i),poolInfoMap:Mr(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:o}=await this.api.get(`/check/${i}/${a}`);return o}async getTransferStatus(i,a){let{data:o}=await this.api.get(`/chain/${i}/${a}`);return o}async getReceiveTransactionCost(i){if(i.messenger===5&&!i.sourceToken)throw new Un("For OFT sourceToken required");let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice,adminFeeShareWithExtras:a.adminFeeShareWithExtras}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:o}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return Lr(o)}};p();I();C();import Di from"timed-cache";var Ua=20*1e3,nA=55*1e3,gn=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new Di({defaultTtl:nA}),this.receivedTransactionCache=new Di({defaultTtl:Ua}),this.pendingInfoCache=new Di({defaultTtl:Ua}),this.gasBalanceCache=new Di({defaultTtl:Ua})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let o=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,o),o}async getGasBalance(i,a){let o=`GAS_BALANCE_${i}_${a}`,s=this.gasBalanceCache.get(o);if(s)return s;let d=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(o,d),d}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let o=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,o),o}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}${i.sourceToken?"_"+i.sourceToken:""}`,o=this.receivedTransactionCache.get(a);if(o)return o;let s=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,s),s}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};p();I();C();var cn=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};p();I();C();var ln=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),o={};for(let s in a){let d=a[s];d&&(o[s]={...d,tokens:Hr(d.tokens,i,this.isStaging)})}return o}async tokens(i){return Hr(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function Hr(r,i,a){return r.filter(o=>a?!0:o.flags[i]).map(iA)}function iA(r){let{flags:i,...a}=r;return a}p();I();C();import aA from"timed-cache";var oA=55*1e3,un=class{constructor(i){this.client=i;this.poolInfoCache=new Da}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let o=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(o);let s=o[dn(i)];if(s)return s;throw new V("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let o=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Pr(o.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(dn(i),a)}},Da=class{cache;constructor(){this.cache=new aA({defaultTtl:oA})}putAll(i){for(let[a,o]of Object.entries(i))this.cache.put(a,o)}putAllIfNotExists(i){for(let[a,o]of Object.entries(i))this.cache.get(a)||this.cache.put(a,o)}put(i,a){this.cache.put(i,a)}get(i){let a=dn(i);return this.cache.get(a)}};p();I();C();import{AlgorandClient as Jr}from"@algorandfoundation/algokit-utils";import{Big as pA}from"big.js";import{TronWeb as CA}from"tronweb";import{Web3 as IA}from"web3";p();I();C();p();I();C();p();I();C();p();I();C();import{Big as jr}from"big.js";var Ve=class{async checkAllowance(i){let a=await this.getAllowance(i);return jr(a).gte(jr(i.amount))}};var Ln=class extends Ve{constructor(a,o){super();this.algorand=a;this.api=o}chainType="SUI";approve(a){throw new ie}buildRawTransactionApprove(a){throw new ie}getAllowance(a){throw new ie}async getNativeTokenBalance(a){let{account:o}=a;return(await this.algorand.account.getInformation(o)).balance.microAlgo.toString()}async getTokenBalance(a){let{account:o,token:s}=a;try{return(await this.algorand.asset.getAccountInformation(o,BigInt(s.tokenAddress))).balance.toString()}catch(d){if(d instanceof Error)return d.message.includes("account asset info not found"),"0";throw d}}};p();I();C();p();I();C();var rA={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"}]},Ei=rA;var sA="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",dA="0xdac17f958d2ee523a2206206994597c13d831ec7",AA=1e5,Hn=class extends Ve{constructor(a,o){super();this.web3=a;this.api=o}chainType="EVM";getAllowance(a){let o=a.token.tokenAddress,s=a.owner,d=a.spender;return this.getAllowanceByTokenAddress(o,s,d)}getAllowanceByTokenAddress(a,o,s){return this.getERC20Contract(a).methods.allowance(o,s).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let d=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(d,a.chainSymbol)}let o=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(o,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===dA}buildRawTransactionApprove(a){let{tokenAddress:o,spender:s,owner:d,amount:A}=a,b=this.getERC20Contract(o).methods.approve(s,A==null?sA:vi(A));return Promise.resolve({from:d,to:o,value:"0",data:b.encodeABI()})}async sendRawTransaction(a,o){let s=a,d={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};o==="POL"?s.gas=AA:s.gas=await this.web3.eth.estimateGas(a);let{transactionHash:A}=await this.web3.eth.sendTransaction({...s,...d});return{txId:A.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(Ei.abi,a)}};p();I();C();import{AnchorProvider as gA}from"@project-serum/anchor";import{Connection as cA,PublicKey as _i}from"@solana/web3.js";var $i=class extends Ve{constructor(a,o){super();this.solanaRpcUrl=a;this.api=o}chainType="SOLANA";approve(a){throw new ie}buildRawTransactionApprove(a){throw new ie}buildAnchorProvider(a){let o=new cA(this.solanaRpcUrl,"confirmed"),s=new _i(a);return new gA(o,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new ie}async getTokenBalance(a){let{account:o,token:s}=a;try{let d=await nt(new _i(o),new _i(s.tokenAddress));return(await Et(d,this.buildAnchorProvider(o))).amount.toString()}catch(d){if(d instanceof Error)return d.message.startsWith("Account does not exist"),"0";throw d}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new _i(a.account))).toString()}};p();I();C();import{Horizon as tZ,NotFoundError as lA}from"@stellar/stellar-sdk";var qi=class extends Ve{constructor(a,o,s){super();this.nodeRpcUrlsConfig=a;this.params=o;this.api=s}chainType="SRB";getAllowance(){throw new ie}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new V("OriginTokenAddress missing");let[o,s]=a.token.originTokenAddress.split(":"),d=new tZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),A;try{A=await d.loadAccount(a.account)}catch(y){if(y instanceof lA)return"0";throw y}let b=A.balances.find(y=>(y.asset_type==="credit_alphanum4"||y.asset_type==="credit_alphanum12")&&y.asset_code==o&&y.asset_issuer==s);return b?.balance?O(b.balance,E.getChainDecimalsByType(E.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let A=(await new tZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(u=>u.asset_type==="native");return A?.balance?O(A.balance,E.getChainDecimalsByType(E.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new ie}buildRawTransactionApprove(){throw new ie}};p();I();C();import{SuiClient as uA}from"@mysten/sui/client";var ea=class extends Ve{constructor(a,o){super();this.suiRpcUrl=a;this.api=o;this.suiClient=new uA({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(a){throw new ie}buildRawTransactionApprove(a){throw new ie}getAllowance(a){throw new ie}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new V("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:a.account,coinType:a.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(a){let o=await ct(s=>this.suiClient.getCoins({owner:a.account,cursor:s}));return o.length===0?"0":o.reduce((s,d)=>s+BigInt(d.balance),BigInt(0)).toString()}};p();I();C();var mA="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",jn=class extends Ve{constructor(a,o){super();this.tronWeb=a;this.api=o}chainType="TRX";async getAllowance(a){let{token:{tokenAddress:o},owner:s}=a;return(await(await this.getContract(o)).methods.allowance(s,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let o=await this.buildRawTransactionApprove(a);return await Yi(this.tronWeb,o)}async buildRawTransactionApprove(a){let{tokenAddress:o,spender:s,owner:d,amount:A}=a,u=A==null?mA:vi(A),b=[{type:"address",value:s},{type:"uint256",value:u}];return this.buildRawTransaction(o,"approve(address,uint256)",b,"0",d)}getContract(a){return this.tronWeb.contract(Ei.abi,a)}async buildRawTransaction(a,o,s,d,A){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,o,{callValue:+d},s,A);if(!u?.result?.result)throw new V("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}};var mn=class{constructor(i,a,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=o}async getAllowance(i,a){let o=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return z(o,i.token.decimals).toFixed()}async checkAllowance(i,a){return _(i.amount),ee("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(_(a.amount),ee("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(_(i.amount),ee("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let o=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?z(o,i.token.decimals).toFixed():o}async getNativeTokenBalance(i,a){let o=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:o,float:z(o,E.getChainDecimalsByType(E.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,a,o){switch(E.getChainProperty(i).chainType){case"EVM":{if(o)return new Hn(o,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Hn(new IA(s),this.api)}}case"TRX":{if(o)return new jn(o,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),d=new CA({fullHost:s});return d.setAddress(a),new jn(d,this.api)}}case"SOLANA":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new $i(s,this.api)}case"SRB":return new qi(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new ea(this.nodeRpcUrlsConfig.getNodeRpcUrl(i),this.api);case"ALG":if(o){let s=o,d=Jr.fromClients({algod:s});return new Ln(d,this.api)}else{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),d=Jr.fromConfig({algodConfig:{server:s}});return new Ln(d,this.api)}}}prepareCheckAllowanceParams(i){return{...i,amount:O(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:pA(i.amount).toFixed()}}};var ta=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a;let o=new An(a),s=new gn(o),d=new cn(s),A=new un(d);this.api=new ln(A,a),this.tokenService=new mn(this.api,i,a)}api;tokenService;buildRawTransactionApprove(i,a){return this.tokenService.buildRawTransactionApprove(i,a)}checkAllowance(i,a){return this.tokenService.checkAllowance(i,a)}getAllowance(i,a){return this.tokenService.getAllowance(i,a)}};p();I();C();import{Connection as bA,PublicKey as yA,TransactionMessage as hA}from"@solana/web3.js";var na=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new V("InvalidArgumentException memo cannot be more than 28 characters");let o=new bA(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),s=await Mt(i,o),d=hA.decompile(i.message,{addressLookupTableAccounts:s}),A=d.instructions[d.instructions.length-1];if(!A?.keys)throw new V("Last instruction or its keys are invalid.");A.keys.push({pubkey:new yA(Y.from(a)),isSigner:!1,isWritable:!1}),i.message=d.compileToV0Message(s)}};p();I();C();import{Asset as RA,BASE_FEE as BA,contract as pw,Horizon as kr,Operation as WA,Operation as fA,rpc as kn,TimeoutInfinite as ZA,TransactionBuilder as Ea,TransactionBuilder as zr}from"@stellar/stellar-sdk";p();I();C();import{contract as e}from"@stellar/stellar-sdk";var vA=e.Spec,YA=e.Client;var Jn=class extends YA{constructor(a){super(new vA(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}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 GA=100,FA=180,ia=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let o=await new kr.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),d=await this.getContract(Jn,i.tokenAddress).name();if(an(d))throw new V;let A=nn(d);if(!A)throw new V;let[u,b]=A.split(":");if(u===void 0||b===void 0)throw new V("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let y=new RA(u,b),v=fA.changeTrust({asset:y,limit:i.limit});return new zr(o,{fee:GA.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(v).setTimeout(FA).build().toXDR()}async getBalanceLine(i,a){let s=await this.getContract(Jn,a).name();if(an(s))throw new V;let d=nn(s);if(!d)throw new V;let[A,u]=d.split(":"),b=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new kr.Server(b).loadAccount(i)).balances.find(F=>(F.asset_type==="credit_alphanum4"||F.asset_type==="credit_alphanum12")&&F.asset_code==A&&F.asset_issuer==u)}async submitTransactionStellar(i){let a=new kr.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o=zr.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(o)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let o=new kn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await o.getAccount(a),d=Ea.fromXDR(i,this.params.sorobanNetworkPassphrase),A=await o.simulateTransaction(d);if(kn.Api.isSimulationRestore(A))return new Ea(s,{fee:(+BA+ +A.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(A.restorePreamble.transactionData.build()).addOperation(WA.restoreFootprint({})).setTimeout(ZA).build().toXDR()}async sendTransactionSoroban(i){let a=new kn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=Ea.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(o)}async confirmTx(i,a=15){let o=new kn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await po(()=>o.getTransaction(i),A=>A.status===kn.Api.GetTransactionStatus.NOT_FOUND,a);if(s.length===0)throw new V("No transaction responses found.");let d=s[s.length-1];if(!d)throw new V("Unexpected error: last response is undefined.");return d}getContract(i,a){let o={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(o)}};p();I();C();var aa=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.api=a}_suiBridgeService;async buildSendTxFromCustomTx(i,a,o){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(i,a,o)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new en(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var oa=class{constructor(i){this.service=i;this.srb=new ia(i.nodeRpcUrlsConfig,i.params),this.sol=new na(i.nodeRpcUrlsConfig,i.params),this.sui=new aa(i.nodeRpcUrlsConfig,i.api),this.evm=new ta(i.nodeRpcUrlsConfig,i.params),this.alg=new Ui(i.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};p();I();C();var yt=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(yt||{}),ri=(a=>(a.INT="int",a.FLOAT="float",a))(ri||{});p();I();C();import{Big as ye}from"big.js";var zn=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new _n(i)}},ra=class{constructor(i,a=Kn){this.nodeRpcUrlsConfig=i;E.addChainsProperties(a.additionalChainsProperties);let o=new An(a),s=new gn(o),d=new cn(s),A=new un(d);this.api=new ln(A,a),this.tokenService=new mn(this.api,i,a),this.bridge=new Ri(this.api,i,a,this.tokenService),this.pool=new zi(this.api,i,a,this.tokenService),this.yield=new Ki(this.api,i,a,this.tokenService),this.params=a}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,a){let s=(await this.api.getChainDetailsMap(a))[i];return s?s.tokens:[]}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,o,s){_(i);let d;a=="float"?(ee("amount",i,o.decimals),d=O(i,o.decimals).toFixed()):d=i;let A=st(d,o,await Ie(this.api,o)),u=await Ie(this.api,s),b=this.getAmountFromVUsdFormatted(A,s,u),y,v=await this.api.getPendingInfo();for(let R in v[s.chainSymbol]){let F=v[s.chainSymbol];if(!F)throw new V("Cannot find pending info for "+s.chainSymbol);y=F[R]}if(y){let R=Co(y.totalSentAmount,u),F=this.getAmountFromVUsdFormatted(A,s,R),Z;return ye(F.int).gt(b.int)?Z={min:b,max:F}:Z={min:F,max:b},{pendingTxs:y.pendingTxs,pendingAmount:{int:De(y.totalSentAmount,3,s.decimals).toFixed(0),float:z(y.totalSentAmount,3).toFixed()},estimatedAmount:Z}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:b,max:b}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){_(i),ee("amountFloat",i,a.decimals);let o=O(i,a.decimals);if(o.eq(0))return 0;let s=st(o,a,await Ie(this.api,a)),d=Je(s,a.decimals);return Ia(o,d)}async calculateFeePercentOnDestinationChain(i,a,o){_(i),ee("amountFloat",i,a.decimals);let s=O(i,a.decimals);if(s.eq(0))return 0;let d=st(s,a,await Ie(this.api,a)),A=vn(d,o,await Ie(this.api,o)),u=Je(d,o.decimals);return Ia(u,A)}async getAmountToBeReceivedAndGasFeeOptions(i,a,o,s){return _(i),ee("amountToSendFloat",i,a.decimals),{amountToSendFloat:ye(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,o,s),gasFeeOptions:await this.getGasFeeOptions(a,o,s)}}async getAmountToSendAndGasFeeOptions(i,a,o,s){return _(i),ee("amountToBeReceivedFloat",i,o.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,o,s),amountToBeReceivedFloat:ye(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,o,s)}}async getAmountToBeReceived(i,a,o,s){return this.getAmountToBeReceivedCompute(i,a,o,s,async()=>await Ie(this.api,a),async()=>await Ie(this.api,o))}async getAmountToBeReceivedFromChain(i,a,o,s,d,A){return this.getAmountToBeReceivedCompute(i,a,o,s,async()=>await this.pool.getPoolInfoFromChain(a,d),async()=>await this.pool.getPoolInfoFromChain(o,A))}async getAmountToBeReceivedCompute(i,a,o,s=1,d,A){switch(s){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(i,a,o,await d(),await A());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(i,a,o,s);case 5:return this.getAmountToBeReceivedComputeOft(i,a,o)}}getAmountToBeReceivedComputeWithPools(i,a,o,s,d){_(i),ee("amountToSendFloat",i,a.decimals);let A=O(i,a.decimals),u=st(A,a,s);return this.getAmountFromVUsdFormatted(u,o,d).float}getAmountToBeReceivedComputeCctp(i,a,o,s){_(i),ee("amountToSendFloat",i,a.decimals);let d=O(i,a.decimals);switch(s){case 3:{if(!a.cctpAddress||!o.cctpAddress||!a.cctpFeeShare)throw new Ne("Such route does not support CCTP protocol");let A=d.mul(ye(1).minus(a.cctpFeeShare)).round(0,ye.roundUp),u=De(A,a.decimals,o.decimals).round(0);return z(u,o.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!o.cctpV2Address||!a.cctpV2FeeShare)throw new Ne("Such route does not support CCTP V2 protocol");let A=d.mul(ye(1).minus(a.cctpV2FeeShare)).round(0,ye.roundUp),u=De(A,a.decimals,o.decimals).round(0);return z(u,o.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(i,a,o){_(i),ee("amountToSendFloat",i,a.decimals);let s=O(i,a.decimals);if(!a.oftBridgeAddress||!o.oftBridgeAddress||a.oftId!==o.oftId)throw new Te("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:o.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!d)throw new Te("Such route does not support OFT protocol");let A=s.mul(ye(1).minus(d)).round(0,ye.roundUp),u=De(A,a.decimals,o.decimals).round(0);return z(u,o.decimals).toFixed()}async getAmountToSend(i,a,o,s){return this.getAmountToSendCompute(i,a,o,s,()=>Ie(this.api,a),()=>Ie(this.api,o))}async getAmountToSendFromChain(i,a,o,s,d,A){return this.getAmountToSendCompute(i,a,o,s,()=>this.pool.getPoolInfoFromChain(a,d),()=>this.pool.getPoolInfoFromChain(o,A))}async getAmountToSendCompute(i,a,o,s=1,d,A){switch(s){case 1:case 2:return this.getAmountToSendComputeWithPools(i,a,o,await d(),await A());case 3:case 4:return this.getAmountToSendComputeCctp(i,a,o,s);case 5:return this.getAmountToSendComputeOft(i,a,o)}}getAmountToSendComputeWithPools(i,a,o,s,d){_(i),ee("amountToBeReceivedFloat",i,o.decimals);let A=O(i,o.decimals),u=bo(A,o,d),b=Io(u,a,s);if(ye(b).lte(0))throw new ut;return z(b,a.decimals).toFixed()}getAmountToSendComputeCctp(i,a,o,s){_(i),ee("amountToBeReceivedFloat",i,o.decimals);let d=O(i,o.decimals);switch(s){case 3:{if(!a.cctpAddress||!o.cctpAddress||!a.cctpFeeShare)throw new Ne("Such route does not support CCTP protocol");let A=d.div(ye(1).minus(a.cctpFeeShare)).round(0,ye.roundDown),u=De(A,o.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!o.cctpV2Address||!a.cctpV2FeeShare)throw new Ne("Such route does not support CCTP V2 protocol");let A=d.div(ye(1).minus(a.cctpV2FeeShare)).round(0,ye.roundDown),u=De(A,o.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}}}async getAmountToSendComputeOft(i,a,o){_(i),ee("amountToBeReceivedFloat",i,o.decimals);let s=O(i,o.decimals);if(!a.oftId||!o.oftId||!a.oftBridgeAddress||a.oftId!==o.oftId)throw new Te("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:o.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!d)throw new Te("Such route does not support OFT protocol");let A=s.div(ye(1).minus(d)).round(0,ye.roundDown),u=De(A,o.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,o){return ba(i,a.allbridgeChainId,o,this.api)}getAverageTransferTime(i,a,o){return i.transferTime?.[a.chainSymbol]?.[o]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let o=(i instanceof Array?i:[i]).map(s=>({chainSymbol:s.chainSymbol,poolAddress:s.poolAddress}));return this.api.refreshPoolInfo(o)}return this.api.refreshPoolInfo()}aprInPercents(i){return ho(i)}async getExtraGasMaxLimits(i,a,o){return await ya(i,a,o,this.api)}async getVUsdFromAmount(i,a,o){_(i);let s;a=="float"?(ee("amount",i,o.decimals),s=O(i,o.decimals).toFixed()):s=i;let d=st(s,o,await Ie(this.api,o));return{int:d,float:z(d,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await Ie(this.api,a))}getAmountFromVUsdFormatted(i,a,o){_(i);let s=vn(i,a,o);if(ye(s).lt(0))throw new ut;return{int:s,float:z(s,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,o){return Nr(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await Ie(this.api,a)},{decimals:o.decimals,feeShare:o.feeShare,poolInfo:await Ie(this.api,o)})}async swapAndBridgeFeeCalculationReverse(i,a,o){let s=Tr(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await Ie(this.api,a)},{decimals:o.decimals,feeShare:o.feeShare,poolInfo:await Ie(this.api,o)}),d=s.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ye(d).lt(0))throw new ut;return s}async getSendAmountDetails(i,a,o,s){_(i);let d;return a=="float"?(ee("amount",i,o.decimals),d=O(i,o.decimals).toFixed()):d=i,wr(d,o,await Ie(this.api,o),s,await Ie(this.api,s))}};function NA(r){return"solanaRpcUrl"in r}var xr=class{params;bridge;pool;yield;utils;service;constructor(i,a=Kn){let o;NA(i)?o=new zn({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):o=new zn(i),this.service=new ra(o,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new oa(this.service),this.params=a}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,a="swap"){return this.service.tokensByChain(i,a)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,o){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,o,s){return this.service.getPendingStatusInfo(i,a,o,s)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,o){return this.service.calculateFeePercentOnDestinationChain(i,a,o)}async getAmountToBeReceivedAndGasFeeOptions(i,a,o,s){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,o,s)}async getAmountToSendAndGasFeeOptions(i,a,o,s){return this.service.getAmountToSendAndGasFeeOptions(i,a,o,s)}async getAmountToBeReceived(i,a,o,s=1){return this.service.getAmountToBeReceived(i,a,o,s)}async getAmountToBeReceivedFromChain(i,a,o,s=1,d,A){return this.service.getAmountToBeReceivedFromChain(i,a,o,s,d,A)}getAmountToBeReceivedFromPools(i,a,o,s,d,A=1){switch(A){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(i,a,o,s,d);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(i,a,o,A)}}async getAmountToSend(i,a,o,s=1){return this.service.getAmountToSend(i,a,o,s)}async getAmountToSendFromChain(i,a,o,s=1,d,A){return this.service.getAmountToSendFromChain(i,a,o,s,d,A)}getAmountToSendFromPools(i,a,o,s,d,A=1){switch(A){case 1:case 2:return this.service.getAmountToSendComputeWithPools(i,a,o,s,d);case 3:case 4:return this.service.getAmountToSendComputeCctp(i,a,o,A)}}async getGasFeeOptions(i,a,o){return this.service.getGasFeeOptions(i,a,o)}getAverageTransferTime(i,a,o){return this.service.getAverageTransferTime(i,a,o)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a,o=1){return this.service.getExtraGasMaxLimits(i,a,o)}async getVUsdFromAmount(i,a,o){return this.service.getVUsdFromAmount(i,a,o)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,o){return this.service.swapAndBridgeFeeCalculation(i,a,o)}async swapAndBridgeFeeCalculationReverse(i,a,o){return this.service.swapAndBridgeFeeCalculationReverse(i,a,o)}async getSendAmountDetails(i,a,o,s){return this.service.getSendAmountDetails(i,a,o,s)}};export{ua as AddressStatus,xr as AllbridgeCoreSdk,ri as AmountFormat,xt as AmountNotEnoughError,En as ArgumentInvalidDecimalsError,Ne as CCTPDoesNotSupportedError,je as ChainSymbol,ae as ChainType,ss as ErrorCode,Dn as ExtraGasMaxLimitExceededError,yt as FeePaymentMethod,ut as InsufficientPoolLiquidityError,lt as InvalidAmountError,In as InvalidGasFeePaymentOptionError,Un as InvalidMessengerOptionError,Ot as InvalidTxError,Re as JupiterError,Ue as Messenger,ie as MethodNotSupportedError,_n as NodeRpcUrlNotInitializedError,Te as OFTDoesNotSupportedError,V as SdkError,ce as SdkRootError,Ra as SolanaAutoTxFee,yn as TimeoutError,qn as TxTooLargeError,bn as VerifyTxError,$n as YieldDoesNotSupportedError,Hd as assertYieldIsSupported,Qi as isYieldSupported,Kn as mainnet,qA as nodeRpcUrlsDefault,$A as nodeUrlsDefault};
2
7
  /*! Bundled license information:
3
8
 
4
9
  @jspm/core/nodelibs/browser/chunk-DtuTasat.js: