UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

3 lines 446 kB
var Hl=Object.defineProperty,Ql=Object.defineProperties;var jl=Object.getOwnPropertyDescriptors;var Yi=Object.getOwnPropertySymbols;var du=Object.prototype.hasOwnProperty,pu=Object.prototype.propertyIsEnumerable;var mu=(s,e,t)=>e in s?Hl(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,_=(s,e)=>{for(var t in e||(e={}))du.call(e,t)&&mu(s,t,e[t]);if(Yi)for(var t of Yi(e))pu.call(e,t)&&mu(s,t,e[t]);return s},q=(s,e)=>Ql(s,jl(e));var Ge=(s,e)=>{var t={};for(var n in s)du.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&Yi)for(var n of Yi(s))e.indexOf(n)<0&&pu.call(s,n)&&(t[n]=s[n]);return t};import{merge as oy}from"lodash";import Ju from"axios";import{PublicKey as bu}from"@solana/web3.js";import{get as fu,set as Zl}from"lodash";var ls=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},yu={},$l={};function we(s){let e=fu(yu,s);if(!e){let t=fu($l,s);e=new ls({name:s,logLevel:t}),Zl(yu,s,e)}return e}import{MINT_SIZE as Jl,TOKEN_PROGRAM_ID as em,getTransferFeeConfig as tm,unpackMint as nm}from"@solana/spl-token";var ms=we("Raydium_accountInfo_util");async function rn(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=_({batchRequest:!1},t),r=ds(e,i),a=new Array(r.length).fill([]);if(n){let c=r.map(m=>{let d=s._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=ds(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ms.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&ms.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new bu(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ms.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Ve(s,e,t){let n=await rn(s,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(_({},o),{accountInfo:n[i]}))}async function Bo({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ve(s,e.map(c=>({pubkey:bt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Jl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=nm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(_({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||em,feeConfig:(a=tm(u))!=null?a:void 0})}return o[bu.default.toBase58()]=o[Z.toBase58()],o}import yn from"bn.js";var xo=9e15,_n=1e9,ps="0123456789abcdef",Qi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ji="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",fs={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-xo,maxE:xo,crypto:!1},wu,wn,be=!0,$i="[DecimalError] ",Fn=$i+"Invalid argument: ",ku=$i+"Precision limit exceeded",hu=$i+"crypto unavailable",Tu="[object Decimal]",gt=Math.floor,it=Math.pow,om=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,im=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,rm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Iu=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,an=1e7,me=7,sm=9007199254740991,am=Qi.length-1,ys=ji.length-1,G={toStringTag:Tu};G.absoluteValue=G.abs=function(){var s=new this.constructor(this);return s.s<0&&(s.s=1),oe(s)};G.ceil=function(){return oe(new this.constructor(this),this.e+1,2)};G.clampedTo=G.clamp=function(s,e){var t,n=this,o=n.constructor;if(s=new o(s),e=new o(e),!s.s||!e.s)return new o(NaN);if(s.gt(e))throw Error(Fn+e);return t=n.cmp(s),t<0?s:n.cmp(e)>0?e:new o(n)};G.comparedTo=G.cmp=function(s){var e,t,n,o,i=this,r=i.d,a=(s=new i.constructor(s)).d,c=i.s,u=s.s;if(!r||!a)return!c||!u?NaN:c!==u?c:r===a?0:!r^c<0?1:-1;if(!r[0]||!a[0])return r[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==s.e)return i.e>s.e^c<0?1:-1;for(n=r.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(r[e]!==a[e])return r[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};G.cosine=G.cos=function(){var s,e,t=this,n=t.constructor;return t.d?t.d[0]?(s=n.precision,e=n.rounding,n.precision=s+Math.max(t.e,t.sd())+me,n.rounding=1,t=um(n,Cu(n,t)),n.precision=s,n.rounding=e,oe(wn==2||wn==3?t.neg():t,s,e,!0)):new n(1):new n(NaN)};G.cubeRoot=G.cbrt=function(){var s,e,t,n,o,i,r,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(be=!1,i=l.s*it(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=dt(l.d),s=l.e,(i=(s-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=it(t,1/3),s=gt((s+1)/3)-(s%3==(s<0?-1:2)),i==1/0?t="5e"+s:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+s),n=new m(t),n.s=l.s):n=new m(i.toString()),r=(s=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=_e(u.plus(l).times(a),u.plus(c),r+2,1),dt(a.d).slice(0,r)===(t=dt(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t=="9999"||!o&&t=="4999"){if(!o&&(oe(a,s+1,0),a.times(a).times(a).eq(l))){n=a;break}r+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(oe(n,s+1,1),e=!n.times(n).times(n).eq(l));break}return be=!0,oe(n,s,m.rounding,e)};G.decimalPlaces=G.dp=function(){var s,e=this.d,t=NaN;if(e){if(s=e.length-1,t=(s-gt(this.e/me))*me,s=e[s],s)for(;s%10==0;s/=10)t--;t<0&&(t=0)}return t};G.dividedBy=G.div=function(s){return _e(this,new this.constructor(s))};G.dividedToIntegerBy=G.divToInt=function(s){var e=this,t=e.constructor;return oe(_e(e,new t(s),0,1,1),t.precision,t.rounding)};G.equals=G.eq=function(s){return this.cmp(s)===0};G.floor=function(){return oe(new this.constructor(this),this.e+1,3)};G.greaterThan=G.gt=function(s){return this.cmp(s)>0};G.greaterThanOrEqualTo=G.gte=function(s){var e=this.cmp(s);return e==1||e===0};G.hyperbolicCosine=G.cosh=function(){var s,e,t,n,o,i=this,r=i.constructor,a=new r(1);if(!i.isFinite())return new r(i.s?1/0:NaN);if(i.isZero())return a;t=r.precision,n=r.rounding,r.precision=t+Math.max(i.e,i.sd())+4,r.rounding=1,o=i.d.length,o<32?(s=Math.ceil(o/3),e=(1/er(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=So(r,1,i.times(e),new r(1),!0);for(var c,u=s,l=new r(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return oe(i,r.precision=t,r.rounding=n,!0)};G.hyperbolicSine=G.sinh=function(){var s,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=So(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/er(5,s)),o=So(i,2,o,o,!0);for(var r,a=new i(5),c=new i(16),u=new i(20);s--;)r=o.times(o),o=o.times(a.plus(r.times(c.times(r).plus(u))))}return i.precision=e,i.rounding=t,oe(o,e,t,!0)};G.hyperbolicTangent=G.tanh=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+7,n.rounding=1,_e(t.sinh(),t.cosh(),n.precision=s,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var s,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?sn(t,o,i):new t(0):new t(NaN):e.isZero()?sn(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),s=sn(t,o+4,i).times(.5),t.precision=o,t.rounding=i,s.minus(e))};G.inverseHyperbolicCosine=G.acosh=function(){var s,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(s=n.precision,e=n.rounding,n.precision=s+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,be=!1,t=t.times(t).minus(1).sqrt().plus(t),be=!0,n.precision=s,n.rounding=e,t.ln()):new n(t)};G.inverseHyperbolicSine=G.asinh=function(){var s,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,be=!1,t=t.times(t).plus(1).sqrt().plus(t),be=!0,n.precision=s,n.rounding=e,t.ln())};G.inverseHyperbolicTangent=G.atanh=function(){var s,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(s=i.precision,e=i.rounding,n=o.sd(),Math.max(n,s)<2*-o.e-1?oe(new i(o),s,e,!0):(i.precision=t=n-o.e,o=_e(o.plus(1),new i(1).minus(o),t+s,1),i.precision=s+4,i.rounding=1,o=o.ln(),i.precision=s,i.rounding=e,o.times(.5))):new i(NaN)};G.inverseSine=G.asin=function(){var s,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(s=sn(i,t+4,n).times(.5),s.s=o.s,s):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};G.inverseTangent=G.atan=function(){var s,e,t,n,o,i,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=ys)return r=sn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=ys)return r=sn(l,m+4,d).times(.5),r.s=u.s,r}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/me+2|0),s=t;s;--s)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(be=!1,e=Math.ceil(a/me),n=1,c=u.times(u),r=new l(u),o=u;s!==-1;)if(o=o.times(c),i=r.minus(o.div(n+=2)),o=o.times(c),r=i.plus(o.div(n+=2)),r.d[e]!==void 0)for(s=e;r.d[s]===i.d[s]&&s--;);return t&&(r=r.times(2<<t-1)),be=!0,oe(r,l.precision=m,l.rounding=d,!0)};G.isFinite=function(){return!!this.d};G.isInteger=G.isInt=function(){return!!this.d&&gt(this.e/me)>this.d.length-2};G.isNaN=function(){return!this.s};G.isNegative=G.isNeg=function(){return this.s<0};G.isPositive=G.isPos=function(){return this.s>0};G.isZero=function(){return!!this.d&&this.d[0]===0};G.lessThan=G.lt=function(s){return this.cmp(s)<0};G.lessThanOrEqualTo=G.lte=function(s){return this.cmp(s)<1};G.logarithm=G.log=function(s){var e,t,n,o,i,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(s==null)s=new l(10),e=!0;else{if(s=new l(s),t=s.d,s.s<0||!t||!t[0]||s.eq(1))return new l(NaN);e=s.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(be=!1,a=m+p,r=vn(u,a),n=e?Zi(l,a+10):vn(s,a),c=_e(r,n,a,1),zo(c.d,o=m,d))do if(a+=10,r=vn(u,a),n=e?Zi(l,a+10):vn(s,a),c=_e(r,n,a,1),!i){+dt(c.d).slice(o+1,o+15)+1==1e14&&(c=oe(c,m+1,0));break}while(zo(c.d,o+=10,d));return be=!0,oe(c,m,d)};G.minus=G.sub=function(s){var e,t,n,o,i,r,a,c,u,l,m,d,p=this,f=p.constructor;if(s=new f(s),!p.d||!s.d)return!p.s||!s.s?s=new f(NaN):p.d?s.s=-s.s:s=new f(s.d||p.s!==s.s?p:NaN),s;if(p.s!=s.s)return s.s=-s.s,p.plus(s);if(u=p.d,d=s.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])s.s=-s.s;else if(u[0])s=new f(p);else return new f(c===3?-0:0);return be?oe(s,a,c):s}if(t=gt(s.e/me),l=gt(p.e/me),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,r=d.length):(e=d,t=l,r=u.length),n=Math.max(Math.ceil(a/me),r)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,r=d.length,m=n<r,m&&(r=n),n=0;n<r;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,s.s=-s.s),r=u.length,n=d.length-r;n>0;--n)u[r++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=an-1;--u[o],u[n]+=an}u[n]-=d[n]}for(;u[--r]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(s.d=u,s.e=Ji(u,t),be?oe(s,a,c):s):new f(c===3?-0:0)};G.modulo=G.mod=function(s){var e,t=this,n=t.constructor;return s=new n(s),!t.d||!s.s||s.d&&!s.d[0]?new n(NaN):!s.d||t.d&&!t.d[0]?oe(new n(t),n.precision,n.rounding):(be=!1,n.modulo==9?(e=_e(t,s.abs(),0,3,1),e.s*=s.s):e=_e(t,s,0,n.modulo,1),e=e.times(s),be=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return bs(this)};G.naturalLogarithm=G.ln=function(){return vn(this)};G.negated=G.neg=function(){var s=new this.constructor(this);return s.s=-s.s,oe(s)};G.plus=G.add=function(s){var e,t,n,o,i,r,a,c,u,l,m=this,d=m.constructor;if(s=new d(s),!m.d||!s.d)return!m.s||!s.s?s=new d(NaN):m.d||(s=new d(s.d||m.s===s.s?m:NaN)),s;if(m.s!=s.s)return s.s=-s.s,m.minus(s);if(u=m.d,l=s.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(s=new d(m)),be?oe(s,a,c):s;if(i=gt(m.e/me),n=gt(s.e/me),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,r=l.length):(t=l,n=i,r=u.length),i=Math.ceil(a/me),r=i>r?i+1:r+1,o>r&&(o=r,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(r=u.length,o=l.length,r-o<0&&(o=r,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/an|0,u[o]%=an;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=Ji(u,n),be?oe(s,a,c):s};G.precision=G.sd=function(s){var e,t=this;if(s!==void 0&&s!==!!s&&s!==1&&s!==0)throw Error(Fn+s);return t.d?(e=Bu(t.d),s&&t.e+1>e&&(e=t.e+1)):e=NaN,e};G.round=function(){var s=this,e=s.constructor;return oe(new e(s),s.e+1,e.rounding)};G.sine=G.sin=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+Math.max(t.e,t.sd())+me,n.rounding=1,t=lm(n,Cu(n,t)),n.precision=s,n.rounding=e,oe(wn>2?t.neg():t,s,e,!0)):new n(NaN)};G.squareRoot=G.sqrt=function(){var s,e,t,n,o,i,r=this,a=r.d,c=r.e,u=r.s,l=r.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?r:1/0);for(be=!1,u=Math.sqrt(+r),u==0||u==1/0?(e=dt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=gt((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(_e(r,i,t+2,1)).times(.5),dt(i.d).slice(0,t)===(e=dt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(oe(i,c+1,0),i.times(i).eq(r))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(oe(n,c+1,1),s=!n.times(n).eq(r));break}return be=!0,oe(n,c,l.rounding,s)};G.tangent=G.tan=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+10,n.rounding=1,t=t.sin(),t.s=1,t=_e(t,new n(1).minus(t.times(t)).sqrt(),s+10,0),n.precision=s,n.rounding=e,oe(wn==2||wn==4?t.neg():t,s,e,!0)):new n(NaN)};G.times=G.mul=function(s){var e,t,n,o,i,r,a,c,u,l=this,m=l.constructor,d=l.d,p=(s=new m(s)).d;if(s.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!s.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?s.s/0:s.s*0);for(t=gt(l.e/me)+gt(s.e/me),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,r=c,c=u,u=r),i=[],r=c+u,n=r;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%an|0,e=a/an|0;i[o]=(i[o]+e)%an|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=Ji(i,t),be?oe(s,m.precision,m.rounding):s};G.toBinary=function(s,e){return Ps(this,2,s,e)};G.toDecimalPlaces=G.toDP=function(s,e){var t=this,n=t.constructor;return t=new n(t),s===void 0?t:(Lt(s,0,_n),e===void 0?e=n.rounding:Lt(e,0,8),oe(t,s+t.e+1,e))};G.toExponential=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=fn(n,!0):(Lt(s,0,_n),e===void 0?e=o.rounding:Lt(e,0,8),n=oe(new o(n),s+1,e),t=fn(n,!0,s+1)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toFixed=function(s,e){var t,n,o=this,i=o.constructor;return s===void 0?t=fn(o):(Lt(s,0,_n),e===void 0?e=i.rounding:Lt(e,0,8),n=oe(new i(o),s+o.e+1,e),t=fn(n,!1,s+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};G.toFraction=function(s){var e,t,n,o,i,r,a,c,u,l,m,d,p=this,f=p.d,y=p.constructor;if(!f)return new y(p);if(u=t=new y(1),n=c=new y(0),e=new y(n),i=e.e=Bu(f)-p.e-1,r=i%me,e.d[0]=it(10,r<0?me+r:r),s==null)s=i>0?e:u;else{if(a=new y(s),!a.isInt()||a.lt(u))throw Error(Fn+a);s=a.gt(e)?i>0?e:u:a}for(be=!1,a=new y(dt(f)),l=y.precision,y.precision=i=f.length*me*2;m=_e(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(s)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=_e(s.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=_e(u,n,i,1).minus(p).abs().cmp(_e(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,be=!0,d};G.toHexadecimal=G.toHex=function(s,e){return Ps(this,16,s,e)};G.toNearest=function(s,e){var t=this,n=t.constructor;if(t=new n(t),s==null){if(!t.d)return t;s=new n(1),e=n.rounding}else{if(s=new n(s),e===void 0?e=n.rounding:Lt(e,0,8),!t.d)return s.s?t:s;if(!s.d)return s.s&&(s.s=t.s),s}return s.d[0]?(be=!1,t=_e(t,s,0,e,1).times(s),be=!0,oe(t)):(s.s=t.s,t=s),t};G.toNumber=function(){return+this};G.toOctal=function(s,e){return Ps(this,8,s,e)};G.toPower=G.pow=function(s){var e,t,n,o,i,r,a=this,c=a.constructor,u=+(s=new c(s));if(!a.d||!s.d||!a.d[0]||!s.d[0])return new c(it(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,s.eq(1))return oe(a,n,i);if(e=gt(s.e/me),e>=s.d.length-1&&(t=u<0?-u:u)<=sm)return o=xu(c,a,t,n),s.s<0?new c(1).div(o):oe(o,n,i);if(r=a.s,r<0){if(e<s.d.length-1)return new c(NaN);if((s.d[e]&1)==0&&(r=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=r,a}return t=it(+a,u),e=t==0||!isFinite(t)?gt(u*(Math.log("0."+dt(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?r/0:0):(be=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=bs(s.times(vn(a,n+t)),n),o.d&&(o=oe(o,n+5,1),zo(o.d,n,i)&&(e=n+10,o=oe(bs(s.times(vn(a,e+t)),e),e+5,1),+dt(o.d).slice(n+1,n+15)+1==1e14&&(o=oe(o,n+1,0)))),o.s=r,be=!0,c.rounding=i,oe(o,n,i))};G.toPrecision=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=fn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Lt(s,1,_n),e===void 0?e=o.rounding:Lt(e,0,8),n=oe(new o(n),s,e),t=fn(n,s<=n.e||n.e<=o.toExpNeg,s)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toSignificantDigits=G.toSD=function(s,e){var t=this,n=t.constructor;return s===void 0?(s=n.precision,e=n.rounding):(Lt(s,1,_n),e===void 0?e=n.rounding:Lt(e,0,8)),oe(new n(t),s,e)};G.toString=function(){var s=this,e=s.constructor,t=fn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()&&!s.isZero()?"-"+t:t};G.truncated=G.trunc=function(){return oe(new this.constructor(this),this.e+1,1)};G.valueOf=G.toJSON=function(){var s=this,e=s.constructor,t=fn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()?"-"+t:t};function dt(s){var e,t,n,o=s.length-1,i="",r=s[0];if(o>0){for(i+=r,e=1;e<o;e++)n=s[e]+"",t=me-n.length,t&&(i+=Mn(t)),i+=n;r=s[e],n=r+"",t=me-n.length,t&&(i+=Mn(t))}else if(r===0)return"0";for(;r%10===0;)r/=10;return i+r}function Lt(s,e,t){if(s!==~~s||s<e||s>t)throw Error(Fn+s)}function zo(s,e,t,n){var o,i,r,a;for(i=s[0];i>=10;i/=10)--e;return--e<0?(e+=me,o=0):(o=Math.ceil((e+1)/me),e%=me),i=it(10,me-e),a=s[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),r=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):r=(t<4&&a+1==i||t>3&&a+1==i/2)&&(s[o+1]/i/100|0)==it(10,e-2)-1||(a==i/2||a==0)&&(s[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),r=(n||t<4)&&a==9999||!n&&t>3&&a==4999):r=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(s[o+1]/i/1e3|0)==it(10,e-3)-1,r}function Hi(s,e,t){for(var n,o=[0],i,r=0,a=s.length;r<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=ps.indexOf(s.charAt(r++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function um(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/er(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=So(s,1,e.times(o),new s(1));for(var i=t;i--;){var r=e.times(e);e=r.times(r).minus(r).times(8).plus(1)}return s.precision-=t,e}var _e=function(){function s(n,o,i){var r,a=0,c=n.length;for(n=n.slice();c--;)r=n[c]*o+a,n[c]=r%i|0,a=r/i|0;return a&&n.unshift(a),n}function e(n,o,i,r){var a,c;if(i!=r)c=i>r?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,r){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*r+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,r,a,c){var u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I,C,L,N=n.constructor,O=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new N(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-o.e):(c=an,p=me,l=gt(n.e/p)-gt(o.e/p)),C=v.length,K=R.length,g=new N(O),A=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,i==null?(w=i=N.precision,r=N.rounding):a?w=i+(n.e-o.e)+1:w=i,w<0)A.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,v=v[0],w++;(m<K||d)&&w--;m++)x=d*c+(R[m]||0),A[m]=x/v|0,d=x%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=s(v,d,c),R=s(R,d,c),C=v.length,K=R.length),B=C,k=R.slice(0,C),T=k.length;T<C;)k[T++]=0;L=v.slice(),L.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,k,C,T),u<0?(h=k[0],C!=T&&(h=h*c+(k[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(v,d,c),b=y.length,T=k.length,u=e(y,k,b,T),u==1&&(d--,t(y,C<b?L:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(k,y,T,c),u==-1&&(T=k.length,u=e(v,k,C,T),u<1&&(d++,t(k,C<T?L:v,T,c))),T=k.length):u===0&&(d++,k=[0]),A[m++]=d,u&&k[0]?k[T++]=R[B]||0:(k=[R[B]],T=1);while((B++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,wu=f;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,oe(g,a?i+g.e+1:i,r,f)}return g}}();function oe(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor;e:if(e!=null){if(m=s.d,!m)return s;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=me,r=e,l=m[d=0],c=l/it(10,o-r-1)%10|0;else if(d=Math.ceil((i+1)/me),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=me,r=i-me+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=me,r=i-me+o,c=r<0?0:l/it(10,o-r-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(r<0?l:l%it(10,o-r-1)),u=t<4?(c||n)&&(t==0||t==(s.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?r>0?l/it(10,o-r):0:m[d-1])%10&1||t==(s.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=s.e+1,m[0]=it(10,(me-e%me)%me),s.e=-e||0):m[0]=s.e=0,s;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=it(10,me-i),m[d]=r>0?(l/it(10,o-r)%it(10,r)|0)*a:0),u)for(;;)if(d==0){for(i=1,r=m[0];r>=10;r/=10)i++;for(r=m[0]+=a,a=1;r>=10;r/=10)a++;i!=a&&(s.e++,m[0]==an&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=an)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return be&&(s.e>p.maxE?(s.d=null,s.e=NaN):s.e<p.minE&&(s.e=0,s.d=[0])),s}function fn(s,e,t){if(!s.isFinite())return Ku(s);var n,o=s.e,i=dt(s.d),r=i.length;return e?(t&&(n=t-r)>0?i=i.charAt(0)+"."+i.slice(1)+Mn(n):r>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(s.e<0?"e":"e+")+s.e):o<0?(i="0."+Mn(-o-1)+i,t&&(n=t-r)>0&&(i+=Mn(n))):o>=r?(i+=Mn(o+1-r),t&&(n=t-o-1)>0&&(i=i+"."+Mn(n))):((n=o+1)<r&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-r)>0&&(o+1===r&&(i+="."),i+=Mn(n))),i}function Ji(s,e){var t=s[0];for(e*=me;t>=10;t/=10)e++;return e}function Zi(s,e,t){if(e>am)throw be=!0,t&&(s.precision=t),Error(ku);return oe(new s(Qi),e,1,!0)}function sn(s,e,t){if(e>ys)throw Error(ku);return oe(new s(ji),e,t,!0)}function Bu(s){var e=s.length-1,t=e*me+1;if(e=s[e],e){for(;e%10==0;e/=10)t--;for(e=s[0];e>=10;e/=10)t++}return t}function Mn(s){for(var e="";s--;)e+="0";return e}function xu(s,e,t,n){var o,i=new s(1),r=Math.ceil(n/me+4);for(be=!1;;){if(t%2&&(i=i.times(e),Pu(i.d,r)&&(o=!0)),t=gt(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Pu(e.d,r)}return be=!0,i}function gu(s){return s.d[s.d.length-1]&1}function Su(s,e,t){for(var n,o=new s(e[0]),i=0;++i<e.length;)if(n=new s(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function bs(s,e){var t,n,o,i,r,a,c,u=0,l=0,m=0,d=s.constructor,p=d.rounding,f=d.precision;if(!s.d||!s.d[0]||s.e>17)return new d(s.d?s.d[0]?s.s<0?0:1/0:1:s.s?s.s<0?0:s:0/0);for(e==null?(be=!1,c=f):c=e,a=new d(.03125);s.e>-2;)s=s.times(a),m+=5;for(n=Math.log(it(2,m))/Math.LN10*2+5|0,c+=n,t=i=r=new d(1),d.precision=c;;){if(i=oe(i.times(s),c,1),t=t.times(++l),a=r.plus(_e(i,t,c,1)),dt(a.d).slice(0,c)===dt(r.d).slice(0,c)){for(o=m;o--;)r=oe(r.times(r),c,1);if(e==null)if(u<3&&zo(r.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return oe(r,d.precision=f,p,be=!0);else return d.precision=f,r}r=a}}function vn(s,e){var t,n,o,i,r,a,c,u,l,m,d,p=1,f=10,y=s,b=y.d,g=y.constructor,A=g.rounding,k=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(be=!1,l=k):l=e,g.precision=l+=f,t=dt(b),n=t.charAt(0),Math.abs(i=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(s),t=dt(y.d),n=t.charAt(0),p++;i=y.e,n>1?(y=new g("0."+t),i++):y=new g(n+"."+t.slice(1))}else return u=Zi(g,l+2,k).times(i+""),y=vn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?oe(y,k,A,be=!0):y;for(m=y,c=r=y=_e(y.minus(1),y.plus(1),l,1),d=oe(y.times(y),l,1),o=3;;){if(r=oe(r.times(d),l,1),u=c.plus(_e(r,new g(o),l,1)),dt(u.d).slice(0,l)===dt(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Zi(g,l+2,k).times(i+""))),c=_e(c,new g(p),l,1),e==null)if(zo(c.d,l-f,A,a))g.precision=l+=f,u=r=y=_e(m.minus(1),m.plus(1),l,1),d=oe(y.times(y),l,1),o=a=1;else return oe(c,g.precision=k,A,be=!0);else return g.precision=k,c;c=u,o+=2}}function Ku(s){return String(s.s*s.s/0)}function gs(s,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,s.e=t=t-n-1,s.d=[],n=(t+1)%me,t<0&&(n+=me),n<o){for(n&&s.d.push(+e.slice(0,n)),o-=me;n<o;)s.d.push(+e.slice(n,n+=me));e=e.slice(n),n=me-e.length}else n-=o;for(;n--;)e+="0";s.d.push(+e),be&&(s.e>s.constructor.maxE?(s.d=null,s.e=NaN):s.e<s.constructor.minE&&(s.e=0,s.d=[0]))}else s.e=0,s.d=[0];return s}function cm(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Iu.test(e))return gs(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(im.test(e))t=16,e=e.toLowerCase();else if(om.test(e))t=2;else if(rm.test(e))t=8;else throw Error(Fn+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),r=i>=0,n=s.constructor,r&&(e=e.replace(".",""),a=e.length,i=a-i,o=xu(n,new n(t),i,i*2)),u=Hi(e,t,an),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=Ji(u,l),s.d=u,be=!1,r&&(s=_e(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?it(2,c):Yo.pow(2,c))),be=!0,s)}function lm(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:So(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/er(5,t)),e=So(s,2,e,e);for(var o,i=new s(5),r=new s(16),a=new s(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(r.times(o).minus(a))));return e}function So(s,e,t,n,o){var i,r,a,c,u=1,l=s.precision,m=Math.ceil(l/me);for(be=!1,c=t.times(t),a=new s(n);;){if(r=_e(a.times(c),new s(e++*e++),l,1),a=o?n.plus(r):n.minus(r),n=_e(r.times(c),new s(e++*e++),l,1),r=a.plus(n),r.d[m]!==void 0){for(i=m;r.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=r,r=i,u++}return be=!0,r.d.length=m+1,r}function er(s,e){for(var t=s;--e;)t*=s;return t}function Cu(s,e){var t,n=e.s<0,o=sn(s,s.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return wn=n?4:1,e;if(t=e.divToInt(o),t.isZero())wn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return wn=gu(t)?n?2:3:n?4:1,e;wn=gu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Ps(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(Lt(t,1,_n),n===void 0?n=p.rounding:Lt(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Ku(s);else{for(l=fn(s),r=l.indexOf("."),f?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,r>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-r,d.d=Hi(fn(d),10,o),d.e=d.d.length),m=Hi(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(r<0?i--:(s=new p(s),s.d=m,s.e=i,s=_e(s,d,t,n,0,o),m=s.d,i=s.e,u=wu),r=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(r!==void 0||u)&&(n===0||n===(s.s<0?3:2)):r>a||r===a&&(n===4||u||n===6&&m[t-1]&1||n===(s.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(r=0,l="";r<c;r++)l+=ps.charAt(m[r]);if(f){if(c>1)if(e==16||e==8){for(r=e==16?4:3,--c;c%r;c++)l+="0";for(m=Hi(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=ps.charAt(m[r])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return s.s<0?"-"+l:l}function Pu(s,e){if(s.length>e)return s.length=e,!0}function mm(s){return new this(s).abs()}function dm(s){return new this(s).acos()}function pm(s){return new this(s).acosh()}function fm(s,e){return new this(s).plus(e)}function ym(s){return new this(s).asin()}function bm(s){return new this(s).asinh()}function gm(s){return new this(s).atan()}function Pm(s){return new this(s).atanh()}function Am(s,e){s=new this(s),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!s.s||!e.s?t=new this(NaN):!s.d&&!e.d?(t=sn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?sn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=sn(this,i,1).times(.5),t.s=s.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(_e(s,e,i,1)),e=sn(this,i,1),this.precision=n,this.rounding=o,t=s.s<0?t.minus(e):t.plus(e)):t=this.atan(_e(s,e,i,1)),t}function wm(s){return new this(s).cbrt()}function km(s){return oe(s=new this(s),s.e+1,2)}function hm(s,e,t){return new this(s).clamp(e,t)}function Tm(s){if(!s||typeof s!="object")throw Error($i+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,_n,"rounding",0,8,"toExpNeg",-xo,0,"toExpPos",0,xo,"maxE",0,xo,"minE",-xo,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=fs[t]),(n=s[t])!==void 0)if(gt(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Fn+t+": "+n);if(t="crypto",o&&(this[t]=fs[t]),(n=s[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(hu);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function Im(s){return new this(s).cos()}function Bm(s){return new this(s).cosh()}function Ru(s){var e,t,n;function o(i){var r,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,Au(i)){u.s=i.s,be?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(r=0,a=i;a>=10;a/=10)r++;be?r>o.maxE?(u.e=NaN,u.d=null):r<o.minE?(u.e=0,u.d=[0]):(u.e=r,u.d=[i]):(u.e=r,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return gs(u,i.toString())}else if(c!=="string")throw Error(Fn+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Iu.test(i)?gs(u,i):cm(u,i)}if(o.prototype=G,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Tm,o.clone=Ru,o.isDecimal=Au,o.abs=mm,o.acos=dm,o.acosh=pm,o.add=fm,o.asin=ym,o.asinh=bm,o.atan=gm,o.atanh=Pm,o.atan2=Am,o.cbrt=wm,o.ceil=km,o.clamp=hm,o.cos=Im,o.cosh=Bm,o.div=xm,o.exp=Sm,o.floor=Km,o.hypot=Cm,o.ln=Rm,o.log=Lm,o.log10=Om,o.log2=Nm,o.max=Mm,o.min=vm,o.mod=Fm,o.mul=_m,o.pow=Vm,o.random=Em,o.round=Wm,o.sign=Dm,o.sin=qm,o.sinh=Um,o.sqrt=Gm,o.sub=Xm,o.sum=zm,o.tan=Ym,o.tanh=Hm,o.trunc=Qm,s===void 0&&(s={}),s&&s.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)s.hasOwnProperty(t=n[e++])||(s[t]=this[t]);return o.config(s),o}function xm(s,e){return new this(s).div(e)}function Sm(s){return new this(s).exp()}function Km(s){return oe(s=new this(s),s.e+1,3)}function Cm(){var s,e,t=new this(0);for(be=!1,s=0;s<arguments.length;)if(e=new this(arguments[s++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return be=!0,new this(1/0);t=e}return be=!0,t.sqrt()}function Au(s){return s instanceof Yo||s&&s.toStringTag===Tu||!1}function Rm(s){return new this(s).ln()}function Lm(s,e){return new this(s).log(e)}function Nm(s){return new this(s).log(2)}function Om(s){return new this(s).log(10)}function Mm(){return Su(this,arguments,"lt")}function vm(){return Su(this,arguments,"gt")}function Fm(s,e){return new this(s).mod(e)}function _m(s,e){return new this(s).mul(e)}function Vm(s,e){return new this(s).pow(e)}function Em(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:Lt(s,1,_n),n=Math.ceil(s/me),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(hu);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],s%=me,n&&s&&(o=it(10,me-s),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=me)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<me&&(t-=me-n)}return r.e=t,r.d=a,r}function Wm(s){return oe(s=new this(s),s.e+1,this.rounding)}function Dm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function qm(s){return new this(s).sin()}function Um(s){return new this(s).sinh()}function Gm(s){return new this(s).sqrt()}function Xm(s,e){return new this(s).sub(e)}function zm(){var s=0,e=arguments,t=new this(e[s]);for(be=!1;t.s&&++s<e.length;)t=t.plus(e[s]);return be=!0,oe(t,this.precision,this.rounding)}function Ym(s){return new this(s).tan()}function Hm(s){return new this(s).tanh()}function Qm(s){return oe(s=new this(s),s.e+1,1)}G[Symbol.for("nodejs.util.inspect.custom")]=G.toString;G[Symbol.toStringTag]="Decimal";var Yo=G.constructor=Ru(fs);Qi=new Yo(Qi);ji=new Yo(ji);var M=Yo;import od from"big.js";import or from"bn.js";import jm from"toformat";var Zm=jm,Ho=Zm;import nr from"big.js";import Jm from"bn.js";import ed from"decimal.js-light";import Qo from"bn.js";var Lu=9007199254740991;function ne(s){let e=we("Raydium_parseBigNumberish");if(s instanceof Qo)return s;if(typeof s=="string"){if(s.match(/^-?[0-9]+$/))return new Qo(s);e.logWithError(`invalid BigNumberish string: ${s}`)}return typeof s=="number"?(s%1&&e.logWithError(`BigNumberish number underflow: ${s}`),(s>=Lu||s<=-Lu)&&e.logWithError(`BigNumberish number overflow: ${s}`),new Qo(String(s))):typeof s=="bigint"?new Qo(s.toString()):(e.error(`invalid BigNumberish value: ${s}`),new Qo(0))}var tr=we("module/fraction"),As=Ho(nr),jo=Ho(ed),td={[0]:jo.ROUND_DOWN,[1]:jo.ROUND_HALF_UP,[2]:jo.ROUND_UP},nd={[0]:nr.roundDown,[1]:nr.roundHalfUp,[2]:nr.roundUp},Ke=class{constructor(e,t=new Jm(1)){this.numerator=ne(e),this.denominator=ne(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ke(this.denominator,this.numerator)}add(e){let t=e instanceof Ke?e:new Ke(ne(e));return this.denominator.eq(t.denominator)?new Ke(this.numerator.add(t.numerator),this.denominator):new Ke(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ke?e:new Ke(ne(e));return this.denominator.eq(t.denominator)?new Ke(this.numerator.sub(t.numerator),this.denominator):new Ke(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ke?e:new Ke(ne(e));return new Ke(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ke?e:new Ke(ne(e));return new Ke(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||tr.logWithError(`${e} is not an integer.`),e<=0&&tr.logWithError(`${e} is not positive.`),jo.set({precision:e+1,rounding:td[n]});let o=new jo(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||tr.logWithError(`${e} is not an integer.`),e<0&&tr.logWithError(`${e} is negative.`),As.DP=e,As.RM=nd[n]||1,new As(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var id=we("Raydium_amount"),Nu=Ho(od);function rd(s,e){let t="0",n="0";if(s.includes(".")){let o=s.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):id.logWithError(`invalid number string, num: ${s}`)}else t=s;return[t,n.slice(0,e)||n]}var Re=class extends Ke{constructor(t,n,o=!0,i){let r=new or(0),a=ws.pow(new or(t.decimals));if(o)r=ne(n);else{let c=new or(0),u=new or(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=rd(n.toString(),t.decimals);c=ne(l),u=ne(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=we(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new Re(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Re(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Nu.DP=this.token.decimals,new Nu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as sd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ou}from"@solana/spl-token";var Vn={chainId:101,address:sd.default.toBase58(),programId:Ou.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Pt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ou.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Bs}from"@solana/web3.js";import{PublicKey as Xe,SystemProgram as Mu,SYSVAR_RENT_PUBKEY as ad}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ud}from"@solana/spl-token";function S({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var ks=[S({pubkey:ud,isWritable:!1}),S({pubkey:Mu.programId,isWritable:!1}),S({pubkey:ad,isWritable:!1})];function hs({publicKey:s,transformSol:e}){let t=Ts(s.toString());if(t instanceof Xe)return e&&t.equals(at)?Z:t;if(e&&t.toString()===at.toBase58())return Z;if(typeof t=="string"){if(t===Xe.default.toBase58())return Xe.default;try{return new Xe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ts(s){try{return new Xe(s)}catch{return s}}var ir=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),En=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),pt=new Xe("SysvarRent111111111111111111111111111111111"),vu=new Xe("SysvarC1ock11111111111111111111111111111111"),un=new Xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),cd=new Xe("Sysvar1nstructions1111111111111111111111111"),Is=Mu.programId,zy=new Xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Yy=new Xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Hy=new Xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Qy=new Xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),jy=new Xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Zy=new Xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),$y=new Xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Jy=new Xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),eb=new Xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),tb=new Xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),nb=new Xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Xe("So11111111111111111111111111111111111111112"),at=Xe.default;function bt(s){return hs({publicKey:s,transformSol:!0})}var xs=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===at.toBase58()||e instanceof Bs&&at.equals(e)){this.decimals=Pt.decimals,this.symbol=Pt.symbol,this.name=Pt.name,this.mint=new Bs(Pt.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Bs.default:hs({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ze=xs;ze.WSOL=new xs(q(_({},Pt),{mint:Pt.address}));var Ss=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},rr=Ss;rr.SOL=new Ss(Vn);import ld from"bn.js";var Fu=new Ke(new ld(100)),ut=class extends Ke{toSignificant(e=5,t,n){return this.mul(Fu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Fu).toFixed(e,t,n)}};var md=we("Raydium_price"),Nt=class extends Ke{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ke(Ks(n.decimals),Ks(o.decimals))}get raw(){return new Ke(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&md.logWithError("mul token not equals");let n=super.mul(t);return new Nt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var Ot=new yn(0),_u=new yn(1),Xb=new yn(2),zb=new yn(3),Yb=new yn(5),ws=new yn(10),Hb=new yn(100),Qb=new yn(1e3),jb=new yn(1e4);function Ks(s){return ws.pow(ne(s))}function sr(s,e){let t=s.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Zo(s,e,t){return s.mul(e).add(t).sub(new yn(1)).div(t)}function ar(s,e,t){return s.mul(e).div(t)}function ds(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var cn=class{constructor(e){this._owner=e}get publicKey(){return cn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return cn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return cn.isKeyPair(this._owner)}get isPublicKey(){return cn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!cn.isKeyPair(e)}};import{PublicKey as gd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pd}from"@solana/spl-token";import{ComputeBudgetProgram as Vu,Keypair as Wu,PublicKey as dd,Transaction as Du,TransactionMessage as pd,VersionedTransaction as qu}from"@solana/web3.js";var X={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee",TransferTip:"TransferTip"};import{TOKEN_PROGRAM_ID as fd}from"@solana/spl-token";var Eu=we("Raydium_txUtil"),Uu=1644;function ur(s){let e=[],t=[];return s.microLamports&&(e.push(Vu.setComputeUnitPrice({microLamports:s.microLamports})),t.push(X.SetComputeUnitPrice)),s.units&&(e.push(Vu.setComputeUnitLimit({units:s.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Ko(s,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=s.getLatestBlockhash)==null?void 0:n.call(s,{commitment:t})))==null?void 0:o.blockhash}async function cr(s,e){return s.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);s.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function Cs(s,e){s.length<1&&Eu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&Eu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Du;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Uu}catch{return!1}}function fe(s,e){let[t,n]=dd.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function $o({instructions:s,payer:e,signers:t}){return Cs(s,[e,...t])}function Jo({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Wu.generate().publicKey.toString()}){let i=new pd({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new qu(i).serialize()).toString("base64").length<Uu}catch{return!1}}var yd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),bd=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof qu&&(e=yd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function to(s){let e=[];return s.forEach(t=>{t instanceof Du&&(t.recentBlockhash||(t.recentBlockhash=fd.toBase58()),t.feePayer||(t.feePayer=Wu.generate().publicKey)),e.push(bd(t))}),console.log("simulate tx string:",e),e}function ee(s,e,t){return fe([s.toBuffer(),(t!=null?t:Pd).toBuffer(),e.toBuffer()],new gd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var Gu=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Xu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),zu=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ei=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),gg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Yu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Rs=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),lr=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Pg=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Hu=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),no=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ti=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),mr=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),oo=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ag=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Qu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ad=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),wd=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),kd=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),hd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),io=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ju=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),wg=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),dr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),ct=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),kg=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),hg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Tg=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Ig=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Bg=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ni={IDO_PROGRAM_ID_V1:Ad,IDO_PROGRAM_ID_V2:wd,IDO_PROGRAM_ID_V3:kd,IDO_PROGRAM_ID_V4:hd};var kn={OPEN_BOOK_PROGRAM:new ie("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ie("Ray1111111111111111111111111111111111111111"),AMM_V4:new ie("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ie("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ie("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ie("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ie("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ie("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ie("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ie("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ie.default,Router:new ie("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ie("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ie("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ie("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ie("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ie("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ie("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ie("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ie("Ray1111111111111111111111111111111111111111")};import We from"bn.js";var bn=1e4;function Le(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(_({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,r=new We(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===bn){let c=new We(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new We(bn)),new We(bn-i.transferFeeBasisPoints)),u=new We(i.maximumFee.toString()),l=c.sub(s).gt(u)?s.add(u):c,m=Wn(l.mul(new We(i.transferFeeBasisPoints)),new We(bn)),d=m.gt(r)?r:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Wn(s.mul(new We(i.transferFeeBasisPoints)),new We(bn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function ln(s,e){return s===void 0?e:e===void 0?s:Math.min(s,e)}function Wn(s,e){let{div:t,mod:n}=s.divmod(e);return n.gt(new We(0))?t.add(new We(1)):t}function ro(s,e){if(s.isZero())return new We(0);let t=s.div(e);return t.isZero()?new We(1):s.mod(e).gt(new We(0))?t.add(new We(1)):t}function Ls(s,e,t){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Wn(s.mul(new We(o.transferFeeBasisPoints)),new We(bn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function Ns(s,e,t){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===bn){let a=new We(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new We(bn)),new We(bn-o.transferFeeBasisPoints)),c=new We(o.maximumFee.toString()),u=a.sub(s).gt(c)?s.add(c):a,l=Wn(u.mul(new We(o.transferFeeBasisPoints)),new We(bn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Os,AddressLookupTableAccount as Lo}from"@solana/web3.js";async function Ms({connection:s,address:e,cluster:t="mainnet"}){let n=await rn(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Os(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new Lo({key:a,state:Lo.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Ro[a.toString()]=c:Co[a.toString()]=c}return o}var Co={},vs=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Co[e])return Co;let t=new Os(e),n=await s.getAccountInfo(t);return n&&(Co[e]=new Lo({key:t,state:Lo.deserialize(n.data)})),Co},Ro={},Fs=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ro[e])return Ro;let t=new Os(e),n=await s.getAccountInfo(t);return n&&(Ro[e]=new Lo({key:t,state:Lo.deserialize(n.data)})),Ro};import{PublicKey as No,sendAndConfirmTransaction as _s,SystemProgram as Td,Transaction as oi,TransactionMessage as ii,VersionedTransaction as ri}from"@solana/web3.js";import Id from"axios";var fr=2e3,yr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.loopMultiTxStatus=!!e.loopMultiTxStatus}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Id.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=ur(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Td.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new No(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(X.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...r.filter(a=>a!==No.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new oi;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var l;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=i!=null?i:await Ko(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),to([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await _s(this.connection,t,this.signers.find(d=>d.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let m=await this.signAllTransactions([t]);if(this.signers.length)for(let d of m)try{d.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(m[0].serialize(),{skipPreflight:r}),signedTx:m[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),r=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=l||{},b=f!=null?f:await Ko(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],k=0;for(let T of r){if(++k,k<=p)continue;let h=await _s(this.connection,T,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(h)}return{txIds:A,signedTxs:r}}return{txIds:await await Promise.all(r.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));to(A);let k=await this.signAllTransactions(A);if(m){let T=0,h=[],w=async()=>{if(!k[T])return;let x=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:y});h.push({txId:x,status:"sent",signedTx:k[T]}),d==null||d([...h]),T++;let B=!1,K=null,I=null,C=L=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let N=h.findIndex(O=>O.txId===x);if(N>-1){if(h[N].status==="error"||h[N].status==="success")return;h[N].status=L.err?"error":"success"}d==null||d([...h]),L.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var L;if(B){clearInterval(K);return}try{let N=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(B=!0,clearInterval(K),C({err:((L=N.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",x))}catch(N){B=!0,clearInterval(K),console.error("getTransaction timeout:",N,x)}},fr)),I=this.connection.onSignature(x,L=>{if(B){this.connection.removeSignatureListener(I);return}B=!0,C(L)},"confirmed"),this.connection.getSignatureStatus(x)};return await w(),{txIds:h.map(x=>x.txId),signedTxs:k}}else{let T=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});T.push(w)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=f,r=Ge(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Fs(this.connection):await vs(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new No(b));let l=await Ms({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?No.default.toBase58():i!=null?i:await Ko(this.connection,this.blockhashCommitment),d=new ii({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ri(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var T;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(to([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await cr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let w of h)try{w.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),r=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:r,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),to(r),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of r){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await cr(this.connection,A),b.push(A)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(m){let g=0,A=[],k=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++;let h=!1,w=null,x=null,B=K=>{w!==null&&clearInterval(w),x!==null&&this.connection.removeSignatureListener(x);let I=A.findIndex(C=>C.txId===T);if(I>-1){if(A[I].status==="error"||A[I].status==="success")return;A[I].status=K.err?"error":"success"}d==null||d([...A]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(w),B({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(w),console.error("getTransaction timeout:",I,T)}},fr)),x=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,B(K)},"confirmed"),this.connection.getSignatureStatus(T)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=Ge(m,["splitIns","computeBudgetConfig"]),i=n?ur(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...i.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new No(A));if(p!==t[l]&&u.length<12&&($o({instructions:y,payer:this.feePayer,signers:g})||$o({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,$o({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new oi().add(...i.instructions,...u)):a.push(new oi().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);$o({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new oi().add(...i.instructions,...u)):a.push(new oi().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var T;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await Ko(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),to(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,w=[];for(let x of a){if(++h,h<=b){w.push("tx skipped");continue}let B=await _s(this.connection,x,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});w.push(B)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),w=[...a.slice(0,b),...h];if(f){let x=0,B=[],K=async()=>{if(!w[x])return;x<b&&(B.push({txId:"",status:"success",signedTx:w[x]}),y==null||y([...B]),x++,K());let I=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:A});B.push({txId:I,status:"sent",signedTx:w[x]}),y==null||y([...B]),x++;let C=!1,L=null,N=null,O=R=>{L!==null&&clearInterval(L),N!==null&&this.connection.removeSignatureListener(N);let v=B.findIndex(z=>z.txId===I);if(v>-1){if(B[v].status==="error"||B[v].status==="success")return;B[v].status=R.err?"error":"success"}y==null||y([...B]),R.err||K()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var R;if(C){clearInterval(L);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(L),O({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(L),console.error("getTransaction timeout:",v,I)}},fr)),N=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:B.map(I=>I.txId),signedTxs:w}}else{let x=[];for(let B=0;B<w.length;B+=1){let K=await this.connection.sendRawTransaction(w[B].serialize(),{skipPreflight:A});x.push(K)}return{txIds:x,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var k;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[]}=A,r=Ge(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await Fs(this.connection):await vs(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let T of c)a[T]===void 0&&u.push(new No(T));let l=await Ms({connection:this.connection,address:u});for(let[T,h]of Object.entries(l))a[T]=h;let m=t?ur(t):{instructions:[],instructionTypes:[]},d=await Ko(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(_({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],w=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&(Jo({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||Jo({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(T);else{if(b.length===0)throw Error("item ins too big");g+=T===n[g]?1:0;let x={};for(let B of[...new Set(c)])a[B]!==void 0&&(x[B]=a[B]);if(t&&Jo({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let B=new ii({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ri(B))}else{let B=new ii({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ri(B))}y.push(Array.from(new Set(b.map(B=>B.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(B=>p[B]).filter(B=>B!==void 0)),b=[T]}}),b.length>0){let h=[...new Set(b.map(w=>w.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&Jo({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new ii({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ri(w))}else{let w=new ii({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ri(w))}y.push(h)}return(k=this.owner)!=null&&k.signer&&y.forEach(T=>{T.some(h=>h.publicKey.equals(this.owner.publicKey))||T.push(this.owner.signer)}),f.forEach((T,h)=>{T.sign(y[h])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async T=>{var I;let{sequentially:h,onTxUpdate:w,skipTxCount:x=0,recentBlockHash:B,skipPreflight:K=!0}=T||{};if(f.map(async(C,L)=>{y[L].length&&C.sign(y[L]),B&&(C.message.recentBlockhash=B)}),to(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,L=[];for(let N of f){if(++C,C<=x){console.log("skip tx: ",C),L.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await cr(this.connection,O),L.push(O)}return{txIds:L,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(x,f.length)),L=[...f.slice(0,x),...C];if(h){let N=0,O=[],R=async()=>{if(!L[N])return;if(N<x){O.push({txId:"",status:"success",signedTx:L[N]}),w==null||w([...O]),N++,R();return}let v=await this.connection.sendTransaction(L[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:L[N]}),w==null||w([...O]),N++;let z=!1,H=null,ce=null,se=ae=>{H!==null&&clearInterval(H),ce!==null&&this.connection.removeSignatureListener(ce);let ge=O.findIndex(pe=>pe.txId===v);if(ge>-1){if(O[ge].status==="error"||O[ge].status==="success")return;O[ge].status=ae.err?"error":"success"}w==null||w([...O]),ae.err||R()};this.loopMultiTxStatus&&(H=setInterval(async()=>{var ae;if(z){clearInterval(H);return}try{let ge=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});ge&&(z=!0,clearInterval(H),se({err:((ae=ge.meta)==null?void 0:ae.err)||null}),console.log("tx status from getTransaction:",v))}catch(ge){z=!0,clearInterval(H),console.error("getTransaction timeout:",ge,v)}},fr)),ce=this.connection.onSignature(v,ae=>{if(z){this.connection.removeSignatureListener(ce);return}z=!0,se(ae)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:L}}else{let N=[];for(let O=0;O<L.length;O+=1){let R=await this.connection.sendTransaction(L[O],{skipPreflight:K});N.push(R)}return{txIds:N,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};import{PublicKey as Bd}from"@solana/web3.js";import xd from"bn.js";function Sd(s){return typeof s=="object"&&s!==null&&![ze,Re,Bd,Ke,xd,Nt,ut].some(e=>typeof e=="object"&&s instanceof e)}function ft(s){return typeof s=="string"?Ts(s):Array.isArray(s)?s.map(e=>ft(e)):Sd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,ft(t)])):s}import Kd from"bn.js";var Mt=new Kd(1e6);var lt={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://lite-api.jup.ag/tokens/v2/tag?query=verified",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},Zu=q(_({},lt),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var $u="ray_tab_hash",Vs="ray_req_hash",Cd=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem($u);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem($u,s)),s},br=async n=>{var o=n,{logCount:s=1e3,removeLastLog:e}=o,t=Ge(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(Vs)||"[]").slice(0,s-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(q(_({},t),{time:Date.now(),session:Cd()}));try{localStorage.setItem(Vs,JSON.stringify(i))}catch{if(e){let r=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!r;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Vs,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return br(q(_({},t),{logCount:s,removeLastLog:!0}))}};var gr=we("Raydium_Api"),Es=new Map,Ws=new Map;var Pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=Ju.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?Zu.BASE_HOST:lt.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return gr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(gr.error("Request failed"),Promise.reject(r))),this.api.interceptors.response.use(r=>{let{config:a,data:c,status:u}=r,{method:l,baseURL:m,url:d}=a;return n&&br({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),gr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d}  ${u}`),c},r=>{let{config:a,response:c={}}=r,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&br({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),gr.error(`${l.toUpperCase()} ${m}${d} ${u||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||lt.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||lt.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||lt.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Ju.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||lt.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||lt.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||lt.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||lt.JUP_TOKEN_LIST})).map(t=>q(_({},t),{chainId:101,programId:t.tokenProgram,address:t.id,logoURI:t.icon,extensions:{},freeze_authority:null,permanent_delegate:null,mint_authority:t.mintAuthority||null,minted_at:Date.now().toString()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||lt.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:r=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||lt.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${r}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||lt.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>Es.has(r)?(n.push(Es.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||lt.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Es.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:r="desc",page:a=1}=e,[c,u]=[t&&bt(t).toBase58(),n&&n!=="undefined"?bt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||lt.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${r}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||lt.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||lt.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||lt.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=Ws.get(this.cluster))!=null&&t.length)return Ws.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return Ws.set(this.cluster,e.data.data),e.data.data}};var Ar="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ec="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Br,SystemProgram as sp}from"@solana/web3.js";import{AccountLayout as vo,createAssociatedTokenAccountIdempotentInstruction as Zs,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as ap}from"@solana/spl-token";var Ds=(...s)=>s.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),De=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=we(t)}createTxBuilder(e){return this.scope.checkOwner(),new yr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,loopMultiTxStatus:this.scope.loopMultiTxStatus,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(Ds(e))}logInfo(...e){this.logger.info(Ds(e))}logAndCreateError(...e){let t=Ds(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ep,SystemProgram as tp}from"@solana/web3.js";import np from"bn.js";import{createCloseAccountInstruction as op,createInitializeAccountInstruction as ip,createTransferInstruction as rp,TOKEN_PROGRAM_ID as Mo}from"@solana/spl-token";import{Keypair as jd,PublicKey as yc}from"@solana/web3.js";import Zd from"bn.js";import{TOKEN_PROGRAM_ID as $d}from"@solana/spl-token";function Rd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function qs(s,...e){if(!Rd(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${s.length}`)}function Us(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function tc(s,e){qs(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var kr=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),mn=(s,e)=>s<<32-e|s>>>e;var tA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ld(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function Gs(s){return typeof s=="string"&&(s=Ld(s)),qs(s),s}var wr=class{clone(){return this._cloneInto()}},nA={}.toString;function nc(s){let e=n=>s().update(Gs(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Nd(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;s.setUint32(e+c,r,n),s.setUint32(e+u,a,n)}var oc=(s,e,t)=>s&e^~s&t,ic=(s,e,t)=>s&e^s&t^e&t,hr=class extends wr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=kr(this.buffer)}update(e){Us(this);let{view:t,buffer:n,blockLen:o}=this;e=Gs(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let c=kr(e);for(;o<=i-r;r+=o)this.process(c,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Us(this),tc(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let m=r;m<o;m++)t[m]=0;Nd(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=kr(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var Od=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),qn=new Uint32Array(64),Xs=class extends hr{constructor(){super(64,32,8,!1),this.A=Dn[0]|0,this.B=Dn[1]|0,this.C=Dn[2]|0,this.D=Dn[3]|0,this.E=Dn[4]|0,this.F=Dn[5]|0,this.G=Dn[6]|0,this.H=Dn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:c}=this;return[e,t,n,o,i,r,a,c]}set(e,t,n,o,i,r,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)qn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=qn[m-15],p=qn[m-2],f=mn(d,7)^mn(d,18)^d>>>3,y=mn(p,17)^mn(p,19)^p>>>10;qn[m]=y+qn[m-7]+f+qn[m-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=mn(a,6)^mn(a,11)^mn(a,25),p=l+d+oc(a,c,u)+Od[m]+qn[m]|0,y=(mn(n,2)^mn(n,13)^mn(n,22))+ic(n,o,i)|0;l=u,u=c,c=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,r,a,c,u,l)}roundClean(){qn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var rc=nc(()=>new Xs);import{PublicKey as zd}from"@solana/web3.js";import lc,{isBN as mc}from"bn.js";import{bits as Md,BitStructure as mA,blob as vd,Blob as dA,cstr as pA,f32 as fA,f32be as yA,f64 as bA,f64be as gA,greedy as PA,Layout as Fd,ns64 as AA,ns64be as wA,nu64 as _d,nu64be as kA,offset as Vd,s16 as hA,s16be as TA,s24 as IA,s24be as BA,s32 as Ed,s32be as xA,s40 as SA,s40be as KA,s48 as CA,s48be as RA,s8 as LA,seq as Wd,struct as NA,Structure as Dd,u16 as qd,u16be as OA,u24 as MA,u24be as vA,u32 as Ud,u32be as FA,u40 as _A,u40be as VA,u48 as EA,u48be as WA,u8 as Gd,UInt as Xd,union as DA,Union as qA,unionLayoutDiscriminator as UA,utf8 as GA}from"@solana/buffer-layout";var Tr=Fd,sc=Dd;var zs=Xd;var ac=Gd,qt=qd;var si=Ud;var uc=_d;var qe=Ed;var cc=Wd;var xe=vd;var Ys=Md,Hs=Vd;var ao=class extends Tr{constructor(t,n,o){super(t,o);this.blob=xe(t),this.signed=n}decode(t,n=0){let o=new lc(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new lc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Ir=class extends Tr{constructor(t){super(8,t);this._lower=Ys(si(),!1),this._upper=Ys(si(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return _(_({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(s){return new zs(1,s)}function At(s){return new zs(4,s)}function P(s){return new ao(8,!1,s)}function re(s){return new ao(16,!1,s)}function dc(s){return new ao(1,!0,s)}function Oo(s){return new ao(8,!0,s)}function pc(s){return new ao(16,!0,s)}var uo=class extends Tr{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function F(s){return new uo(xe(32),e=>new zd(e),e=>e.toBuffer(),s)}function Ye(s){return new uo(ac(),Yd,Hd,s)}function Yd(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function Hd(s){return s?1:0}function fc(s,e){let t=si("length"),n=V([t,Q(s,Hs(t,-t.span),"values")]);return new uo(n,({values:o})=>o,o=>({values:o}),e)}function Qd(s){let e=si("length"),t=V([e,xe(Hs(e,-e.span),"data")]);return new uo(t,({data:n})=>n,n=>({data:n}),s)}function vt(s){return new uo(Qd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var Qs=class extends sc{decode(e,t){return super.decode(e,t)}};function V(s,e,t){return new Qs(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:mc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=mc(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,r)},set(i,r,a){return r==="count"&&(n=a),Reflect.set(i,r,a)}});return cc(s,o,t)}var co=V([F("mint"),F("owner"),P("amount"),At("delegateOption"),F("delegate"),E("state"),At("isNativeOption"),P("isNative"),P("delegatedAmount"),At("closeAuthorityOption"),F("closeAuthority")]);var mw=we("Raydium_Util");function bc({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=co.decode(r.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ee(s,c,r.owner).publicKey.equals(i),isNative:!1,programId:r.owner}),o.push({pubkey:i,accountInfo:a,programId:r.owner})}return e&&n.push({mint:yc.default,amount:new Zd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function $e({fromPublicKey:s,programId:e=$d,assignSeed:t}){let n=t?btoa(t).slice(0,32):jd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Jd(s,n,e),seed:n}}function Jd(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=rc(n);return new yc(o)}function js(s){let{mint:e,tokenAccount:t,owner:n,programId:o=Mo}=s;return ip(t,e,n,o)}function hn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Mo}=s;return op(e,t,o,n,i)}async function Un(s){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:r}=s,a=await e.getMinimumBalanceForRentExemption(co.span,n),c=ne(t).add(new np(a)),u=$e({fromPublicKey:o,programId:Mo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[tp.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:co.span,programId:Mo}),js({mint:new ep(Pt.address),tokenAccount:u.publicKey,owner:i,programId:Mo})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:r?[]:[X.CloseAccount],endInstructions:r?[]:[hn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function gc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Mo}){return rp(s,e,t,BigInt(String(n)),o,i)}var ai=class extends De{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=i!=null?i:!0,this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ee(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=_(_({},{}),t),[i,r,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Gn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ap},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=bc({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:r.context,value:[...r.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=Gn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),r=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&r.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:r,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Br(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Br(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!i||k.pubkey.equals(d))).sort((k,T)=>k.accountInfo.amount.lt(T.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let k=Zs(r,d,r,n,m),T=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&vo.decode(h.data).mint.equals(n)&&vo.decode(h.data).owner.equals(r)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else T===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(Z)&&o.amount){let h=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});f.instructions.push(...h.instructions||[]),f.endInstructions.push(...h.endInstructions||[]),f.instructionTypes.push(...h.instructionTypes||[]),f.endInstructionTypes.push(...h.endInstructionTypes||[]),o.amount&&(f.instructions.push(gc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Gn})),f.instructionTypes.push(X.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(hn({owner:r,payer:o.payer||r,tokenAccount:d,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:d,instructionParams:f}}else{let k=$e({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(vo.span),h=sp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:k.seed,newAccountPubkey:k.publicKey,lamports:T+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:vo.span,programId:m});return f.instructions.push(h,js({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),c||(f.endInstructions.push(hn({owner:r,payer:o.payer||r,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Gn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,r=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Zs(r,u,r,t,n);a.instructions=[l],a.instructionTypes=[X.CreateATA],i=u}return o&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[hn({owner:r,payer:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:r=Gn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,r);if(new Br(Z).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Zs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,r);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(Gn)&&vo.decode(y.data).mint.equals(i)&&vo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[X.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Gn,amount:i,useSOLBalance:r,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new Br(Z))&&r){let m=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Ge(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=d,f=Ge(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Ce,SystemProgram as Ip}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Oc}from"@solana/spl-token";import{PublicKey as ia}from"@solana/web3.js";var $s=V([E("instruction")]),Js=V([E("instruction")]),up=V([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),re("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),cp=V([P("state"),P("nonce"),F("lpVault"),F("rewardVault"),F(),F(),P(),P(),P("totalReward"),re("perShareReward"),P("lastSlot"),P("perSlotReward")]),lp=V([P("state"),P("nonce"),F("lpVault"),F("rewardVaultA"),P("totalRewardA"),re("perShareRewardA"),P("perSlotRewardA"),E("option"),F("rewardVaultB"),xe(7),P("totalRewardB"),re("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),F()]),mp=V([P(),P("state"),P("nonce"),P("validRewardTokenNum"),re("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(up,5,"rewardInfos"),F("creator"),F(),Q(P(),32,"padding")]),dp=new Proxy(cp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),pp=new Proxy(lp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(s,e,t)}}),xr=new Proxy(mp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(_({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),fp=V([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),ea=V([E("instruction"),P("nonce"),Q(fp,5,"rewardTimeInfo")]),ta=V([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),na=V([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Uw=V([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),oa=V([P("state"),F("id"),F("owner"),P("deposited"),Q(re(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),Gw=V([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),Pc=V([P("state"),F("id"),F("owner"),P("deposited"),Q(re(),2,"rewardDebts"),Q(P(),17)]),Ac=V([P(),P("state"),F("id"),F("owner"),P("deposited"),Q(re(),5,"rewardDebts"),Q(P(),16)]),Ut=V([E("instruction"),P("amount")]),yp=V([F("mint"),F("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),dc("digitShift"),Q(E(),7,"reserved1"),Q(P(),7,"reserved2")]),bp=V([xe(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(E(),32,"reserved1"),Q(yp,4,"votingMints"),Oo("timeOffset"),E("bump"),Q(E(),7,"reserved2"),Q(P(),11,"reserved3")]),gp=V([Oo("startTime"),Oo("endTime"),E("kind"),Q(E(),15,"reserved")]),Pp=V([Q(gp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),E("votingMintConfigIdx"),Q(E(),29,"reserved")]),Ap=V([xe(8),F("voterAuthority"),F("registrar"),Q(Pp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),Q(E(),94,"reserved")]);import{NATIVE_MINT as Jw}from"@solana/spl-token";var ek=we("Raydium_farm_config"),wc=new ia("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),kc=new ia("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var tk=new ia("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var hc={3:oa,5:Pc,6:Ac},ra=s=>[3,4,5,6].indexOf(s)!==-1,sa=s=>{var r;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=s,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(r=i[e])==null?void 0:r.call(i)},Xn={"Standard SPL":0,"Option tokens":1},Zt={[Gu.toString()]:3,[Xu.toString()]:4,[zu.toString()]:5,[ei.toString()]:6,[kn.FARM_PROGRAM_ID_V3.toString()]:3,[kn.FARM_PROGRAM_ID_V4.toString()]:4,[kn.FARM_PROGRAM_ID_V5.toString()]:5,[kn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as Ae,SystemProgram as Bc,SYSVAR_CLOCK_PUBKEY as li,SYSVAR_RENT_PUBKEY as hp,TransactionInstruction as Jt}from"@solana/web3.js";import xc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ok,createAssociatedTokenAccountIdempotentInstruction as Mk,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import wp from"bn.js";var kp=we("Raydium.farm.util");function ui({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],s);return o}function $t({programId:s,poolId:e,owner:t,version:n}){let{publicKey:o}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var Tc=({programId:s,poolId:e})=>fe([e.toBuffer()],s);function Ic(s){return{isSet:new wp(1),rewardPerSecond:ne(s.perSecond),rewardOpenTime:ne(s.openTime),rewardEndTime:ne(s.endTime),rewardType:ne(Xn[s.rewardType])}}function aa(s){return ne(s.endTime).sub(ne(s.openTime)).mul(ne(s.perSecond))}function ci(s){let e=hc[s];return e||kp.logWithError("invalid version",s),e}var Tp=we("Raydium_farm_instruction"),Xk={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function mi(s){let{version:e,id:t,ledger:n,programId:o,owner:i}=s,r={3:9,5:10}[e];r||Tp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc($s.span);$s.encode({instruction:r},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:i,isWritable:!1}),S({pubkey:Bc.programId,isWritable:!1}),S({pubkey:hp,isWritable:!1})];return{instruction:new Jt({programId:o,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Sc(s){var n;let e=Buffer.alloc(ea.span);ea.encode({instruction:0,nonce:new xc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...ks,S({pubkey:s.farmId}),S({pubkey:s.farmAuthority,isWritable:!1}),S({pubkey:s.lpVault}),S({pubkey:s.lpMint,isWritable:!1}),S({pubkey:s.lockVault}),S({pubkey:s.lockMint,isWritable:!1}),S({pubkey:(n=s.lockUserAccount)!=null?n:at}),S({pubkey:s.owner,isWritable:!1,isSigner:!0})];for(let o of s.rewardInfo)t.push(S({pubkey:o.rewardMint,isWritable:!1}),S({pubkey:o.rewardVault}),S({pubkey:o.userRewardToken}));return{instruction:new Jt({programId:s.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function Kc(s){let e=Buffer.alloc(Js.span);Js.encode({instruction:5},e);let t=[S({pubkey:Tn,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.lpVault,isWritable:!1}),S({pubkey:s.rewardVault}),S({pubkey:s.userRewardToken}),S({pubkey:s.owner,isWritable:!1,isSigner:!0})];return{instruction:new Jt({programId:s.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function ua({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(ta.span);ta.encode({instruction:3,rewardReopenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardPerSecond:ne(o.perSecond)},i);let r=[S({pubkey:Tn,isWritable:!1}),S({pubkey:n.id}),S({pubkey:n.lpVault,isWritable:!1}),S({pubkey:e}),S({pubkey:t}),S({pubkey:s,isWritable:!1,isSigner:!0})];return new Jt({programId:n.programId,keys:r,data:i})}function ca({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(na.span);na.encode({instruction:4,isSet:new xc(1),rewardPerSecond:ne(o.perSecond),rewardOpenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardType:ne(Xn[o.rewardType])},i);let r=[...ks,S({pubkey:t.id}),S({pubkey:t.authority,isWritable:!1}),S({pubkey:o.mint,isWritable:!1}),S({pubkey:n}),S({pubkey:e}),S({pubkey:s,isWritable:!1,isSigner:!0})];return new Jt({programId:t.programId,keys:r,data:i})}function di(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new Ae(e.programId),new Ae(e.id)],u=$t({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Ut.span);Ut.encode({instruction:2,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:c}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:u}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new Ae(t.rewardInfos[d].vault)})),m.push(S({pubkey:o[d]}));return new Jt({programId:a,keys:m,data:l})}function pi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=$t({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Ut.span);Ut.encode({instruction:12,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:li,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:o[p]})),d.push(S({pubkey:new Ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Cc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=V([E("instruction"),P("amount")]),m=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:a[0]}),S({pubkey:i,isSigner:!0,isWritable:!1}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:li,isWritable:!1}),S({pubkey:Tn,isWritable:!1}),S({pubkey:o[1]}),S({pubkey:new Ae(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:r},d),new Jt({keys:m,programId:c,data:d})}function fi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=$t({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Ut.span);Ut.encode({instruction:11,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:li,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Rc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=$t({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Ut.span);Ut.encode({instruction:10,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:li,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Lc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=$t({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Ut.span);Ut.encode({instruction:11,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:li,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:o[p]})),d.push(S({pubkey:new Ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Nc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new Ae(e.programId),new Ae(e.id)],u=$t({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Ut.span);Ut.encode({instruction:1,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:Bc.programId,isWritable:!1}),S({pubkey:c}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:u}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new Ae(t.rewardInfos[d].vault)})),m.push(S({pubkey:o[d]}));return new Jt({programId:a,keys:m,data:l})}var yi=class extends De{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(at)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:aa(q(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=ei,txVersion:i,feePayer:r,lockProgram:a}){var x,B;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Ce(e.lpMint.address),lockInfo:{lockMint:(x=a==null?void 0:a.mint)!=null?x:wc,lockVault:(B=a==null?void 0:a.vault)!=null?B:kc},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(r),m=n!=null?n:this.scope.ownerPubKey,d=$e({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(xr.span);l.addInstruction({instructions:[Ip.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:xr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=Tc({programId:new Ce(u.programId),poolId:d.publicKey}),b=ui({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],A=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(Xn[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(Ic(K));let{rewardPubKey:I,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=K.mint.equals(at)?new Ce(Pt.address):K.mint;A.push({rewardMint:L,rewardVault:ui({programId:u.programId,poolId:d.publicKey,mint:L,type:"rewardVault"}),userRewardToken:I})}let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Ce(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=Sc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=Zt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=ft((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,l=n.mint.equals(at)?new Ce(Pt.address):n.mint,m=c.rewardInfos.findIndex(A=>new Ce(A.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:at,f=this.createTxBuilder(i),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[ua({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var m;let r=Zt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=ft((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let u=t||this.scope.ownerPubKey,l=this.createTxBuilder(i);for(let d of n){let p=d.mint.equals(at)?new Ce(Pt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Ce(T.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(m=y.vault)!=null?m:at,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:d,payer:u});A&&l.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ua({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=Zt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=ft((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r),m=o.mint.equals(at)?new Ce(Pt.address):o.mint,d=ui({programId:new Ce(n.programId),poolId:new Ce(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=m,l.addInstruction({instructions:[ca({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=Zt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=ft((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r);for(let m of o){let d=m.mint.equals(at)?new Ce(Pt.address):m.mint,p=ui({programId:new Ce(n.programId),poolId:new Ce(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:m,payer:u});y&&l.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=ca({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:m}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:d,programId:p}=n,f=Zt[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),ra(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Ce(n.programId),new Ce(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],A=$t({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(i);k.addCustomComputeBudget(l),k.addTipInstruction(m);let T={};for(let O of this.scope.account.tokenAccounts)if(a){let R=ee(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&R.equals(O.publicKey)&&(T[O.mint.toString()]=O.publicKey)}else T[O.mint.toString()]=O.publicKey;let h=g.lpMint,w=T[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",T);let x=[];for(let O of d){let R=r&&O.mint.address===Z.toString(),v=T[O.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Ce(O.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});v=z,H&&k.addInstruction(H)}T[O.mint.address]=v,x.push(v)}let B,K=await this.scope.connection.getAccountInfo(A);if(K&&(B=ci(f).decode(K.data)),n.programId!==ei.toString()&&n.programId!==kn.FARM_PROGRAM_ID_V6.toString()&&!B){let{instruction:O,instructionType:R}=mi({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[O],instructionTypes:[R]})}let I=sa({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});I&&this.logAndCreateError(I);let C={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Ce(O))},L=f===6?Nc(C):f===5?Lc(C):Rc(C),N={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[L],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:r,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m,txTipConfig:d}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=Zt[n.programId];ra(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(m),b.addTipInstruction(d);let g={};for(let I of this.scope.account.tokenAccounts)if(c){let C=ee(this.scope.ownerPubKey,I.mint).publicKey;I.publicKey&&C.equals(I.publicKey)&&(g[I.mint.toString()]=I.publicKey)}else g[I.mint.toString()]=I.publicKey;if(f!==4){let I=$t({programId:new Ce(n.programId),poolId:new Ce(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)ci(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:N}=mi({id:new Ce(y.id),programId:new Ce(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[N]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=r&&A===Z.toString(),T=g[A.toString()];if(!T){let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Ce(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[A.toString()]=T;let h=[];for(let I of p){let C=r&&I.mint.address===Z.toString(),L=g[I.mint.address];if(!L){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Ce(I.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});L=N,O&&b.addInstruction(O)}g[I.mint.address]=L,h.push(L)}let w=sa({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let x={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Ce(I))},B=f===6?di(x):f===5?pi(x):f===4?Cc(x):fi(x),K={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[B],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:i,feePayer:r}){var y;this.scope.checkOwner();let a=ft((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=Zt[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>bt(b.mint.address).equals(bt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:at,m=this.createTxBuilder(r),d;if(t.equals(at)||t.equals(Ce.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:aa(q(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new M(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=b.addresses.newAccount,m.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?d=b:(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Oc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=Kc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(o),m.addTipInstruction(i),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(o),m={};for(let f of this.scope.account.tokenAccounts)if(i){let y=ee(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>q(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=Zt[y],T=b.address,h=n&&T===Z.toString(),w=m[T];if(!w){let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Ce(T),notUseTokenAccount:h,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:i,checkCreateATAOwner:r});w=L,N&&l.addInstruction(N)}m[T.toString()]=w;let x=[];for(let L of g){let N=n&&L.mint.address===Z.toString(),O=m[L.mint.address];if(!O)if(N){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Ce(L.mint.address),notUseTokenAccount:N,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:i,checkCreateATAOwner:r});O=R,v&&l.addInstruction(v)}else{let R=new Ce(L.mint.address);O=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Oc(this.scope.ownerPubKey,O,this.scope.ownerPubKey,R)]})}m[L.mint.address]=O,x.push(O)}let B=p[A],K={amount:Ot,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:B,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Ce(L))},I=k===6?di(K):k===5?pi(K):fi(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as ff,NATIVE_MINT as qr,TOKEN_PROGRAM_ID as Hn}from"@solana/spl-token";import{Keypair as Nr,PublicKey as Y,SystemProgram as Sn,TransactionInstruction as yt}from"@solana/web3.js";import wa from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ti,TOKEN_2022_PROGRAM_ID as je,TOKEN_PROGRAM_ID as Oe}from"@solana/spl-token";import Mp from"bn.js";import en from"bn.js";var He=new en(0),Gt=new en(1),In=new en(-1),rt=new en(1).shln(64),Sr=new en(1).shln(128),bi=rt.sub(Gt),gi=64,Mc=Sr.subn(1),wt=-443636,Tt=-wt,It=new en("4295048016"),Bt=new en("79226673521066979257578248091"),Kr=new en("4295048017"),Cr=new en("79226673521066979257578248090"),vc=16,Fc="59543866431248",_c="184467440737095516",Vc="15793534762490258745",Rr=new en(10).pow(new en(6));var Ec={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},hh=new en("18446744073700000000");import Pe from"bn.js";function Lr(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function la(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function ma(s,e){let t=0;for(let n=0;n<s&&!e.testn(n);n++)t++;return t}function Pi(s,e){for(let t=0;t<s;t++)if(e.testn(t))return!1;return!0}function Wc(s,e){return Pi(s,e)?null:la(s,e)}function Dc(s,e){return Pi(s,e)?null:ma(s,e)}var Sh=Buffer.from("amm_config","utf8"),da=Buffer.from("pool","utf8"),pa=Buffer.from("pool_vault","utf8"),xp=Buffer.from("pool_reward_vault","utf8"),qc=Buffer.from("position","utf8"),Sp=Buffer.from("tick_array","utf8"),Kp=Buffer.from("operation","utf8"),Cp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Rp=Buffer.from("observation","utf8");function Uc(s,e,t,n){return fe([da,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function fa(s,e,t){return fe([pa,e.toBuffer(),t.toBuffer()],s)}function Gc(s,e,t){return fe([xp,e.toBuffer(),t.toBuffer()],s)}function he(s,e,t){return fe([Sp,e.toBuffer(),Lr(t)],s)}function dn(s,e,t,n){return fe([qc,e.toBuffer(),Lr(t),Lr(n)],s)}function xt(s,e){return fe([qc,e.toBuffer()],s)}function Bn(s){return fe([Buffer.from("metadata","utf8"),un.toBuffer(),s.toBuffer()],un)}function Ai(s){return fe([Kp],s)}function Je(s,e){return fe([Cp,e.toBuffer()],s)}function Xc(s,e){return fe([Rp,e.toBuffer()],s)}var zc=Buffer.from("locked_position","utf8");function ya(s,e){return fe([zc,e.toBuffer()],s)}function Fo(s,e){return fe([zc,e.toBuffer()],s)}var Lp=Buffer.from("support_mint","utf8");function ba(s,e){return fe([Lp,e.toBuffer()],s)}import{PublicKey as Xt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Yc}from"@solana/spl-token";import Ue from"bn.js";import gn from"bn.js";var wi=class{static getfeeGrowthInside(e,t,n){let o=new gn(0),i=new gn(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let r=new gn(0),a=new gn(0);e.tickCurrent<n.tick?(r=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ye.wrappingSubU128(ye.wrappingSubU128(e.feeGrowthGlobalX64A,o),r),u=ye.wrappingSubU128(ye.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,o),a=ye.mulDivFloor(ye.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,rt),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,rt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,o),a=ye.mulDivFloor(ye.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,rt),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,rt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],r=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ye.wrappingSubU128(c,u.growthInsideLastX64),m=ye.mulDivFloor(l,t.liquidity,rt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],r=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ye.wrappingSubU128(c,u.growthInsideLastX64),m=ye.mulDivFloor(l,t.liquidity,rt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let r=0;r<o.length;r++){let a=new gn(0);t.liquidityGross.eqn(0)?a=o[r].rewardGrowthGlobalX64:e<t.tick?a=o[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new gn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ye.wrappingSubU128(ye.wrappingSubU128(o[r].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let r=0;r<o.length;r++){let a=new gn(0);t.liquidityGross.eqn(0)?a=o[r].rewardGrowthGlobalX64:e<t.tick?a=o[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new gn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ye.wrappingSubU128(ye.wrappingSubU128(o[r].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:r}){var b,g,A,k;let a=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=le.getSqrtPriceX64FromTick(t.tickLower),u=le.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=Ie.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Le(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,r,!0),Le(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,r,!0)],[f,y]=[Le(new gn(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,r,!0),Le(new gn(new M(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:ln(d.expirationTime,p.expirationTime)}}};var Np=15,Te=class{static async getTickArrays(e,t,n,o,i,r,a){let c=[],u=$.getTickArrayStartIndexByTick(o,i),l=$.getInitializedTickArrayInRange(r,a,i,u,Math.floor(Np/2));for(let p=0;p<l.length;p++){let{publicKey:f}=he(t,n,l[p]);c.push(f)}let m=(await rn(e,c)).map(p=>p!==null?ki.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,r){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,r);for(;a==null||a.liquidityGross.lten(0);){if(u=$.getNextTickArrayStartIndex(u,i,r),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,r);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let r=Math.floor(e/Te.tickCount(t)),a=n?$.searchLowBitFromStart(o,i,r-1,1,t):$.searchHightBitFromStart(o,i,r+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=st-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<st;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=he(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:r,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,r){let a=$.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(r)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<st;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if($.checkIsOutOfBoundary(e)){if(e>Tt)return!1;let n=$.getTickArrayStartIndexByTick(wt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return st*e}};var ga=14,xn=class{static maxTickInTickarrayBitmap(e){return e*st*lo}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!Te.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),r=o?t-Te.tickCount(n):t+Te.tickCount(n);if(r<-i||r>=i)return{isInit:!1,tickIndex:t};let a=n*st,c=r/a+512;r<0&&r%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=Wc(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=Dc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-Te.tickCount(n)}}}},hi=class{static getBitmapOffset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=xn.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=xn.maxTickInTickarrayBitmap(e),n=-t;if(Tt<=t)throw Error(`extensionTickBoundary check error: ${Tt}, ${t}`);if(n<=wt)throw Error(`extensionTickBoundary check error: ${n}, ${wt}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:$.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=Te.tickCount(t),r=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(r,t,o);return this.nextInitializedTickArrayInBitmap(a,r,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:r}=xn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=$.mergeTickArrayBitmap(e).shln(lo-1-a),u=Pi(512,c)?null:la(512,c);if(u!==null){let l=t-u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=Pi(512,c)?null:ma(512,c);if(u!==null){let l=t+u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r-Te.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%xn.maxTickInTickarrayBitmap(t),o=Math.floor(n/Te.tickCount(t));return e<0&&n!=0&&(o=lo-o),o}};var Ne=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:f,sqrtPriceX64:y,feeAmount:b}=mo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,r);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(In),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let r=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,r);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let y=this.preInitializedTickArrayStartIndex(e,r);if(y.isExist){let{publicKey:b}=he(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=mo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,r,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(In),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ne.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?hi.checkTickArrayIsInit(Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):$.checkTickArrayIsInitialized($.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:r}=this.nextInitializedTickArrayStartIndex(e,Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=he(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/Te.tickCount(e.tickSpacing)),o=t?$.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):$.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=xn.nextInitializedTickArrayStartIndex($.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:r,tickIndex:a}=hi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<wt||t>Tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let r=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=q(_({},m),{perSecond:ye.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Xt(d)});if(p.tokenMint.equals(Xt.default))continue;if(n<=p.openTime.toNumber()||o.eq(He)){r.push(p);continue}let f=new Ue(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=ye.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),A=ye.mulDivFloor(y,p.emissionsPerSecondX64,rt),k=p.rewardTotalEmissioned.add(A);r.push(q(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return r}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let r=$.getTickArrayStartIndexByTick(i,e);if(r>=n||r<o)return!0}return!1}static tickRange(e){let t=xn.maxTickInTickarrayBitmap(e),n=-t;return t>Tt&&(t=Te.getArrayStartIndex(Tt,e)+Te.tickCount(e)),n<wt&&(n=Te.getArrayStartIndex(wt,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Te.tickCount(t)*lo}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Ve(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=Qc.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=$.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=$.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let r=await Ve(e,i,{batchRequest:n}),a={};for(let c of r){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ki.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let r=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(r.find(l=>l.equals(u.state.programId))||r.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of r)u.push(xt(p,d).publicKey);let l=await rn(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=_o.decode(d.data),f=p.poolId.toString(),y=e.find(B=>B.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=$._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=$._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:T}=Ie.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:k,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>q(_({},B),{pendingReward:new Ue(0)})),leverage:h,tokenFeeAmountA:new Ue(0),tokenFeeAmountB:new Ue(0)}];let w=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),x=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(i){let d=Object.values(m),p=await rn(t,d,{batchRequest:o}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=ki.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,k=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[k].toString()],w=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],x=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:K}=await wi.GetPositionFees(y,g,w,x),I=await wi.GetPositionRewards(y,g,w,x);g.tokenFeeAmountA=B.gte(new Ue(0))?B:new Ue(0),g.tokenFeeAmountB=K.gte(new Ue(0))?K:new Ue(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ue(0))?I[C]:new Ue(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:r,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var L;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?It.add(new Ue(1)):Bt.sub(new Ue(1)):u=le.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Le(i,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=Ne.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((L=p.fee)!=null?L:He),u,c),k=Le(y,d,o,!1),T=le.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new M(1).div(T),w=y.mul(new Ue(Math.floor((1-r)*1e10))).div(new Ue(1e10)),x=Le(w,d,o,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(h).sub(B).abs(),I=B,C=new ut(new M(K).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:x,expirationTime:ln(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:r,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ze(q(_({},u),{mint:u.address,isToken2022:u.programId===Yc.toBase58()})),new ze(q(_({},l),{mint:l.address,isToken2022:l.programId===Yc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:k,priceImpact:T,fee:h,remainingAccounts:w,executionPriceX64:x}=Ne.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Xt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),B=q(_({},f),{amount:new Re(m,f.amount),fee:f.fee===void 0?void 0:new Re(m,f.fee)}),K=q(_({},y),{amount:new Re(d,y.amount),fee:y.fee===void 0?void 0:new Re(d,y.fee)}),I=q(_({},b),{amount:new Re(d,b.amount),fee:b.fee===void 0?void 0:new Re(d,b.fee)}),C=new Nt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new Nt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:k.mul(new M(10**(20+d.decimals))).toFixed(0)}),N=new Re(m,h);return{allTrade:p,realAmountIn:B,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:L,priceImpact:T,fee:N,remainingAccounts:w,executionPriceX64:x}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:r,priceLimit:a=new M(0)}){var I;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Bt.sub(new Ue(1)):It.add(new Ue(1)):l=le.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Le(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=Ne.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:He),l),b=c?e.mintB.address:e.mintA.address,g=Le(d,u[b],o,!1),A=le.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?A:new M(1).div(A),T=d.mul(new Ue(Math.floor((1+r)*1e10))).div(new Ue(1e10)),h=Le(T,u[b],o,!0),w=c?e.currentPrice:new M(1).div(e.currentPrice),x=new M(k).sub(w).abs(),B=w,K=new ut(new M(x).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:ln(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=$.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=$.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(r,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-r,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((f=i.rewardApr[0])!=null?f:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[bt(e.mintA.address).toString()],d=o[bt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=le.getSqrtPriceX64FromTick(r),g=le.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),w=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(k.toString()).div(new M(10).pow(f)).mul(d.value)),x=new M(T.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(h.toString()).div(new M(10).pow(f)).mul(d.value)),B=new M(1).div(w.add(x)),I=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),C=3600*24*365,L=e.rewardDefaultInfos.map(N=>{var v,z;let O=N.mint.decimals,R=o[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((z=N.endTime)!=null?z:0)||!N.perSecond||!R||O===void 0?0:new M(R.value).mul(new M(N.perSecond).mul(C)).div(new M(10).pow(O)).mul(B).mul(100).toNumber()});return{feeApr:I,rewardsApr:L,apr:I+L.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=le.getSqrtPriceX64FromTick(n),d=le.getSqrtPriceX64FromTick(o),p=Le(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ue(new M(p.amount.sub((A=p.fee)!=null?A:He).toString()).toFixed(0)),y;if(l.lte(m))y=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ue(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?k:T}else y=t?new Ue(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let b=await Ne.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,g,A,k;let c=le.getSqrtPriceX64FromTick(n),u=le.getSqrtPriceX64FromTick(o),l=a?1+r:1-r,m=Ie.getAmountsFromLiquidity(le.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Le(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Le(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Le(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),Le(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:ln(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Xt(c.id));(await rn(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=po.decode(c.data))});let r=t.map(c=>Je(new Xt(c.programId),new Xt(c.id)).publicKey),a=await Ne.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(_({},c),{[u.id]:q(_({},n[u.id]),{id:new Xt(u.id),version:6,programId:new Xt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(_({},u.config),{id:new Xt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:Je(new Xt(u.programId),new Xt(u.id)).publicKey,exBitmapInfo:a[Je(new Xt(u.programId),new Xt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Pa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Hc(s){return q(_({},s),{type:"Concentrated",programId:s.programId.toString(),id:s.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:s.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:s.ammConfig.tradeFeeRate,openTime:s.startTime.toString(),tvl:0,day:Pa,week:Pa,month:Pa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(_({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ye=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(He)||(i=i.add(Gt)),i}static mulDivFloor(e,t,n){if(n.eq(He))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(He))throw new Error("division by 0");return e.mul(t).add(n.sub(Gt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new Pe(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Sr).sub(t).mod(Sr)}};function mt(s,e){return Aa(s.mul(e),64,256)}function Op(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Aa(s,e,t){let n=s.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var le=class{static sqrtPriceX64ToPrice(e,t,n){return ye.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ye.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(He))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(He))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(He))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(He))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(He))return e;let i=t.shln(gi);if(o){let r=i,a=i.add(n.mul(e));return a.gte(r)?ye.mulDivCeil(r,e,a):ye.mulDivRoundingUp(r,Gt,r.div(e).add(n))}else{let r=n.mul(e);if(!i.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(r);return ye.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(gi);if(o)return e.add(i.div(t));{let r=ye.mulDivRoundingUp(i,Gt,t);if(!e.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(r)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<wt||e>Tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new Pe("18445821805675395072"):new Pe("18446744073709551616");return(t&2)!=0&&(n=mt(n,new Pe("18444899583751176192"))),(t&4)!=0&&(n=mt(n,new Pe("18443055278223355904"))),(t&8)!=0&&(n=mt(n,new Pe("18439367220385607680"))),(t&16)!=0&&(n=mt(n,new Pe("18431993317065453568"))),(t&32)!=0&&(n=mt(n,new Pe("18417254355718170624"))),(t&64)!=0&&(n=mt(n,new Pe("18387811781193609216"))),(t&128)!=0&&(n=mt(n,new Pe("18329067761203558400"))),(t&256)!=0&&(n=mt(n,new Pe("18212142134806163456"))),(t&512)!=0&&(n=mt(n,new Pe("17980523815641700352"))),(t&1024)!=0&&(n=mt(n,new Pe("17526086738831433728"))),(t&2048)!=0&&(n=mt(n,new Pe("16651378430235570176"))),(t&4096)!=0&&(n=mt(n,new Pe("15030750278694412288"))),(t&8192)!=0&&(n=mt(n,new Pe("12247334978884435968"))),(t&16384)!=0&&(n=mt(n,new Pe("8131365268886854656"))),(t&32768)!=0&&(n=mt(n,new Pe("3584323654725218816"))),(t&65536)!=0&&(n=mt(n,new Pe("696457651848324352"))),(t&131072)!=0&&(n=mt(n,new Pe("26294789957507116"))),(t&262144)!=0&&(n=mt(n,new Pe("37481735321082"))),e>0&&(n=Mc.div(n)),n}static getTickFromPrice(e,t,n){return le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Bt)||e.lt(It))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Pe(t-64),o=Op(n,32,128),i=new Pe("8000000000000000","hex"),r=0,a=new Pe(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new Pe(0))&&r<vc;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(i.mul(f)),i=i.shrn(1),r+=1}let u=a.shrn(32),m=o.add(u).mul(new Pe(Fc)),d=Aa(m.sub(new Pe(_c)),64,128).toNumber(),p=Aa(m.add(new Pe(Vc)),64,128).toNumber();return d==p?d:le.getSqrtPriceX64FromTick(p).lte(e)?p:d}},fo=class{static getTickWithPriceAndTickspacing(e,t,n,o){let r=le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,n,o))/t;return r<0?r=Math.floor(r):r=Math.ceil(r),r*t}static roundPriceWithTickspacing(e,t,n,o){let i=fo.getTickWithPriceAndTickspacing(e,t,n,o),r=le.getSqrtPriceX64FromTick(i);return le.sqrtPriceX64ToPrice(r,n,o)}},Ie=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(He))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(gi),r=t.sub(e);return o?ye.mulDivRoundingUp(ye.mulDivCeil(i,r,t),Gt,e):ye.mulDivFloor(i,r,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(He))throw new Error("sqrtPriceX64A must greater than 0");return o?ye.mulDivCeil(n,t.sub(e),rt):ye.mulDivFloor(n,t.sub(e),rt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),r=t.sub(e),a=i.div(r);return o?ye.mulDivRoundingUp(a,Gt,bi):a.shrn(gi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ye.mulDivFloor(n,bi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Ie.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let r=Ie.getLiquidityFromTokenAmountA(e,n,o,!1),a=Ie.getLiquidityFromTokenAmountB(t,e,i);return r.lt(a)?r:a}else return Ie.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Ie.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new Pe(0)};if(e.lt(n)){let r=Ie.getTokenAmountAFromLiquidity(e,n,o,i),a=Ie.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:r,amountB:a}}else return{amountA:new Pe(0),amountB:Ie.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=Ie.getAmountsFromLiquidity(e,t,n,o,r),l=i?1+a:1-a,m=new Pe(new M(c.toString()).mul(l).toFixed(0)),d=new Pe(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:r,epochInfo:a,amountAddFee:c}){var A,k,T,h;let u=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=le.getSqrtPriceX64FromTick(t),m=le.getSqrtPriceX64FromTick(n),d=r?1+i:1-i,p=Ie.getAmountsFromLiquidity(u,l,m,o,r),[f,y]=[Le(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),Le(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[b,g]=[Le(new Pe(new M(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Le(new Pe(new M(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:o,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:ln(f.expirationTime,y.expirationTime)}}},mo=class{static swapCompute(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y=!1){if(d.eq(He))throw new Error("amountSpecified must not be 0");if(f||(f=r?It.add(Gt):Bt.sub(Gt)),r){if(f.lt(It))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(Bt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(He),g={amountSpecifiedRemaining:d,amountCalculated:He,sqrtPriceX64:m,tick:u>p?Math.min(p+Te.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new Pe(0)},A=p,k=n[p],T=0,h=!r&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(He)&&!g.sqrtPriceX64.eq(f);){T>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let x=$.nextInitTick(k,g.tick,l,r,h),B=x||null,K=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let C=Ne.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},A,r);if(!C.isExist){if(y)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=C.nextStartIndex;let{publicKey:L}=he(e,t,A);K=L,k=n[A];try{B=$.firstInitializedTick(k,r)}catch{throw Error("not found next tick info")}}w.tickNext=B.tick,w.initialized=B.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),w.tickNext<wt?w.tickNext=wt:w.tickNext>Tt&&(w.tickNext=Tt),w.sqrtPriceNextX64=le.getSqrtPriceX64FromTick(w.tickNext);let I;if(r&&w.sqrtPriceNextX64.lt(f)||!r&&w.sqrtPriceNextX64.gt(f)?I=f:I=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=mo.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(w.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(w.amountIn.add(w.feeAmount)),g.amountCalculated=g.amountCalculated.sub(w.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(w.amountOut),g.amountCalculated=g.amountCalculated.add(w.amountIn.add(w.feeAmount))),g.sqrtPriceX64.eq(w.sqrtPriceNextX64)){if(w.initialized){let C=B.liquidityNet;r&&(C=C.mul(In)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=w.tickNext!=g.tick&&!r&&k.startTickIndex===w.tickNext,g.tick=r?w.tickNext-1:w.tickNext}else if(g.sqrtPriceX64!=w.sqrtPriceStartX64){let C=le.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&k.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:w,isExist:x}=Te.nextInitializedTickArray(g.tick,l,r,o,i);x&&p!==w&&(g.accounts.push(he(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:He,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i,r){let a={sqrtPriceX64Next:new Pe(0),amountIn:new Pe(0),amountOut:new Pe(0),feeAmount:new Pe(0)},c=o.gte(He);if(c){let l=ye.mulDivFloor(o,Rr.sub(new Pe(i.toString())),Rr);a.amountIn=r?Ie.getTokenAmountAFromLiquidity(t,e,n,!0):Ie.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=le.getNextSqrtPriceX64FromInput(e,n,l,r)}else a.amountOut=r?Ie.getTokenAmountBFromLiquidity(t,e,n,!1):Ie.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(In).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=le.getNextSqrtPriceX64FromOutput(e,n,o.mul(In),r);let u=t.eq(a.sqrtPriceX64Next);return r?(u&&c||(a.amountIn=Ie.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=Ie.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:Ie.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:Ie.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(In))&&(a.amountOut=o.mul(In)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=ye.mulDivCeil(a.amountIn,new Pe(i),Rr.sub(new Pe(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var st=60,lo=512,$=class{static getTickArrayAddressByTick(e,t,n,o){let i=$.getTickArrayStartIndexByTick(n,o),{publicKey:r}=he(e,t,i);return r}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=$.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=st)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Te.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Te.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*st,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*st,i=Math.floor(t/o)+512,r=Math.abs(i);return{isInitialized:e.testn(r),startIndex:(r-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*st:e+t*st}static mergeTickArrayBitmap(e){let t=new Mp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let r=Math.floor(o/(n*st));return[...$.searchLowBitFromStart(e,t,r-1,i,n),...$.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,lo,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=$.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=he(e,t,c);r.push({tickArrayStartIndex:c,tickArrayAddress:u})}return r}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>$.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=Te.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>$.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=Te.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<wt||e>Tt}static nextInitTick(e,t,n,o,i){if(Te.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<st;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=st-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<st;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=le.getSqrtPriceX64FromTick(t),i=le.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),i=fo.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=le.getSqrtPriceX64FromTick(i),a=le.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=le.getSqrtPriceX64FromTick(t),i=le.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),i=fo.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=le.getSqrtPriceX64FromTick(i),a=le.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new M(1).div(a)}}};var jc=V([xe(8),E("bump"),qt("index"),F(""),At("protocolFeeRate"),At("tradeFeeRate"),qt("tickSpacing"),Q(P(),8,"")]),vp=V([At("blockTimestamp"),Oo("tickCumulative"),Q(P(),4)]),Zc=V([xe(8),Ye("initialized"),P("recentEpoch"),qt("observationIndex"),F("poolId"),Q(vp,100,"observations"),Q(P(),4)]),Fp=V([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),re("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),re("rewardGrowthGlobalX64")]),po=V([xe(8),E("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),qt("tickSpacing"),re("liquidity"),re("sqrtPriceX64"),qe("tickCurrent"),At(),re("feeGrowthGlobalX64A"),re("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),re("swapInAmountTokenA"),re("swapOutAmountTokenB"),re("swapInAmountTokenB"),re("swapOutAmountTokenA"),E("status"),Q(E(),7,""),Q(Fp,3,"rewardInfos"),Q(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Q(P(),15*4-3,"padding")]),_p=V([re("growthInsideLastX64"),P("rewardAmountOwed")]),_o=V([xe(8),E("bump"),F("nftMint"),F("poolId"),qe("tickLower"),qe("tickUpper"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(_p,3,"rewardInfos"),Q(P(),8,"")]),FT=V([xe(8),E("bump"),F("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(re(),3,"rewardGrowthInside"),Q(P(),8,"")]),Vp=V([qe("tick"),pc("liquidityNet"),re("liquidityGross"),re("feeGrowthOutsideX64A"),re("feeGrowthOutsideX64B"),Q(re(),3,"rewardGrowthsOutsideX64"),Q(At(),13,"")]),ki=V([xe(8),F("poolId"),qe("startTickIndex"),Q(Vp,st,"ticks"),E("initializedTickCount"),Q(E(),115,"")]),$c=V([xe(329),Q(F(),100,"whitelistMints")]),Qc=V([xe(8),F("poolId"),Q(Q(P(),8),ga,"positiveTickArrayBitmap"),Q(Q(P(),8),ga,"negativeTickArrayBitmap")]),_T=V([P(),E("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(P(),8)]),Jc=V([xe(8),E("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),P("recentEpoch"),Q(P(),8)]);Zc.span;var el=we("Raydium_Clmm"),zt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},tl=[188,37,179,131,82,150,84,73],nl=[16,72,250,198,14,162,212,19],Be=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=V([re("sqrtPriceX64"),P("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:He},g);let A=Buffer.from([...zt.createPool,...g]);return new yt({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new Y(o.address),new Y(i.address)],{publicKey:m}=Uc(t,r,u,l),{publicKey:d}=Xc(t,m),{publicKey:p}=fa(t,m,u),{publicKey:f}=fa(t,m,l),y=Je(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,r,d,u,p,new Y(o.programId||Oe),l,f,new Y(i.programId||Oe),y,a,c)];return{signers:[],instructions:b,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:y,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I){let C=V([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),L=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Ti,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:x,amountMaxB:B,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let R=Buffer.from([...zt.openPosition,...O]);return new yt({keys:N,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K){let I=V([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Ti,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:w,amountMaxB:x,withMetadata:B==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...zt.openPositionWithTokenEx,...N]);return new yt({keys:L,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new Y(e.programId),new Y(e.id)],y;if(l)y=new Y((await l(1))[0]);else{let K=Nr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:w}=xt(p,y),{publicKey:x}=dn(p,f,o,i),B=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0);return{signers:d,instructions:[B],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new Y(e.programId),new Y(e.id)],y;if(l)y=new Y((await l(1))[0]);else{let K=Nr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:w}=xt(p,y),{publicKey:x}=dn(p,f,o,i),B=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,u,r,a,c,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,u,r,a,c,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[B],signers:d,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I){let C=V([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),L=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Ti,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new wa(0),amountMaxA:x==="MintA"?B:K,amountMaxB:x==="MintA"?K:B,withMetadata:w==="create",baseFlag:x==="MintA",optionBaseFlag:1},O);let R=Buffer.from([...zt.openPosition,...O]);return new yt({keys:N,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K){let I=V([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Ti,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new wa(0),amountMaxA:w==="MintA"?x:B,amountMaxB:w==="MintA"?B:x,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...zt.openPositionWithTokenEx,...N]);return new yt({keys:L,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new Y((await l(1))[0]);else{let K=Nr.generate();p.push(K),d=K.publicKey}let[f,y]=[new Y(e.programId),new Y(e.id)],b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(f,y,b),{publicKey:k}=he(f,y,g),{publicKey:T}=m?ee(n.wallet,d,je):ee(n.wallet,d,Oe),{publicKey:h}=Bn(d),{publicKey:w}=xt(f,d),{publicKey:x}=dn(f,y,o,i),B=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(t.mintA.address),new Y(t.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(t.mintA.address),new Y(t.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[B],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=V([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:r?je:Oe,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...zt.closePosition,...u]);return new yt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new Y(e.programId),a=i?ee(n.wallet,o.nftMint,je).publicKey:ee(n.wallet,o.nftMint,Oe).publicKey,{publicKey:c}=xt(r,o.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,c,i)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A){let k=V([re("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ye("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let x=Buffer.from([...zt.increaseLiquidity,...w]);return new yt({keys:h,programId:e,data:x})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,l]=[new Y(e.programId),new Y(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=xt(u,n.nftMint),{publicKey:g}=dn(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Je(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:c}){let[u,l]=[new Y(e.programId),new Y(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=xt(u,n.nftMint),{publicKey:g}=dn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Je(u,l).publicKey:void 0)],signers:[],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A){let k=V([re("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ye("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:new wa(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},w);let x=Buffer.from([...zt.increaseLiquidity,...w]);return new yt({keys:h,programId:e,data:x})}static decreaseLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([re("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],w=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],x=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:A},x);let B=Buffer.from([...zt.decreaseLiquidity,...x]);return new yt({keys:w,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],d=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=he(l,m,d),{publicKey:y}=he(l,m,p),{publicKey:b}=u?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,c),{publicKey:g}=xt(l,n.nftMint),{publicKey:A}=dn(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new Y(t.rewardInfos[w].vault),ownerRewardVault:o.rewardAccounts[w],rewardMint:new Y(e.rewardDefaultInfos[w].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,A,f,y,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),k,i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Je(l,m).publicKey:void 0);return T.push(h),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:T,instructionTypes:[X.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g){let A=V([P("amount"),P("otherAmountThreshold"),re("sqrtPriceLimitX64"),Ye("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(x=>({pubkey:x,isSigner:!1,isWritable:!0}))],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let w=Buffer.from([...zt.swap,...h]);return new yt({keys:T,programId:e,data:w})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],[d,p]=[new Y(t.vault.A),new Y(t.vault.B)],[f,y]=[new Y(e.mintA.address),new Y(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new Y(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,r,a,c,!0,Je(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],[d,p]=[new Y(t.vault.A),new Y(t.vault.B)],[f,y]=[new Y(e.mintA.address),new Y(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new Y(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,r,a,c,!1,Je(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=V([P("openTime"),P("endTime"),re("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:ne(l),endTime:ne(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...zt.initReward,...y]);return new yt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a=Gc(i,r,o.mint).publicKey,c=Ai(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,r,c,new Y(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=V([E("rewardIndex"),re("emissionsPerSecondX64"),P("openTime"),P("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:ne(l),endTime:ne(m)},y);let b=Buffer.from([...zt.setRewardEmissions,...y]);return new yt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new Y(t.rewardInfos[d].vault),u=new Y(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&el.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Ai(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,r,l,new Y(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,r,a){let c=V([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...zt.collectReward,...l]);return new yt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new Y(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&el.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,r,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[X.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new Y((await c(1))[0]);else{let g=Nr.generate();u.push(g),l=g.publicKey}let m=a?ee(i,r,je).publicKey:ee(i,r,Oe).publicKey,{publicKey:d}=xt(n,r),p=Fo(e,l).publicKey,f=ee(i,l,Oe).publicKey,y=Bn(l).publicKey,b=Be.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:ee(t,r,a?je:Oe).publicKey,positionNftProgram:a?je:Oe});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[X.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:Ti,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1}],g=V([Ye("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...tl,...A]);return new yt({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ee(o,i,Oe),{publicKey:a}=xt(n,i),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:ya(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1}];return new yt({keys:c,programId:e,data:Buffer.from(tl)})}static harvestLockPositionInstruction(e){let[t,n]=[new Y(e.poolKeys.programId),new Y(e.poolKeys.id)],o=$.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=$.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=he(t,n,o),{publicKey:a}=he(t,n,i),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Oe),{publicKey:u}=xt(t,e.ownerPosition.nftMint),{publicKey:l}=dn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new Y(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new Y(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:ya(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new Y(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new Y(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1},{pubkey:new Y(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new Y(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new yt({keys:p,programId:e.programId,data:Buffer.from(nl)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:T,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],x=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new yt({keys:x,programId:e,data:Buffer.from(nl)})}};var Ep=V([At("mintAuthorityOption"),F("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),At("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as iI}from"@solana/web3.js";import{MintLayout as sI,TOKEN_PROGRAM_ID as uI}from"@solana/spl-token";var Or=s=>new ze({mint:s.address,decimals:s.decimals,symbol:s.symbol,name:s.name}),Ii=o=>{var i=o,{amount:s,isRaw:e,name:t}=i,n=Ge(i,["amount","isRaw","name"]);return new Re(new ze({mint:bt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var kt=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Ge(i,["address","programId","decimals"]);return _({chainId:101,address:bt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(_({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(_({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(_({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import ol from"bn.js";var ka=new ol(25),Mr=new ol(1e4);import{PublicKey as nt,SystemProgram as Dp,SYSVAR_RENT_PUBKEY as SI,TransactionInstruction as Yn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as qp,TOKEN_PROGRAM_ID as yo}from"@solana/spl-token";import vr from"bn.js";var ha=V([E("instruction"),P("amountIn"),P("minAmountOut")]),Ta=V([E("instruction"),P("maxAmountIn"),P("amountOut")]),TI=V([E("instruction"),E("nonce")]),Wp=V([E("instruction"),E("nonce"),P("startTime")]),Bi=V([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),P("swapBase2QuoteFee"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),P("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),P("lpReserve"),Q(P(),3,"padding")]),II=V([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),Q(P(),64,"padding")]),Ia=V([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),Ba=V([E("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var il=V([P("fee")]);var Fr=we("Raydium_liquidity_instruction");function rl(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=oo}=s,u=Buffer.alloc(Ia.span);Ia.encode({instruction:3,baseAmountIn:ne(o),quoteAmountIn:ne(i),otherAmountMin:ne(a),fixedSide:r==="base"?Ot:_u},u);let l=[S({pubkey:yo,isWritable:!1}),S({pubkey:new nt(e.id)}),S({pubkey:new nt(t.authority),isWritable:!1}),S({pubkey:new nt(t.openOrders),isWritable:!1}),S({pubkey:new nt(t.targetOrders)}),S({pubkey:new nt(e.lpMint.address)}),S({pubkey:new nt(t.vault.A)}),S({pubkey:new nt(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new nt(e.marketId),isWritable:!1}),S({pubkey:n.baseTokenAccount}),S({pubkey:n.quoteTokenAccount}),S({pubkey:n.lpTokenAccount}),S({pubkey:n.owner,isWritable:!1,isSigner:!0}),S({pubkey:new nt(t.marketEventQueue),isWritable:!1})),new Yn({programId:new nt(e.programId),keys:l,data:u})}function xa(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=oo}=s,c=ft(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(Ba.span);Ba.encode({instruction:4,lpAmount:ne(o),baseAmountMin:ne(i),quoteAmountMin:ne(r)},l);let m=[S({pubkey:yo,isWritable:!1}),S({pubkey:c.id}),S({pubkey:c.authority,isWritable:!1}),S({pubkey:c.openOrders}),S({pubkey:c.targetOrders}),S({pubkey:c.mintLp.address}),S({pubkey:c.vault.A}),S({pubkey:c.vault.B})];return u===5?m.push(S({pubkey:a})):(m.push(S({pubkey:c.id})),m.push(S({pubkey:c.id}))),m.push(S({pubkey:c.marketProgramId,isWritable:!1}),S({pubkey:c.marketId}),S({pubkey:c.marketBaseVault}),S({pubkey:c.marketQuoteVault}),S({pubkey:c.marketAuthority,isWritable:!1}),S({pubkey:n.lpTokenAccount}),S({pubkey:n.baseTokenAccount}),S({pubkey:n.quoteTokenAccount}),S({pubkey:n.owner,isWritable:!1,isSigner:!0}),S({pubkey:c.marketEventQueue}),S({pubkey:c.marketBids}),S({pubkey:c.marketAsks})),new Yn({programId:c.programId,keys:m,data:l})}return new Yn({programId:c.programId,keys:[]})}function Sa({programId:s,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:r,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:T,pcAmount:h,ammConfigId:w,feeDestinationId:x}){let B=V([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:qp,isSigner:!1,isWritable:!1},{pubkey:Dp.programId,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:x,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:A,openTime:k,coinAmount:T,pcAmount:h},I),{instruction:new Yn({keys:K,programId:s,data:I}),instructionType:X.AmmV4CreatePool}}function Up({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=oo},i){let r=ft(s),a=Buffer.alloc(ha.span);ha.encode({instruction:9,amountIn:ne(t),minAmountOut:ne(n)},a);let c=[S({pubkey:yo,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.openOrders})];return i===4&&c.push(S({pubkey:r.targetOrders})),c.push(S({pubkey:r.vault.A}),S({pubkey:r.vault.B})),i===5&&c.push(S({pubkey:o})),c.push(S({pubkey:r.marketProgramId,isWritable:!1}),S({pubkey:r.marketId}),S({pubkey:r.marketBids}),S({pubkey:r.marketAsks}),S({pubkey:r.marketEventQueue}),S({pubkey:r.marketBaseVault}),S({pubkey:r.marketQuoteVault}),S({pubkey:r.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Yn({programId:r.programId,keys:c,data:a})}function Gp({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=oo},i){let r=ft(s),a=Buffer.alloc(Ta.span);Ta.encode({instruction:11,maxAmountIn:ne(t),amountOut:ne(n)},a);let c=[S({pubkey:yo,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.openOrders}),S({pubkey:r.targetOrders}),S({pubkey:r.vault.A}),S({pubkey:r.vault.B})];return i===5&&c.push(S({pubkey:o})),c.push(S({pubkey:r.marketProgramId,isWritable:!1}),S({pubkey:r.marketId}),S({pubkey:r.marketBids}),S({pubkey:r.marketAsks}),S({pubkey:r.marketEventQueue}),S({pubkey:r.marketBaseVault}),S({pubkey:r.marketQuoteVault}),S({pubkey:r.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Yn({programId:r.programId,keys:c,data:a})}function Xp(s,e,t,n,o,i,r,a,c,u){let l=V([E("instructionId"),P("amountIn"),P("minAmountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:16,amountIn:c,minAmountOut:u},m);let d=[{pubkey:yo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Yn({programId:s,keys:d,data:m})}function zp(s,e,t,n,o,i,r,a,c,u){let l=V([E("instructionId"),P("maxAmountIn"),P("amountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:17,maxAmountIn:c,amountOut:u},m);let d=[{pubkey:yo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Yn({programId:s,keys:d,data:m})}function _r(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4){if(r==="in")return Xp(new nt(e.programId),new nt(e.id),new nt(e.authority),new nt(e.vault.A),new nt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new vr(o.toString()),new vr(i.toString()));if(r==="out")return zp(new nt(e.programId),new nt(e.id),new nt(e.authority),new nt(e.vault.A),new nt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new vr(o.toString()),new vr(i.toString()));Fr.logWithError("invalid params","params",s)}throw Fr.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function Vr(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return Up(q(_({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Gp(q(_({},a),{maxAmountIn:o,amountOut:i}),t);Fr.logWithError("invalid params","params",s)}throw Fr.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var go=5e4,Yp=V([P("x"),P("y"),P("price")]),Hp=V([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q(Yp,go,"DataElement")]);function Qp(s,e){return[0,go-2]}function jp(s){return[0,go-2]}function Zp(s){return[0,go-2]}function $p(s,e,t){let[n,o]=Qp(e,t),i=n,r=o,a=0,c=e*s.multiplier/t;for(;i<=r;){if(a=Math.floor((r+i)/2),a===0||a>=go-2)return[a,a,!1];let u=s.DataElement[a].x*s.multiplier/s.DataElement[a].y,l=s.DataElement[a-1].x*s.multiplier/s.DataElement[a-1].y,m=s.DataElement[a+1].x*s.multiplier/s.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)r=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ka(s,e,t){let[n,o,i]=$p(s,e,t);if(!i)return 0;if(n===o){let r=s.DataElement[n].x;return e*s.multiplier/r}else{let r=s.DataElement[n].x,a=s.DataElement[n].y,c=s.DataElement[o].x,u=s.DataElement[o].y,l=t*(c*a-r*u),m=r*l,d=(c-r)*(e*a-r*t)*u,p=m+d;return e*s.multiplier*l/p}}function bo(s,e,t){return e*s.multiplier/t}function sl(s,e,t){return e*t/s.multiplier}function Jp(s,e){let[t,n]=jp(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>go-2)return[r,r,!1];let c=s.DataElement[r].x,u=s.DataElement[r-1].x,l=s.DataElement[r+1].x;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<u)i=r-1;else{if(a>u&&a<c)return[r-1,r,!0];if(a>c&&a<l)return[r,r+1,!0];o=r+1}}return[r,r,!1]}function ef(s,e){let[t,n]=Zp(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=go-2)return[r,r,!1];let c=s.DataElement[r].y,u=s.DataElement[r-1].y,l=s.DataElement[r+1].y;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<l)o=r+1;else{if(a<u&&a>c)return[r-1,r,!0];if(a<c&&a>l)return[r,r+1,!0];i=r-1}}return[r,r,!1]}function al(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=Jp(s,o);if(!a)return[0,0,!1,a];if(i===r)return[s.DataElement[r].price,s.DataElement[r].y,!1,a];{let c=s.DataElement[i].x,u=s.DataElement[r].x,l=s.DataElement[i].price,m=s.DataElement[r].price,d=s.DataElement[i].y,p=s.DataElement[r].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,y;return n?(f=l+(m-l)*(e-c)/(u-c),y=d-(o-c)*s.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-o)*s.multiplier/l),[f,y,!1,a]}}}function tf(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=ef(s,o);if(!a)return[0,0,!1,a];if(i===r)return[s.DataElement[r].price,s.DataElement[r].x,!1,a];{let c=s.DataElement[i].x,u=s.DataElement[r].x,l=s.DataElement[i].price,m=s.DataElement[r].price,d=s.DataElement[i].y,p=s.DataElement[r].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,y;return n?(f=l+(m-l)*(d-e)/(d-p),y=c+m*(d-o)/s.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(o-p)/s.multiplier),[f,y,!1,a]}}}function nf(s,e){let t=al(s,e,0,!1);return t[3]?t[0]:0}function ul(s,e,t,n){let o=Ka(s,e,t),i=bo(s,e,o),r=bo(s,t,o),a=bo(s,n,o),c=!0,[u,l,m,d]=al(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return sl(s,p,o)}}function cl(s,e,t,n){let o=Ka(s,e,t),i=bo(s,e,o),r=bo(s,t,o),a=bo(s,n,o),c=!1,[u,l,m,d]=tf(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return sl(s,p,o)}}function of(s){let e=Hp.decode(s);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ll(s,e,t,n){let o=nf(s,bo(s,e,Ka(s,e,t)))/s.multiplier;return n?o:1/o}var xi=class{constructor({connection:e,modelDataPubKey:t=oo}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=of(e==null?void 0:e.data))}}};import{PublicKey as af}from"@solana/web3.js";import rB from"bn.js";import{TOKEN_PROGRAM_ID as uf}from"@solana/spl-token";import{PublicKey as rf}from"@solana/web3.js";var sf=we("Raydium_liquidity_serum");function ml({programId:s,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=rf.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw sf.logWithError("unable to find a viable program address nonce","params",{programId:s,marketId:e}),new Error("unable to find a viable program address nonce")}function Er({programId:s}){let{publicKey:e}=fe([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function Po({name:s,programId:e,marketId:t}){let{publicKey:n}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function cf({programId:s,marketId:e}){let{publicKey:t}=fe([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function Ra({programId:s}){return fe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function La({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=Po({name:"amm_associated_seed",programId:a,marketId:t}),l=Po({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Ra({programId:a}),p=Po({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Po({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=Po({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=cf({programId:a,marketId:t}),g=Po({name:"target_associated_seed",programId:a,marketId:t}),A=Po({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=ml({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:r,lpDecimals:i,version:s,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:af.default,configId:Er({programId:a})}}var Ca={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Wr=s=>{let e={},t=uf.toBase58();return Object.keys(s).map(n=>{let o=s[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:kt({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:kt({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:Ca,week:Ca,month:Ca,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Er({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:kt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Ze from"bn.js";import{PublicKey as Si}from"@solana/web3.js";import Ki from"bn.js";import{TOKEN_PROGRAM_ID as yl}from"@solana/spl-token";import{SystemProgram as Ao,SYSVAR_RENT_PUBKEY as mf,Transaction as dl,TransactionInstruction as df}from"@solana/web3.js";import{createInitializeAccountInstruction as pl,TOKEN_PROGRAM_ID as fl}from"@solana/spl-token";function lf(s="accountFlags"){let e=new Ir(s);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Na=V([xe(5),lf("accountFlags"),F("ownAddress"),P("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),F("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),xe(7)]);function pf({programId:s,marketInfo:e}){let t=V([E("version"),At("instruction"),P("baseLotSize"),P("quoteLotSize"),qt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:mf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new df({keys:n,programId:s,data:o})}async function Dr({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new dl,o=await s.getMinimumBalanceForRentExemption(165);n.add(Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:fl}),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:fl}),pl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),pl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(Na.span),space:Na.span,programId:t.programId}));let i=new dl;return i.add(Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await s.getMinimumBalanceForRentExemption((r=t.requestQueueSpace)!=null?r:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await s.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await s.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await s.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),pf({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.InitAccount,X.InitAccount]},{transaction:i,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var Vo=class extends De{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),A=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),k=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),T=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),h=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),w=$e({fromPublicKey:y,programId:yl,assignSeed:b&&`${b}-baseVault`}),x=$e({fromPublicKey:y,programId:yl,assignSeed:b&&`${b}-quoteVault`}),B=0,K=new Ki(100);function I(){let z=new Ki(0);for(;;)try{return{vaultOwner:Si.createProgramAddressSync([g.publicKey.toBuffer(),z.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:z}}catch{if(z.iaddn(1),z.gt(new Ki(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:L}=I(),N=new Ki(Math.round(10**e.decimals*n)),O=new Ki(Math.round(n*10**t.decimals*o));if(N.eq(Ot))throw Error("lot size is too small");if(O.eq(Ot))throw Error("tick size or lot size is too small");let R=await Dr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:x,vaultOwner:C,requestQueue:A,eventQueue:k,bids:T,asks:h,feeRateBps:B,quoteDustThreshold:K,vaultSignerNonce:L,baseLotSize:N,quoteLotSize:O,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let z of R.slice(1,R.length))v.addInstruction({instructions:z.transaction.instructions,signers:z.signer,instructionTypes:z.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new Si(e.mint),quoteMint:new Si(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new Si(e.mint),quoteMint:new Si(t.mint)}})}};var Ci=class extends De{constructor(t){super(t);this.stableLayout=new xi({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:kn.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let r=new Ze(new M(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Or(t[i?"mintB":"mintA"]),[c,u]=[new Ze(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ze(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ze(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",r.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=Ot;r.isZero()||(d=m==="base"?sr(r.mul(u),c):sr(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=sr(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new ut(new Ze(1)).add(o),y=new ut(new Ze(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Re(a,d),k=new Re(a,b),T=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:T,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:r,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",r),(i.isZero()||r.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:r.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[i.token,r.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),w=[g,A],x=[k,T],B=[i.raw,r.raw],K=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),x.reverse(),B.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,L]=w,[N,O]=x,[R,v]=B,z=o!=null?o:await this.getAmmPoolKeys(n.id),H=this.createTxBuilder(p),J=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ce}=J,se=Ge(J,["tokenAccount"]);H.addInstruction(se);let Se=await f.handleTokenAccount({side:"in",amount:v,mint:L.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ae}=Se,ge=Ge(Se,["tokenAccount"]);H.addInstruction(ge);let Me=await f.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:pe}=Me,te=Ge(Me,["tokenAccount"]);return H.addInstruction(te),H.addInstruction({instructions:[rl({poolInfo:n,poolKeys:z,userKeys:{baseTokenAccount:ce,quoteTokenAccount:ae,lpTokenAccount:pe,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:z.lookupTableAccount?[z.lookupTableAccount]:[]}),H.addCustomComputeBudget(m),H.addTipInstruction(d),l===0?await H.buildV0():H.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:i,baseAmountMin:r,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(n.lpMint.address)];this.logDebug("lpAmount:",i),this.logDebug("baseAmountMin:",r),this.logDebug("quoteAmountMin:",a),i.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",i.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:x}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:B}=L,K=Ge(L,["tokenAccount"]);h.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:I}=N,C=Ge(N,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[xa({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:B,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),u===0?await h.buildV0():h.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:r,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Hn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:y,feePayer:b}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let g=this.createTxBuilder(b),A={};for(let z of this.scope.account.tokenAccountRawInfos)(A[z.accountInfo.mint.toString()]===void 0||ee(this.scope.ownerPubKey,z.accountInfo.mint,Hn).publicKey.equals(z.pubkey))&&(A[z.accountInfo.mint.toString()]=z.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let T=o.add(a!=null?a:new Ze(0)),h=t.mintA.address===ze.WSOL.mint.toString(),w=t.mintB.address===ze.WSOL.mint.toString(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),x===void 0)throw new Error("base token account not found");let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),K===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=x,A[t.mintB.address]=K,r!==void 0&&!(a!=null&&a.isZero())){let z=Zt[r.programId],H=$t({programId:new tt(r.programId),poolId:new tt(r.id),owner:this.scope.ownerPubKey,version:z}),ce,se=await this.scope.connection.getAccountInfo(H);if(se&&(ce=ci(z).decode(se.data)),z!==6&&!ce){let{instruction:Me,instructionType:ke}=mi({id:new tt(r.id),programId:new tt(r.programId),version:z,ledger:H,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Me],instructionTypes:[ke]})}let ae=[];for(let Me of r.rewardInfos){let ke=Me.mint.address===ze.WSOL.mint.toString();if(A[Me.mint.address])ae.push(A[Me.mint.address]);else{let{account:Rt,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Me.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!ke,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Rt||this.logAndCreateError("farm reward account not found:",Me.mint.address),Et&&g.addInstruction(Et),ae.push(Rt)}}let ge=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],pe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ge,lpAccount:k,rewardAccounts:ae},te=Zt[r.programId],J=te===6?di(pe):te===5?pi(pe):fi(pe),Se={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[J],instructionTypes:[Se[te]]})}let C=await this.getAmmPoolKeys(t.id),L=xa({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[x,K]:[K,x],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Be.openPositionFromBaseInstructions(q(_({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},i),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:r,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let A=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),k=u.useSOLBalance&&o.mint.equals(qr),T=u.useSOLBalance&&i.mint.equals(qr),h=this.createTxBuilder(g),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(x||{});let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:A,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||B===void 0)throw Error("you don't has some token account");let I=La({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:f},{instruction:L,instructionType:N}=Sa(q(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:B,userLpVault:ee(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[L],instructionTypes:[N]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=lr,marketProgram:n=Yu,feeDestinationId:o=Qu,tokenProgram:i,baseMintInfo:r,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:T,feePayer:h}){var eo,To,Io;let w=this.scope.ownerPubKey,x=m.feePayer||((eo=this.scope.owner)==null?void 0:eo.publicKey),B=m.useSOLBalance&&r.mint.equals(qr),K=m.useSOLBalance&&a.mint.equals(qr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-market`}),L=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-request`}),N=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-event`}),O=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-bids`}),R=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-asks`}),v=$e({fromPublicKey:w,programId:Hn,assignSeed:I&&`${I}-baseVault`}),z=$e({fromPublicKey:w,programId:Hn,assignSeed:I&&`${I}-quoteVault`}),H=0,ce=new Ze(100);function se(){let Dt=new Ze(0);for(;;)try{return{vaultOwner:tt.createProgramAddressSync([C.publicKey.toBuffer(),Dt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Dt}}catch{if(Dt.iaddn(1),Dt.gt(new Ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:ae,vaultSignerNonce:ge}=se(),pe=new Ze(Math.round(10**r.decimals*b)),te=new Ze(Math.round(b*10**a.decimals*g));if(pe.eq(Ot))throw Error("lot size is too small");if(te.eq(Ot))throw Error("tick size or lot size is too small");let J=await Dr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ae,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:z,requestQueue:L,eventQueue:N,bids:O,asks:R,feeRateBps:H,quoteDustThreshold:ce,vaultSignerNonce:ge,baseLotSize:pe,quoteLotSize:te,lowestFeeMarket:d}}),Se=this.createTxBuilder(h);Se.addInstruction({instructions:J[0].transaction.instructions,signers:J[0].signer});for await(let Dt of J.slice(1,J.length))Se.addInstruction({instructions:Dt.transaction.instructions,signers:Dt.signer,instructionTypes:Dt.instructionTypes});let{account:Me,instructionParams:ke}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:B?{payer:x,amount:c}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:f,checkCreateATAOwner:y,assignSeed:B&&I?`${I}-wsol`:void 0});Se.addInstruction(ke||{});let{account:Rt,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:x,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&I?`${I}-wsol`:void 0});if(Se.addInstruction(Et||{}),Me===void 0)throw Error("you don't has base token account");if(Rt===void 0)throw Error("you don't has quote token account");let et=La({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Wt={programId:t,ammId:et.id,ammAuthority:et.authority,ammOpenOrders:et.openOrders,lpMint:et.lpMint,coinMint:et.baseMint,pcMint:et.quoteMint,coinVault:et.baseVault,pcVault:et.quoteVault,withdrawQueue:et.withdrawQueue,ammTargetOrders:et.targetOrders,poolTempLp:et.lpVault,marketProgramId:et.marketProgramId,marketId:et.marketId,ammConfigId:et.configId,feeDestinationId:o},{instruction:us,instructionType:cs}=Sa(q(_({},Wt),{userWallet:this.scope.ownerPubKey,userCoinVault:Me,userPcVault:Rt,userLpVault:ee(this.scope.ownerPubKey,et.lpMint,i).publicKey,nonce:et.nonce,openTime:l,coinAmount:c,pcAmount:u}));Se.addInstruction({instructions:[us],instructionTypes:[cs]});let ho=B||K?[((To=ke==null?void 0:ke.instructions)==null?void 0:To[0])||((Io=Et==null?void 0:Et.instructions)==null?void 0:Io[0])].filter(Dt=>!!Dt):void 0;return A===0?Se.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:ho,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Wt)}):Se.sizeCheckBuild({computeBudgetConfig:k,splitIns:ho,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Wt)})}async getCreatePoolFee({programId:t}){let n=Er({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return il.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:r}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,A=t.version===4,k;if(A)k=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let N=ll(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new M(1e6).div(N*1e6):k=new M(N*1e6).div(1e6)}let T=n,h=new Ze(0),w=new Ze(0);if(!T.isZero())if(A){w=Wn(T.mul(ka),Mr);let N=T.sub(w),O=f.add(N);h=y.mul(N).div(O)}else{w=T.mul(new Ze(2)).div(new Ze(1e4));let N=T.sub(w);p==="quote"?h=new Ze(ul(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):h=new Ze(cl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let x=new Ze(new M(h.toString()).mul(1-r).toFixed(0)),B=h,K=x,I=new M(h.toString()).div(new M(T.sub(w).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new M(h.toString()).div(10**g).div(new M(T.sub(w).toString()).div(10**b)));let C=k.sub(I).div(k).mul(100);return{amountOut:B,minAmountOut:K,currentPrice:k,executionPrice:I,priceImpact:C,fee:w}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:r}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${r*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new M(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ze(0),A=n;if(!A.isZero()){A.gt(y)&&(A=y.sub(new Ze(1)));let K=y.sub(A);g=f.mul(A).div(K).mul(Mr).div(Mr.sub(ka))}let k=new Ze(new M(g.toString()).mul(1+r).toFixed(0)),T=g,h=k;this.logDebug("amountIn:",new M(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!A.isZero()&&(w=new M(A.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${w.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let x=b.mul(T.toString()),B=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:w,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:r,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){let p=this.createTxBuilder(d),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=u||{},[g,A]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(w||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:k,associatedOnly:f});let{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(B||{}),x===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:x,outputTokenUseSolBalance:T,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[I===4?_r({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):Vr({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[I===4?X.AmmV4SwapBaseIn:X.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Ve(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},r=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Bi.decode(m.accountInfo.data);i[String(t[l])]=q(_({},d),{programId:m.accountInfo.owner}),r.push(d.baseVault,d.quoteVault)}let a={},c=await Ve(this.scope.connection,r.map(l=>({pubkey:new tt(l)})),n);for(let l=0;l<r.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+r[l]);a[String(r[l])]=new Ze(ff.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=q(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Wr({[t]:n}),i=o[t],r=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:r[0]}}};import{PublicKey as j}from"@solana/web3.js";import St from"bn.js";import{AccountLayout as bl,createAssociatedTokenAccountIdempotentInstruction as gl,TOKEN_2022_PROGRAM_ID as Qn,TOKEN_PROGRAM_ID as Ri}from"@solana/spl-token";var Li=class extends De{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var x;let{programId:t,owner:n=((x=this.scope.owner)==null?void 0:x.publicKey)||j.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new St(new j(o.address).toBuffer()).gt(new St(new j(i.address).toBuffer()))?[i,o,new M(1).div(a)]:[o,i,a],A=le.priceToSqrtPriceX64(g,y.decimals,b.decimals),k=[],T=[];y.programId===Qn.toBase58()&&T.push(ba(t,new j(y.address)).publicKey),b.programId===Qn.toBase58()&&T.push(ba(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((B,K)=>{B&&k.push(T[K])});let w=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:k});return f.addInstruction(w),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(_({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:b,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.toNumber(),config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Ec),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),w=n.useSOLBalance&&e.mintB.address===Z.toString(),[x,B]=r==="MintA"?[a,c]:[c,a],{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),A.addInstruction(I||{});let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(L||{}),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:q(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(O),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:r,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),w=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});x&&(k=x),A.addInstruction(B||{});let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(k===void 0||T===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),L=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(L),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:L.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=c.useSOLBalance&&t.mintA.address===Z.toString(),k=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:l});w&&(g=w),y.addInstruction(x||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=n!=null?n:await this.getClmmPoolKeys(t.id),K=Be.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:B,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(I=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:I.owner.equals(Qn)});return y.addInstruction(K),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===Z.toString(),A=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k&&(y=k),f.addInstruction(T||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(w||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=await this.getClmmPoolKeys(t.id),B=Be.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:x,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(Qn)});return f.addInstruction(B),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:B.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=i.useSOLBalance&&t.mintA.address===Z.toString(),g=i.useSOLBalance&&t.mintB.address===Z.toString(),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=T,h&&y.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,x&&y.addInstruction(x);let B=[];for(let O of t.rewardDefaultInfos){let R=i.useSOLBalance&&O.mint.address===Z.toString(),v;if(O.mint.address===t.mintA.address)v=A;else if(O.mint.address===t.mintB.address)v=k;else{let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});v=z,H&&y.addInstruction(H)}B.push(v)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(N=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:N.owner.equals(Qn),C=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:B},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let L=_({},C.address);if(i.closePosition){let O=await Be.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),L=_(_({},L),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=ti,authProgramId:n=mr,poolProgramId:o=no,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Be.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:f.owner.equals(Qn)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=ti,authProgramId:n=mr,clmmProgram:o=no,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=i||await this.getClmmPoolKeys(r.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let g=_o.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),k=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});T=w,x&&y.addInstruction(x);let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:u});h=B,K&&y.addInstruction(K);let I={},C=[];for(let ae of f.rewardInfos){let ge=a.useSOLBalance&&ae.mint.address===Z.toString(),pe=I[ae.mint.address];if(!pe){let{account:te,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ae.mint.programId),mint:new j(ae.mint.address),notUseTokenAccount:ge,owner:this.scope.ownerPubKey,skipCloseAccount:!ge,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ge?!1:c});pe=te,J&&y.addInstruction(J)}I[ae.mint.address]=pe,C.push(pe)}let L=Fo(t,r.lockNftMint).publicKey,N=ee(this.scope.ownerPubKey,r.lockNftMint,Ri).publicKey,O=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=he(new j(f.programId),r.poolId,O),{publicKey:z}=he(new j(f.programId),r.poolId,R),{publicKey:H}=dn(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),ce=[];for(let ae=0;ae<f.rewardInfos.length;ae++)ce.push({poolRewardVault:new j(f.rewardInfos[ae].vault),ownerRewardVault:C[ae],rewardMint:new j(f.rewardInfos[ae].mint.address)});let se=await Be.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:N,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:H,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:v,tickArrayUpper:z,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:ce,exTickArrayBitmap:Je(o,r.poolId).publicKey});return y.addInstruction({instructions:[se],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var m;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let c=this.createTxBuilder(a),u=t!=null?t:await this.getClmmPoolKeys(e.id),l=Be.closePositionInstructions({poolInfo:e,poolKeys:u,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(m=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:m.owner.equals(Qn)});return c.addCustomComputeBudget(i),c.addTipInstruction(r),c.addInstruction(l).versionBuild({txVersion:o,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),l=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(n.mint.address),mint:new j(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new St(new M(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:i});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Be.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new j(n.mint.programId),mint:new j(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ye.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(r),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===Z.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(p.mint.programId),mint:new j(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new St(new M(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=Be.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new j(p.mint.programId),mint:new j(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:ye.decimalToX64(p.perSecond)}});d=_(_({},d),k.address),m.addInstruction(k)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let l=this.createTxBuilder(u),m=t.useSOLBalance&&n.mint.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new St(new M(n.perSecond.mul(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.mul(n.endTime-n.openTime))?n.perSecond.mul(n.endTime-n.openTime).toFixed(0):n.perSecond.mul(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:o,checkCreateATAOwner:i});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Be.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ye.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(r),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===Z.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(p.mint.programId),mint:new j(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new St(new M(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});b&&m.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),A=Be.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new j(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:ye.decimalToX64(p.perSecond)}});m.addInstruction(A),d=_(_({},d),A.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u}){let l=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());l||this.logAndCreateError("reward mint error","not found reward mint",n);let m=this.createTxBuilder(u),d=t.useSOLBalance&&n.equals(Z),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(l.mint.programId),mint:n,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:o,checkCreateATAOwner:i});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Be.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(r),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l={};for(let m of n){let d=e.rewardDefaultInfos.find(A=>A.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals(Z),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(d.mint.programId),mint:m,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Be.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(r),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=g?It.add(new St(1)):Bt.sub(new St(1)):T=le.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:A?!1:l,checkCreateATAOwner:m});h=B,K&&b.addInstruction(K)}let w;if(!w){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=B,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new j(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=n.toString()===e.mintB.address?It.add(new St(1)):Bt.sub(new St(1)):T=le.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:A?!1:l,checkCreateATAOwner:m});h=B,K&&b.addInstruction(K)}let w;if(!w){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=B,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Be.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new j(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=ti,lockAuth:d=mr,clmmProgram:p=no}){var k,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)i?ee(this.scope.ownerPubKey,h.accountInfo.mint,a).publicKey.equals(h.pubkey)&&(f[h.accountInfo.mint.toString()]=h.pubkey):f[h.accountInfo.mint.toString()]=h.pubkey;let y=Object.values(t).flat().map(h=>h.nftMint),b=await Ve(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var w,x;g[h.pubkey.toBase58()]=(x=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?x:null});let A=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let w=h,x=o.useSOLBalance&&w.mintA.address===Z.toString(),B=o.useSOLBalance&&w.mintB.address===Z.toString(),K=f[w.mintA.address];if(!K)if(x){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new j(w.mintA.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});K=O,R&&A.addInstruction(R)}else{let O=new j(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintA.programId)),A.addInstruction({instructions:[gl(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new j(w.mintA.programId))]})}let I=f[w.mintB.address];if(!I)if(B){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new j(w.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:i,checkCreateATAOwner:r});I=O,R&&A.addInstruction(R)}else{let O=new j(w.mintB.address);I=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintB.programId)),A.addInstruction({instructions:[gl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,O,new j(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=I;let C=[];for(let O of w.rewardDefaultInfos){let R=o.useSOLBalance&&O.mint.address===Z.toString(),v=f[O.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:i});v=z,H&&A.addInstruction(H)}f[O.mint.address]=v,C.push(v)}let L=await this.getClmmPoolKeys(w.id),N=[];for(let O=0;O<L.rewardInfos.length;O++)N.push({poolRewardVault:new j(L.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new j(L.rewardInfos[O].mint.address)});for(let O of t[h.id]){let R=(k=n==null?void 0:n[h.id])==null?void 0:k[O.nftMint.toBase58()];if(R){let v=ee(this.scope.ownerPubKey,R.lockNftMint,Ri).publicKey,z=$.getTickArrayStartIndexByTick(O.tickLower,L.config.tickSpacing),H=$.getTickArrayStartIndexByTick(O.tickUpper,L.config.tickSpacing),{publicKey:ce}=he(new j(L.programId),R.poolId,z),{publicKey:se}=he(new j(L.programId),R.poolId,H),{publicKey:ae}=dn(new j(L.programId),R.poolId,O.tickLower,O.tickUpper),ge=Fo(m,R.lockNftMint).publicKey,pe=Be.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:ge,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:v,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:ae,vaultA:new j(L.vault.A),vaultB:new j(L.vault.B),tickArrayLower:ce,tickArrayUpper:se,userVaultA:K,userVaultB:I,mintA:new j(L.mintA.address),mintB:new j(L.mintB.address),rewardAccounts:N,exTickArrayBitmap:Je(p,R.poolId).publicKey});A.addInstruction({instructions:[pe],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let v=Be.decreaseLiquidityInstructions({poolInfo:w,poolKeys:L,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new St(0),amountMinA:new St(0),amountMinB:new St(0),nft2022:(T=g[O.nftMint.toBase58()])==null?void 0:T.equals(Qn)});A.addInstruction(v)}}}return c===0?A.sizeCheckBuildV0({computeBudgetConfig:u}):A.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ai(e).publicKey);return t?$c.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=no}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new St(1))).map(r=>xt(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=_o.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=ti}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new St(1))).map(c=>Fo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=Jc.decode(c.data);i.push(u)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(c=>c.positionId)),a=[];return r.forEach(c=>{if(!c)return;let u=_o.decode(c.data);a.push(u)}),i.map((c,u)=>({position:a[u],lockInfo:c}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ve(this.scope.connection,e.map(i=>({pubkey:new j(i)})),t),o={};for(let i=0;i<e.length;i++){let r=n[i];if(r===null||!r.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=po.decode(r.accountInfo.data),c=le.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(_({},a),{currentPrice:c,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await Ve(this.scope.connection,Array.from(n).map(c=>({pubkey:new j(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=jc.decode(c.accountInfo.data))});let r=await Ne.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:kt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ri.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?zn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:kt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ri.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?zn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:q(_({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ne.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Bo({connection:this.scope.connection,mints:Array.from(n).map(m=>new j(m))}),{computeClmmPoolInfo:i,computePoolTickData:r}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Ve(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Hc(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(bl.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(bl.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(_({},i[e]),{exBitmapAccount:i[e].exBitmapAccount.toBase58(),observationId:i[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:i[e].rewardInfos.filter(m=>!m.tokenVault.equals(j.default)).map(m=>({mint:kt({address:m.tokenMint.toBase58(),programId:Ri.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:r}}};import{PublicKey as U}from"@solana/web3.js";import{AccountLayout as Kf,NATIVE_MINT as Wo,TOKEN_PROGRAM_ID as Kt,createAssociatedTokenAccountIdempotentInstruction as Do}from"@solana/spl-token";import Pl from"bn.js";import Ur from"bn.js";function Oa(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function yf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Oa(s,e).gt(Ni)&&(t=t.add(new Ur(1))),[t,e]}var Ni=new Ur(0),Oi=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),i=t.add(e);return o.div(i)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),i=n.sub(e),[r]=yf(o,i);return r}static lpTokensToTradingTokens(e,t,n,o,i){let r=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:r,tokenAmount1:a};if(i===1)return Oa(e.mul(n),t).gt(Ni)&&r.gt(Ni)&&(r=r.add(new Ur(1))),Oa(e.mul(o),t).gt(Ni)&&a.gt(Ni)&&(a=a.add(new Ur(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import bf from"bn.js";var Ft=class{static tradingFee(e,t){return Zo(e,t,Mt)}static protocolFee(e,t){return ar(e,t,Mt)}static fundFee(e,t){return ar(e,t,Mt)}static creatorFee(e,t){return Zo(e,t,Mt)}static splitCreatorFee(e,t,n){return ar(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Mt),o=Mt.sub(t);return n.add(o).sub(new bf(1)).div(o)}};var Mi=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,i,r,a,c){let u=new Pl(0),l=Ft.tradingFee(e,o),m;c?(u=Ft.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=Ft.protocolFee(l,r),p=Ft.protocolFee(l,a),f=Oi.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Ft.creatorFee(f,i),y=f.sub(u)),{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:l,protocolFee:d,fundFee:p,creatorFee:u}}static swapBaseOutput(e,t,n,o,i,r,a,c){let u,l=new Pl(0),m;if(c)m=e;else{let b=Ft.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Oi.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Ft.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=Ft.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=Ft.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=Ft.protocolFee(u,r),y=Ft.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Qe from"bn.js";import{PublicKey as _i,TransactionInstruction as Cn,Keypair as Bf,SystemProgram as Fa}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Gr,TOKEN_2022_PROGRAM_ID as _a,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";var gf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),fS=Buffer.from("amm_config","utf8"),Pf=Buffer.from("pool","utf8"),Af=Buffer.from("pool_lp_mint","utf8"),wf=Buffer.from("pool_vault","utf8"),kf=Buffer.from("observation","utf8"),hf=Buffer.from("permission","utf8");function Eo(s){return fe([gf],s)}function Ma(s,e,t,n){return fe([Pf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function Tf(s,e){return fe([Af,e.toBuffer()],s)}function Al(s,e,t){return fe([wf,e.toBuffer(),t.toBuffer()],s)}function vi(s,e){return fe([kf,e.toBuffer()],s)}function va({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=Eo(e).publicKey,r=s||Ma(e,t,n,o).publicKey,a=Tf(e,r).publicKey,c=Al(e,r,n).publicKey,u=Al(e,r,o).publicKey,l=vi(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var If=Buffer.from("locked_liquidity","utf8");function Fi(s,e){return fe([If,e.toBuffer()],s)}function wl(s,e){return fe([hf,e.toBuffer()],s)}var xf=we("Raydium_cpmm"),Rn={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132])};function kl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=Ma(s,t,i,r).publicKey,w=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(h),isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1},{pubkey:Is,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1}],x=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:k},x),new Cn({keys:w,programId:s,data:Buffer.from([...Rn.initialize,...x])})}function hl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=V([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:_a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return xf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Cn({keys:b,programId:s,data:Buffer.from([...Rn.deposit,...g])})}function Tl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=V([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:_a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:En,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Cn({keys:b,programId:s,data:Buffer.from([...Rn.withdraw,...g])})}function Xr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=V([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},A),new Cn({keys:g,programId:s,data:Buffer.from([...Rn.swapBaseInput,...A])})}function Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=V([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},A),new Cn({keys:g,programId:s,data:Buffer.from([...Rn.swapBaseOutput,...A])})}async function Bl(s){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=s,r=[],[a,c]=[new _i(t.id),new _i(t.lpMint.address)],u;if(i)u=new _i((await i(1))[0]);else{let g=Bf.generate();r.push(g),u=g.publicKey}let{publicKey:l}=ee(o,u,Kn),{publicKey:m}=Bn(u),{publicKey:d}=Fi(s.lockProgram,u),{publicKey:p}=ee(e.wallet,c,Kn),{publicKey:f}=ee(s.lockAuthProgram,c,Kn),y=Sf({programId:s.lockProgram,auth:s.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new _i(n.vault.A),poolVaultB:new _i(n.vault.B),metadataAccount:m,lpAmount:s.lpAmount,withMetadata:(b=s.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:r,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function Sf({programId:s,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:i,nftAccount:r,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Fa.programId,isSigner:!1,isWritable:!1},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1}],A=V([P("lpAmount"),Ye("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let T=Buffer.from([...Rn.lockCpLiquidity,...k]);return new Cn({keys:g,programId:s,data:T})}function Va({programId:s,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:i,mintLp:r,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:io,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:ju,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:_a,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1}],A=V([P("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let T=Buffer.from([...Rn.collectCpFee,...k]);return new Cn({keys:g,programId:s,data:T})}function Ea(s,e,t,n,o,i,r,a,c,u,l,m,d){let p=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1},{pubkey:Fa.programId,isSigner:!1,isWritable:!1}];return new Cn({keys:p,programId:s,data:Rn.collectCreatorFee})}function xl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w){let x=V([P("amountA"),P("amountB"),P("openTime"),E("feeOn")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:A,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1},{pubkey:Fa.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(x.span);return x.encode({amountA:k,amountB:T,openTime:h,feeOn:w},K),new Cn({keys:B,programId:s,data:Buffer.from([...Rn.initializeWithPermission,...K])})}var Sl=V([xe(8),E("bump"),Ye("disableCreatePool"),qt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),F("protocolOwner"),F("fundOwner"),P("creatorFeeRate"),Q(P(),15)]),zr=V([xe(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),P("epoch"),E("feeOn"),Ye("enableCreatorFee"),Q(E(),6),P("creatorFeesMintA"),P("creatorFeesMintB"),Q(P(),28)]),SS=V([xe(8),F("configId"),Q(P(),30)]);var Vi=class extends De{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ve(this.scope.connection,e.map(m=>({pubkey:new U(m)}))),o={},i=new Set,r=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=zr.decode(d.accountInfo.data);o[String(e[m])]=q(_({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),r.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ve(this.scope.connection,m.map(p=>({pubkey:new U(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Sl.decode(f.data)}}let c={},u=await Ve(this.scope.connection,r.map(m=>({pubkey:new U(m)})));for(let m=0;m<r.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+r[m]);c[String(r[m])]=new Qe(Kf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA).sub(d.creatorFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB).sub(d.creatorFeesMintB);l[m]=q(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[r,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return q(_({},n),{[o]:q(_({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:Eo(i.programId).publicKey,mintA:kt({address:r,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[r])!=null&&c.feeConfig?zn((u=t[r])==null?void 0:u.feeConfig):void 0}}),mintB:kt({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?zn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Bo({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=kt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?zn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=kt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?zn(n[t.mintB.toBase58()].feeConfig):void 0}}),r=kt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Kt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:r,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Eo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:vi(t.programId,new U(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=Ge(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,z,H;let b=i.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new Qe(new U(p.mintA.address).toBuffer()).lte(new Qe(new U(p.mintB.address).toBuffer())),[A,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=i.useSOLBalance&&A.address===Wo.toBase58(),x=i.useSOLBalance&&k.address===Wo.toBase58(),[B,K]=[new U(A.address),new U(k.address)],I=this.createTxBuilder(d),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:B,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:T}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:r,checkCreateATAOwner:a});I.addInstruction(L||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new U(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:b,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(I.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let R=va({poolId:e,programId:t,configId:new U(u.id),mintA:B,mintB:K});return I.addInstruction({instructions:[kl(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,B,K,R.lpMint,C,N,ee(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((z=A.programId)!=null?z:Kt),new U((H=k.programId)!=null?H:Kt),R.observationId,T,h,o)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(_({},R),{mintA:A,mintB:k,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:r,computeResult:a,computeBudgetConfig:c,txTipConfig:u,config:l,txVersion:m,feePayer:d}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(_({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new ut(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=k.amount,h=t.mintA.address===Wo.toString(),w=t.mintB.address===Wo.toString(),x=this.createTxBuilder(d),[B,K]=[new U(t.mintA.address),new U(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(i?o:T).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(C||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(N||{}),!I&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=ce,v=Ge(ce,["tokenAccount"]);x.addInstruction(v);let z=n!=null?n:await this.getCpmmPoolKeys(t.id),H=new ut(new Qe(1)).sub(r);return x.addInstruction({instructions:[hl(new U(t.programId),this.scope.ownerPubKey,new U(z.authority),new U(t.id),R,I,L,new U(z.vault.A),new U(z.vault.B),B,K,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:H.mul(g).quotient,i?A.amount:T,i?T:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:z.lookupTableAccount?[z.lookupTableAccount]:[]}),x.addCustomComputeBudget(c),x.addTipInstruction(u),x.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,z;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u,closeWsol:l=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let m=new ut(new Qe(1)).sub(i),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(o.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(o.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Le(p,t.mintA.extensions.feeConfig,y,!1),Le(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],w=T.equals(Z),x=h.equals(Z),B,K,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});B=I,C&&k.addInstruction(C);let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(x&&l),associatedOnly:!x,checkCreateATAOwner:!1});K=L,N&&k.addInstruction(N),(!B||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let O=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[Tl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),O,B,K,new U(R.vault.A),new U(R.vault.B),T,h,new U(t.lpMint.address),o,p.sub((v=b.fee)!=null?v:new Qe(0)),f.sub((z=g.fee)!=null?z:new Qe(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),k.addCustomComputeBudget(r),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,L,N,O,R,v;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:r,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,k]=[new U(t.mintA.address),new U(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new Qe((1+c)*1e4)).div(new Qe(1e4)):a.outputAmount=a.outputAmount.mul(new Qe((1-c)*1e4)).div(new Qe(1e4));let T=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:Kt),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});x&&g.addInstruction(x);let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new U((L=t.mintB.programId)!=null?L:Kt),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!w||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:w,mintBTokenAcc:B,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?Il(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?w:B,o?B:w,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:Kt),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:Kt),o?A:k,o?k:A,vi(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Xr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?w:B,o?B:w,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((N=t[o?"mintA":"mintB"].programId)!=null?N:Kt),new U((O=t[o?"mintB":"mintA"].programId)!=null?O:Kt),o?A:k,o?k:A,vi(new U(t.programId),new U(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?X.CpmmSwapBaseOut:X.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:i,txVersion:r,feePayer:a,feeNftOwner:c}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let u=this.createTxBuilder(a),l=(d=e.poolKeys)!=null?d:await this.getCpmmPoolKeys(t.id),m=await Bl({poolInfo:t,poolKeys:l,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:c!=null?c:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:dr,lockAuthProgram:(y=e.authProgram)!=null?y:pr,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return u.addInstruction(m),u.addCustomComputeBudget(o),u.addTipInstruction(i),u.versionBuild({txVersion:r,extInfo:m.address})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=dr,authProgram:r=pr,cpmmProgram:a,computeBudgetConfig:c,txTipConfig:u,txVersion:l,closeWsol:m=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let d=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(d),[f,y]=[new U(t.mintA.address),new U(t.mintB.address)],b=f.equals(Z),g=y.equals(Z),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});A=T,h&&p.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,x&&p.addInstruction(x),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let B=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,o,Kt),{publicKey:I}=Fi(i,o),{publicKey:C}=ee(r,new U(t.lpMint.address),Kt);return p.addInstruction({instructions:[Va({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:K,lockPda:I,poolId:new U(t.id),mintLp:new U(B.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new U(B.vault.A),poolVaultB:new U(B.vault.B),mintA:f,mintB:y,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[X.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){var d;let{lockInfo:t,programId:n=dr,authProgram:o=pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,A]=[new U(f.mintA.address),new U(f.mintB.address)],k=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],w=m[f.mintB.address];if(!h)if(k){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new U(f.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});h=C,L&&l.addInstruction(L),m[f.mintA.address]=C}else{let C=new U(f.mintA.address);h=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintA.programId)),l.addInstruction({instructions:[Do(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!w)if(T){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new U(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});w=C,L&&l.addInstruction(L),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);w=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Do(this.scope.ownerPubKey,w,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=w}(!h||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:w});let x=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:B}=ee(u,b,Kt),{publicKey:K}=Fi(n,b),{publicKey:I}=ee(o,new U(f.lpMint.address),Kt);l.addInstruction({instructions:[Va({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:b,nftAccount:B,lockPda:K,poolId:new U(f.id),mintLp:new U(x.mintLp.address),userVaultA:h,userVaultB:w,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.vault.B),mintA:g,mintB:A,lockLpVault:I,lpFeeAmount:y,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:r}):l.sizeCheckBuild({computeBudgetConfig:r})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=Ge(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var z,H,ce;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((z=this.scope.owner)==null?void 0:z.publicKey),A=new Qe(new U(f.mintA.address).toBuffer()).lte(new Qe(new U(f.mintB.address).toBuffer())),[k,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,w]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=i.useSOLBalance&&k.address===Wo.toBase58(),B=i.useSOLBalance&&T.address===Wo.toBase58(),[K,I]=[new U(k.address),new U(T.address)],C=this.createTxBuilder(d),{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:w}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),L===void 0||O===void 0)throw Error("you don't has some token account");let v=va({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[xl(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,L,O,ee(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((H=k.programId)!=null?H:Kt),new U((ce=T.programId)!=null?ce:Kt),v.observationId,wl(t,this.scope.ownerPubKey).publicKey,h,w,o,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(_({},v),{mintA:k,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=io,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=a||this.scope.ownerPubKey,u=this.createTxBuilder(c),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[m,d,p,f]=[new U(e.mintA.address),new U(e.mintB.address),new U(e.mintA.programId),new U(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(m,p),b=this.scope.account.getAssociatedTokenAccount(d,f);return u.addInstruction({instructions:[Do(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Do(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Ea(n,this.scope.ownerPubKey,new U(l.authority),new U(l.id),new U(l.config.id),new U(l.vault.A),new U(l.vault.B),m,d,y,b,p,f)],instructionTypes:[]}),u.addCustomComputeBudget(i),u.addTipInstruction(r),u.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,programId:t=io,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=i||this.scope.ownerPubKey,a=this.createTxBuilder(r),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(A=>A.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new U(l.mintA.address),new U(l.mintB.address),new U(l.mintA.programId),new U(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[Do(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[Do(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Ea(t,this.scope.ownerPubKey,new U(m.authority),new U(m.id),new U(m.config.id),new U(m.vault.A),new U(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o,swapBaseIn:i=!0}){let r=n.toString()===e.mintB.address,a=e.feeOn===0||e.feeOn===2,c=i?Mi.swapBaseInput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a):Mi.swapBaseOutput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a),u=new M(c.outputAmount.toString()).div(c.inputAmount.toString()),l=c.outputAmount.mul(new Qe((1-o)*1e4)).div(new Qe(1e4));return{allTrade:c.inputAmount.eq(t),amountIn:t,amountOut:c.outputAmount,minAmountOut:l,executionPrice:u,fee:c.tradeFee,priceImpact:e.poolPrice.sub(u).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var T,h,w,x,B,K,I,C,L;let c=1-Number(i.toSignificant())/100,u=new Qe(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Le(u,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),m=u.sub((T=l.fee)!=null?T:new Qe(0)),d=new Qe(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(w=(h=l.fee)==null?void 0:h.toString())!=null?w:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:Ot,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Cf(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Le(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new ut(new Qe(1)).add(i),g=new ut(new Qe(1)).sub(i),A=Le(b.mul(y.amount.sub((x=y.fee)!=null?x:new Qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),k=Le(g.mul(y.amount.sub((B=y.fee)!=null?B:new Qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(I=(K=y.fee)==null?void 0:K.toString())!=null?I:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(L=(C=A.fee)==null?void 0:C.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}};function Cf(s,e,t,n){let o=s.mul(e).div(n);!o.isZero()&&!s.mul(e).mod(n).isZero()&&(o=o.add(new Qe(1)));let i=s.mul(t).div(n);return!i.isZero()&&!s.mul(t).mod(n).isZero()&&(i=i.add(new Qe(1))),{amountA:o,amountB:i}}import{PublicKey as ve,SystemProgram as Yf}from"@solana/web3.js";import{createTransferInstruction as ql,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as Go,createAssociatedTokenAccountIdempotentInstruction as Za,createSyncNativeInstruction as Hf}from"@solana/spl-token";import ot from"bn.js";var Kl={[Rs.toBase58()]:3},Cl={3:Rs};var Wa=V([xe(5),xe(8),F("ownAddress"),P("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),F("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),xe(7)]),Rl={3:Wa};import{PublicKey as Ll}from"@solana/web3.js";var Yr=we("Serum"),Hr=class{static getProgramId(e){let t=Cl[e];return t||Yr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Kl[t];return n||Yr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Rl[e];return t||Yr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Ll.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Yr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ll.default,nonce:o}}};import{PublicKey as de,SystemProgram as Rf,TransactionInstruction as Lf}from"@solana/web3.js";import jn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Nf,TOKEN_2022_PROGRAM_ID as Of,TOKEN_PROGRAM_ID as Mf}from"@solana/spl-token";function vf(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var w;let y=[],b=[S({pubkey:Mf,isWritable:!1}),S({pubkey:Of,isWritable:!1}),S({pubkey:Nf,isWritable:!1}),S({pubkey:Rf.programId,isWritable:!1}),S({pubkey:e,isSigner:!0})];b.push(S({pubkey:t})),b.push(S({pubkey:o}));let g=[c,u],A=[l,m],k=[i,r,a];for(let x=0;x<g.length;x++){let B=g[x],K=k[x]===B.mintA.address;if(b.push(S({pubkey:new de(B.programId),isWritable:!1})),x===g.length-1?b.push(S({pubkey:o})):b.push(S({pubkey:n})),b.push(S({pubkey:new de(k[x])})),b.push(S({pubkey:new de(k[x+1])})),B.version===6){let I=A[x];b.push(S({pubkey:new de(I.config.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new de(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new de(B.observationId)})),b.push(S({pubkey:En})),b.push(S({pubkey:Je(new de(B.programId),new de(B.id)).publicKey})),y.push(Ff(B.sqrtPriceX64.toString(),K));for(let C of(w=f[x])!=null?w:[])b.push(S({pubkey:new de(C)}))}else if(B.version===5){let I=A[x];b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.authority),isWritable:!1})),b.push(S({pubkey:new de(I.marketProgramId)})),b.push(S({pubkey:new de(I.marketAuthority)})),b.push(S({pubkey:Hu,isWritable:!1})),b.push(S({pubkey:new de(I.openOrders)})),b.push(S({pubkey:new de(I.vault.A)})),b.push(S({pubkey:new de(I.vault.B)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.marketId)})),b.push(S({pubkey:new de(I.marketBids)})),b.push(S({pubkey:new de(I.marketAsks)})),b.push(S({pubkey:new de(I.marketEventQueue)})),b.push(S({pubkey:new de(I.marketBaseVault)})),b.push(S({pubkey:new de(I.marketQuoteVault)}))}else if(B.version===4){let I=A[x],C=B.status!==1;b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.authority),isWritable:!1})),b.push(S({pubkey:new de(C?I.id:I.marketProgramId)})),b.push(S({pubkey:new de(C?I.id:I.marketAuthority)})),b.push(S({pubkey:new de(C?I.id:I.openOrders)})),b.push(S({pubkey:new de(I.vault.A)})),b.push(S({pubkey:new de(I.vault.B)})),b.push(S({pubkey:new de(C?I.id:I.marketId)})),b.push(S({pubkey:new de(C?I.id:I.marketBids)})),b.push(S({pubkey:new de(C?I.id:I.marketAsks)})),b.push(S({pubkey:new de(C?I.id:I.marketEventQueue)})),b.push(S({pubkey:new de(C?I.id:I.marketBaseVault)})),b.push(S({pubkey:new de(C?I.id:I.marketQuoteVault)}))}else if(B.version===7){let I=A[x];b.push(S({pubkey:new de(I.authority)})),b.push(S({pubkey:new de(I.config.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new de(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new de(B.observationId)}))}else throw Error("pool type error")}let T=V([E("insId"),P("amountIn"),P("amountOut"),Q(re(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new Lf({keys:b,programId:s,data:h})}function Ff(s,e){if(s)if(e){let t=new jn(s).div(new jn(25));return t.gt(Kr)?t:Kr}else{let t=new jn(s).mul(new jn(25));return t.lt(Cr)?t:Cr}else return e?Kr:Cr}function Nl({routeProgram:s,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,l,m,d;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],f=ft(p),y=t.equals(f.mintA.address)?It.add(Gt):Bt.sub(Gt);return Be.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:f.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:f.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new jn(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],f=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Xr(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,f?p.vaultA:p.vaultB,f?p.vaultB:p.vaultA,f?p.mintProgramA:p.mintProgramB,f?p.mintProgramB:p.mintProgramA,new de(p[f?"mintA":"mintB"].address),new de(p[f?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[f?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?Vr({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new jn(0)),fixedSide:"in"}):_r({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new jn(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=n.poolInfo[0],f=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[vf(s,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,f,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((d=(m=n.minAmountOut.fee)==null?void 0:m.raw)!=null?d:new jn(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(g=>g!==void 0),address:{}}}else throw Error("route type error")}import{ASSOCIATED_TOKEN_PROGRAM_ID as Qr,TOKEN_2022_PROGRAM_ID as Gf,TOKEN_PROGRAM_ID as Xa}from"@solana/spl-token";import{SystemProgram as tn,TransactionInstruction as Ht}from"@solana/web3.js";import Uo from"bn.js";var Zn=V([P(),P("epoch"),E("curveType"),qt("index"),P("migrateFee"),P("tradeFeeRate"),P("maxShareFeeRate"),P("minSupplyA"),P("maxLockRate"),P("minSellRateA"),P("minMigrateRateA"),P("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),Q(P(),16)]),_f=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),pn=V([P(),P("epoch"),E("bump"),E("status"),E("mintDecimalsA"),E("mintDecimalsB"),E("migrateType"),P("supply"),P("totalSellA"),P("virtualA"),P("virtualB"),P("realA"),P("realB"),P("totalFundRaisingB"),P("protocolFee"),P("platformFee"),P("migrateFee"),_f.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),Q(E(),62)]),tC=V([P(),P("epoch"),F("poolId"),F("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),Q(P(),8)]),Ol=V([E("migrateType"),E("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Vf=V([P("epoch"),E("index"),F("configId"),Ol.replicate("bondingCurveParam"),Q(P(),50)]),Ln=V([P(),P("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Q(E(),64,"name"),Q(E(),256,"web"),Q(E(),256,"img"),F("cpConfigId"),P("creatorFeeRate"),F("transferFeeExtensionAuth"),Q(E(),180),fc(Vf,"platformCurve")]);var Ef=Buffer.from("vault_auth_seed","utf8"),sC=Buffer.from("global_config","utf8"),Wf=Buffer.from("pool_vesting","utf8"),Df=Buffer.from("platform_config","utf8"),qf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Uf=Buffer.from("creator_fee_vault_auth_seed","utf8");function Yt(s){return fe([Ef],s)}function qo(s,e,t){return fe([da,e.toBuffer(),t.toBuffer()],s)}function Da(s,e,t){return fe([pa,e.toBuffer(),t.toBuffer()],s)}function wo(s){return fe([Buffer.from("__event_authority","utf8")],s)}function qa(s,e){return fe([Df,e.toBuffer()],s)}function Ei(s,e,t){return fe([Wf,e.toBuffer(),t.toBuffer()],s)}function Pn(s,e,t){return fe([e.toBuffer(),t.toBuffer()],s)}function Ua(s){return fe([qf],s)}function An(s,e,t){return fe([e.toBuffer(),t.toBuffer()],s)}function Ga(s){return fe([Uf],s)}var Qt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145])};function Ml(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=V([E("decimals"),vt("name"),vt("symbol"),vt("uri")]),w=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn")]),x=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),B=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:tn.programId,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:wo(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),L=Buffer.alloc(b.type==="ConstantCurve"?B.span:x.span);return h.encode({decimals:d,name:p,symbol:f,uri:y},I),b.type==="ConstantCurve"?B.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?x.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&x.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),w.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:T},C),new Ht({keys:K,programId:s,data:Buffer.from([...Qt.initializeV2,...I,...L,...C])})}function vl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=V([E("decimals"),vt("name"),vt("symbol"),vt("uri")]),w=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),V([qt("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),x=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),B=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Gf,isSigner:!1,isWritable:!1},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:tn.programId,isSigner:!1,isWritable:!1},{pubkey:wo(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),L=Buffer.alloc(y.type==="ConstantCurve"?B.span:x.span);return h.encode({decimals:m,name:d,symbol:p,uri:f},I),y.type==="ConstantCurve"?B.encode(q(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?x.encode(q(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&x.encode(q(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),w.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:k,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new Uo(0)}},C),new Ht({keys:K,programId:s,data:Buffer.from([...Qt.initializeWithToken2022,...I,...L,...C])})}function jr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountB"),P("minAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:wo(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:tn.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new Uo(0)},w),new Ht({keys:h,programId:s,data:Buffer.from([...Qt.buyExactIn,...w])})}function Fl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountA"),P("maxAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:wo(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:tn.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new Uo(0)},w),new Ht({keys:h,programId:s,data:Buffer.from([...Qt.buyExactOut,...w])})}function Zr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountA"),P("minAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:wo(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:tn.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new Uo(0)},w),new Ht({keys:h,programId:s,data:Buffer.from([...Qt.sellExactIn,...w])})}function _l(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountB"),P("maxAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:wo(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:tn.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new Uo(0)},w),new Ht({keys:h,programId:s,data:Buffer.from([...Qt.sellExactOut,...w])})}function za(s,e,t,n,o,i,r,a,c){let u=V([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:tn.programId,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Ht({keys:l,programId:s,data:Buffer.from([...Qt.claimVestedToken,...m])})}function Ya(s,e,t,n,o,i){let r=V([P("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:tn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Ht({keys:a,programId:s,data:Buffer.from([...Qt.createVestingAccount,...c])})}function Ha(s,e,t,n,o,i,r,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:tn.programId,isSigner:!1,isWritable:!0},{pubkey:Qr,isSigner:!1,isWritable:!0}];return new Ht({keys:u,programId:s,data:Qt.claimPlatformFee})}function Vl(s,e,t,n,o,i,r,a,c,u,l,m,d){let p=V([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),vt("name"),vt("web"),vt("img"),P("creatorFeeRate")]),f=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:tn.programId,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Ht({keys:f,programId:s,data:Buffer.from([...Qt.createPlatformConfig,...y])})}function El(s,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],i;if(n.type==="updateClaimFeeWallet"){let r=V([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=V([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=V([E("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);i=Buffer.alloc(r.span),r.encode(_({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=V([E("index"),P("value")]);i=Buffer.alloc(r.span),r.encode({index:3,value:n.value},i)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let r=V([E("index"),vt("value")]);i=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?r.encode({index:4,value:n.value},i):n.type==="updateWeb"?r.encode({index:5,value:n.value},i):n.type==="updateImg"&&r.encode({index:6,value:n.value},i)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let r=V([E("index")]);i=Buffer.alloc(r.span),r.encode({index:7},i)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let r=V([E("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),vt("name"),vt("web"),vt("img"),F("transferFeeExtensionAuth"),P("creatorFeeRate")]);i=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),r.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},i)}else throw Error("updateInfo params type error");return new Ht({keys:o,programId:s,data:Buffer.from([...Qt.updatePlaformConfig,...i])})}function Qa(s,e,t,n,o,i,r,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:tn.programId,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1}];return new Ht({keys:c,programId:s,data:Qt.claimPlatformFeeFromVault})}function ja(s,e,t,n,o,i,r){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:tn.programId,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1}];return new Ht({keys:a,programId:s,data:Qt.claimCreatorFee})}var PC=new Uo("18446744073709551615");import $r from"bn.js";var $n=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var Jr=class extends $n{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB.add(i)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new $r(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new $r(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(r),u=a.mul(n).div(r).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new $r(0))||m.lt(new $r(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return ro(o,i)}};import nn from"bn.js";import es from"bn.js";var ts=class extends $n{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new es(0)))throw Error("invalid input 1");let a=new es(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new es(0))||t.lt(new es(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return ro(o,n)}};import _t from"bn.js";import Wl from"bn.js";var Wi=class{static _multipler(e){return new M(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new M(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new Wl(o.mul(this._Q64).toFixed(0))}};Wi._Q64=new M(new Wl(1).shln(64).toString());var ns=class extends $n{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualA.mul(e.realA).toString()).div(Wi._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new _t(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new _t(3)).sub(i),u=t.mul(new _t(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new _t(2)).mul(rt).div(l);if(!m.gt(new _t(0)))throw Error("a need gt 0");if(!bi.gt(m))throw Error("a need lt u64 max");if(m.lt(new _t(0))||u.lt(new _t(0)))throw Error("invalid input 0");return{a:m,b:new _t(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new _t(2).mul(n).mul(rt).div(e.virtualA);return new _t(new M(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return ro(e.virtualA.mul(o),new _t(2).mul(rt)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=ro(e.virtualA.mul(o),new _t(2).mul(rt));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new _t(2).mul(n).mul(rt).div(e.virtualA),i=new _t(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Ct=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let l=this.getCurve(e),m=l.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),d=l.getPoolInitPriceByInit(q(_({},m),{decimalA:c,decimalB:u})),p=o.div(new nn(t-1)),f=new nn(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,k=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(k),w=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(w.amountA.amount),k=k.add(w.amountB);let x=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:c,decimalB:u,curveType:e});y.push({price:x,totalSellSupply:new M(A.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:i}){return this.getCurve(i).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(Mt).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new nn(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(Mt);if(n.lt(u))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(o),m=e.mul(r.minMigrateRateA).div(Mt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new nn(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new nn(10).pow(new nn(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new nn(100);if(p.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(i),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,A;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),A=g.sub(T)}else b=f,g=t,A=m;let k=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Ls(b,c,u),amountB:g,splitFee:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=Ns(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(i).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),A=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:A}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(i),m=Ls(t,c,u),d=m.fee?m.amount.sub(m.fee):m.amount,p=l.sellExactIn({poolInfo:e,amount:d}),f=this.calculateFee({amount:p,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Ct.getCurve(i).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Ns(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new nn(0):e.mul(n).div(r),c=r.isZero()?new nn(0):e.mul(o).div(r),u=r.isZero()?new nn(0):e.mul(i).div(r),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return Zo(e,t,Mt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Mt),o=Mt.sub(t);return n.add(o).sub(new nn(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new nn(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return Jr;case 1:return ts;case 2:return ns}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as ko,TOKEN_PROGRAM_ID as Ee,createAssociatedTokenAccountIdempotentInstruction as Vt,createSyncNativeInstruction as Xf,getTransferFeeConfig as os,unpackMint as is}from"@solana/spl-token";import ue from"bn.js";import{PublicKey as Dl,SystemProgram as zf}from"@solana/web3.js";var rs={initPriceX64:new ue("515752397214619"),supply:new ue(1e15),totalSellA:new ue(7931e11),totalFundRaisingB:new ue(85e9),totalFundRaisingBUSD:new ue(125e8),totalLockedAmount:new ue("0"),cliffPeriod:new ue("0"),unlockPeriod:new ue("0"),decimals:6,virtualA:new ue("1073471847374405"),virtualB:new ue("30050573465"),realA:new ue(0),realB:new ue(0),protocolFee:new ue(0),platformId:new Dl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ue(0),cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)}},Jn=new ue(1e4);var Di=class extends De{constructor(e){super(e)}async createLaunchpad(L){var N=L,{programId:e=ct,authProgramId:t,platformId:n=rs.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:A,minMintAAmount:k,slippage:T,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:x,token2022:B,transferFeeExtensionParams:K,creatorFeeOn:I=0}=N,C=Ge(N,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn"]);var Dt,zi,nu,ou,iu,ru,su,au,uu,cu,lu;let O=this.createTxBuilder(g);t=t!=null?t:Yt(e).publicKey,B=!!K,B&&(l="cpmm");let R=d;if(!R&&m){let jt=await this.scope.connection.getAccountInfo(m);jt&&(R=Zn.decode(jt.data))}R||this.logAndCreateError("config not found");let v=R.mintB,z=R.curveType,{publicKey:H}=qo(e,o,v),{publicKey:ce}=Da(e,H,o),{publicKey:se}=Da(e,H,v),{publicKey:ae}=Bn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${v.toBase58()}, decimals A:${i}/B:${r}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let pe=(await this.scope.api.fetchLaunchConfigs()).find(jt=>jt.key.pubKey===m.toBase58()),te=(Dt=C==null?void 0:C.supply)!=null?Dt:new ue(pe.defaultParams.supplyInit),J=(zi=C==null?void 0:C.totalSellA)!=null?zi:new ue(pe.defaultParams.totalSellA),Se=(nu=C==null?void 0:C.totalFundRaisingB)!=null?nu:new ue(pe.defaultParams.totalFundRaisingB),Me=(ou=C==null?void 0:C.totalLockedAmount)!=null?ou:new ue(0),ke=p;if(!p){let jt=await this.scope.connection.getAccountInfo(n);jt||this.logAndCreateError("platform id not found:",n.toString()),ke=Ln.decode(jt.data).feeRate}let Et=Ct.getCurve(R.curveType).getInitParam({supply:te,totalFundRaising:Se,totalSell:J,totalLockedAmount:Me,migrateFee:R.migrateFee}),et;try{et=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let Wt={epoch:new ue(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(iu=et==null?void 0:et.decimals)!=null?iu:r,supply:te,totalSellA:J,mintA:new Dl(o),mintB:v,virtualA:Et.a,virtualB:Et.b,realA:rs.realA,realB:rs.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:rs.protocolFee,platformFee:ke,platformId:n,configId:m,vaultA:ce,vaultB:se,creator:this.scope.ownerPubKey,totalFundRaisingB:Se,vestingSchedule:{totalLockedAmount:Me,cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)},mintProgramFlag:B?1:0,cpmmCreatorFeeOn:I},us=Ct.getCurve(R.curveType),{c:cs}=us.getInitParam({supply:Wt.supply,totalFundRaising:Wt.totalFundRaisingB,totalLockedAmount:Me,totalSell:R.curveType===0?Wt.totalSellA:new ue(0),migrateFee:R.migrateFee});try{Ct.checkParam({supply:Wt.supply,totalFundRaising:Wt.totalFundRaisingB,totalSell:cs,totalLockedAmount:Me,decimals:Wt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(jt){this.logAndCreateError(`check create mint params failed, ${jt.message}`)}O.addInstruction({instructions:[B?vl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,se,i,a,c,u||"https://",{type:z===0?"ConstantCurve":z===1?"FixedCurve":z===2?"LinearCurve":"ConstantCurve",totalSellA:J,migrateType:l,supply:te,totalFundRaisingB:Se},Me,(ru=C==null?void 0:C.cliffPeriod)!=null?ru:new ue(0),(su=C==null?void 0:C.unlockPeriod)!=null?su:new ue(0),I,K):Ml(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,se,ae,i,a,c,u||"https://",{type:z===0?"ConstantCurve":z===1?"FixedCurve":z===2?"LinearCurve":"ConstantCurve",totalSellA:J,migrateType:l,supply:te,totalFundRaisingB:Se},Me,(au=C==null?void 0:C.cliffPeriod)!=null?au:new ue(0),(uu=C==null?void 0:C.unlockPeriod)!=null?uu:new ue(0),I)]});let ho=B?await this.scope.connection.getEpochInfo():void 0,eo=K?{epoch:BigInt((ho==null?void 0:ho.epoch)||0),maximumFee:BigInt((cu=K==null?void 0:K.maxinumFee.toString())!=null?cu:0),transferFeeBasisPoints:(lu=K==null?void 0:K.transferFeeBasePoints)!=null?lu:0}:void 0,To={amountA:{amount:new ue(0),fee:void 0,expirationTime:void 0},amountB:new ue(0),splitFee:{platformFee:new ue(0),shareFee:new ue(0),protocolFee:new ue(0),creatorFee:new ue(0)}},Io;if(x!=null&&x.length&&O.addInstruction({signers:x}),!C.createOnly){let{builder:jt,extInfo:Yl}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:B?ko:void 0,mintA:o,mintB:v,poolInfo:Wt,buyAmount:A,minMintAAmount:k,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:ke,slippage:T,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!eo,transferFeeConfigA:eo?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:eo,newerTransferFee:eo}:void 0,fromCreate:!0});O.addInstruction(_({},jt.AllTxData)),To=_({},Yl),Io=(this.scope.cluster==="devnet"||f===1)&&C.shareFeeReceiver?[jt.allInstructions[0]]:void 0}return O.addTipInstruction(b),f===0?O.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:To,splitIns:Io,address:q(_({},Wt),{poolId:H})}):O.sizeCheckBuild({computeBudgetConfig:y,swapInfo:To,splitIns:Io,address:q(_({},Wt),{poolId:H})})}async buyToken({programId:e=ct,authProgramId:t,mintA:n,mintAProgram:o=Ee,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:w=!1}){var J,Se,Me;p.lte(new ue(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let x=this.createTxBuilder(d),{publicKey:B}=qo(e,n,i);t=t!=null?t:Yt(e).publicKey;let K=h;if(!w)if(K)o=ko;else{let ke=await this.scope.connection.getAccountInfo(n);if(ke&&ke.owner.equals(ko)){o=ke.owner;let Rt=is(n,ke,o);K=os(Rt)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),L=T&&C,N=L?this.scope.account.getAssociatedTokenAccount(i,Ee):null,O=C;if(x.addInstruction({instructions:[Vt(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...L?[Vt(this.scope.ownerPubKey,N,this.scope.ownerPubKey,i,Ee),zf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N,lamports:BigInt(p.toString())}),Xf(N)]:[]]}),!L){let{account:ke,instructionParams:Rt}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:O?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!O,notUseTokenAccount:O,associatedOnly:O?!1:A,checkCreateATAOwner:k});ke&&(N=ke),x.addInstruction(Rt||{})}N||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let ke=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});ke||this.logAndCreateError("cannot found pool:",B.toBase58()),R=pn.decode(ke.data)}let v=a,z=await Ve(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ke=>({pubkey:ke})));if(!v){let ke=z.find(Rt=>Rt.pubkey.equals(R.configId));(!ke||!ke.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Zn.decode(ke.accountInfo.data)}let H=z.find(ke=>ke.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Ct.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountA.amount.toString()).sub((Se=(J=se.amountA.fee)==null?void 0:J.toString())!=null?Se:0),ge=y?new M(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new M(1),pe=f!=null?f:y?new ue(ae.mul(ge).toFixed(0)):se.amountA.amount.sub((Me=se.amountA.fee)!=null?Me:new ue(0));se.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${se.amountA.toString()}, input ${i.toBase58()} amount: ${se.amountB.toString()}`);let te=g?ee(g,i,Ee).publicKey:void 0;return te&&x.addInstruction({instructions:[Vt(this.scope.ownerPubKey,te,g,i)]}),x.addInstruction({instructions:[jr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,I,N,R.vaultA,R.vaultB,n,i,o,Ee,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,se.amountB.lt(p)?se.amountB:p,pe,b,te)]}),x.addCustomComputeBudget(l),x.addTipInstruction(m),x.versionBuild({txVersion:u,extInfo:q(_({},se),{decimalOutAmount:ae,minDecimalOutAmount:new M(pe.toString())})})}async buyTokenExactOut({programId:e=ct,authProgramId:t,mintA:n,mintAProgram:o=Ee,mintB:i=Nn,poolInfo:r,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new ue(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ue(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let w=this.createTxBuilder(p),{publicKey:x}=qo(e,n,i);t=t!=null?t:Yt(e).publicKey;let B=r;if(!B){let te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});te||this.logAndCreateError("cannot found pool:",x.toBase58()),B=pn.decode(te.data)}let K=a,I=await Ve(this.scope.connection,[K?void 0:B.configId,B.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!K){let te=I.find(J=>J.pubkey.equals(B.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",B.configId.toBase58()),K=Zn.decode(te.accountInfo.data)}let C=I.find(te=>te.pubkey.equals(B.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",B.configId.toBase58());let L=Ln.decode(C.accountInfo.data);u=u||L.feeRate;let N=c;if(!h)if(N)o=ko;else{let te=await this.scope.connection.getAccountInfo(n);if(te&&te.owner.equals(ko)){o=te.owner;let J=is(n,te,o);N=os(J)||void 0}}let O=Ct.buyExactOut({poolInfo:B,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:L.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),R=new M(O.amountB.toString()),v=b?new M(Jn.add(b).toNumber()/Jn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new M(1),z=(f!=null?f:b)?new ue(R.mul(v).toFixed(0)):O.amountB,H=this.scope.account.getAssociatedTokenAccount(n,o),ce=null,se=i.equals(Nn);w.addInstruction({instructions:[Vt(this.scope.ownerPubKey,H,this.scope.ownerPubKey,n,o)]});let{account:ae,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:se?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!se,notUseTokenAccount:se,associatedOnly:se?!1:k,checkCreateATAOwner:T});ae&&(ce=ae),w.addInstruction(ge||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let pe=A?ee(A,i,Ee).publicKey:void 0;return pe&&w.addInstruction({instructions:[Vt(this.scope.ownerPubKey,pe,A,i)]}),w.addInstruction({instructions:[Fl(e,this.scope.ownerPubKey,t,B.configId,B.platformId,x,H,ce,B.vaultA,B.vaultB,n,i,o,Ee,Pn(e,B.platformId,i).publicKey,An(e,B.creator,i).publicKey,y,z,g,pe)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:z,outAmount:y}})}async sellToken({programId:e=ct,authProgramId:t,mintAProgram:n=Ee,mintA:o,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:Yt(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ue(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=qo(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(ko)){n=J.owner;let Se=is(o,J,n);x=os(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(B=C),h.addInstruction(L||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let J=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",w.toBase58()),R=pn.decode(J.data)}let v=a,z=await Ve(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(J=>({pubkey:J})));if(!v){let J=z.find(Se=>Se.pubkey.equals(R.configId));(!J||!J.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Zn.decode(J.accountInfo.data)}let H=z.find(J=>J.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Ct.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountB.toString()),ge=y?new M(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new M(1),pe=f!=null?f:y?new ue(ae.mul(ge).toFixed(0)):se.amountB;pe.lte(new ue(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let te=g?ee(g,i,Ee).publicKey:void 0;return te&&h.addInstruction({instructions:[Vt(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[Zr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,w,B,K,R.vaultA,R.vaultB,o,i,n,Ee,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,se.amountA.amount.lt(p)?se.amountA.amount:p,pe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:pe}})}async sellTokenExactOut({programId:e=ct,authProgramId:t,mintAProgram:n=Ee,mintA:o,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:Yt(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ue(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=qo(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(ko)){n=J.owner;let Se=is(o,J,n);x=os(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(B=C),h.addInstruction(L||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let J=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",w.toBase58()),R=pn.decode(J.data)}let v=a,z=await Ve(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(J=>({pubkey:J})));if(!v){let J=z.find(Se=>Se.pubkey.equals(R.configId));(!J||!J.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Zn.decode(J.accountInfo.data)}let H=z.find(J=>J.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Ct.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountA.amount.toString()),ge=y?new M(Jn.add(y).toNumber()/Jn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),pe=(f!=null?f:y)?new ue(ae.mul(ge).toFixed(0)):se.amountA.amount,te=g?ee(g,i,Ee).publicKey:void 0;return te&&h.addInstruction({instructions:[Vt(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[_l(e,this.scope.ownerPubKey,t,R.configId,R.platformId,w,B,K,R.vaultA,R.vaultB,o,i,n,Ee,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,p,pe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:pe}})}async createPlatformConfig({programId:e=ct,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,cpConfigId:i,migrateCpLockNftScale:r,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:A}=qa(e,t);return g.addInstruction({instructions:[Vl(e,t,n,o,A,i,a,r,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:A}})}async updatePlatformConfig({programId:e=ct,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:qa(e,t).publicKey;return u.addInstruction({instructions:[El(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimPlatformFee({programId:e=ct,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:c=Ee,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:Yt(e).publicKey;let f=r,y=a;if(!f){let A=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});A||this.logAndCreateError("cannot found pool:",o.toBase58());let k=pn.decode(A.data),T=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Zn.decode(T.data).mintB,y=y!=null?y:k.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=ee(this.scope.ownerPubKey,f,Ee).publicKey;return p.addInstruction({instructions:[Vt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Ha(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=ct,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:Yt(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:pn.span},{memcmp:{offset:pn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=pn.decode(m.account.data);if(d.platformFee.lte(new ue(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Ee).publicKey;u.addInstruction({instructions:[Vt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Ha(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,Ee)]})}),u.addTipInstruction(a),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=ct,poolId:t,beneficiary:n,shareAmount:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});o.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=Ei(e,t,n).publicKey;return u.addInstruction({instructions:[Ya(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=ct,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=this.createTxBuilder(r);n.length===0&&this.logAndCreateError("beneficiaryList is null");let c=await this.getRpcPoolInfo({poolId:t});return n.reduce((l,m)=>l.add(m.shareAmount),c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(l=>{let m=Ei(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ya(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=ct,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=Yt(e).publicKey,m=o||Ei(e,t,this.scope.ownerPubKey).publicKey,d=n;if(!d){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),d=pn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Ee).publicKey;return u.addInstruction({instructions:[Vt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[za(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Ee)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=ct,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=Yt(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||Ei(e,d,this.scope.ownerPubKey).publicKey,b=ee(this.scope.ownerPubKey,f.mintA,Ee).publicKey;c.addInstruction({instructions:[Vt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[za(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,Ee)]})}),i===0?c.sizeCheckBuildV0({computeBudgetConfig:r}):c.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=ct,platformId:t,mintB:n,mintBProgram:o=Ee,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=Pn(e,t,n).publicKey,d=Ua(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[Vt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),Qa(e,t,i!=null?i:this.scope.ownerPubKey,d,m,p,n,o)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:r})}async claimMultipleVaultPlatformFee({programId:e=ct,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:i,feePayer:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(r),l={};return t.forEach(async m=>{var b,g;let d=Ua(e).publicKey,p=Pn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Nn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});A&&(y=A),u.addInstruction(k||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Qa(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:Ee)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:i}):u.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=ct,mintB:t,mintBProgram:n=Ee,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=An(e,this.scope.ownerPubKey,t).publicKey,l=Ga(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Vt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),ja(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=ct,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=this.createTxBuilder(i);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:Ee,l=An(e,this.scope.ownerPubKey,c).publicKey,m=Ga(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[Vt(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),ja(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?r.sizeCheckBuildV0({computeBudgetConfig:o}):r.sizeCheckBuild({computeBudgetConfig:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Ve(this.scope.connection,e.map(c=>({pubkey:c})),t),o={},i=[];for(let c=0;c<e.length;c++){let u=n[c];if(u===null||!u.accountInfo)throw Error("fetch pool info error: "+e[c].toBase58());let l=pn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(_({},l),{poolId:e[c],programId:u.accountInfo.owner}),i.push(l.configId)}let r=await Ve(this.scope.connection,i.map(c=>({pubkey:c})),t),a={};for(let c=0;c<i.length;c++){let u=r[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+i[c].toBase58());let l=Zn.decode(u.accountInfo.data);a[i[c].toBase58()]=q(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(_({},c),{[u]:q(_({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new ot(0),qi=class extends De{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ne(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[hn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[hn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,l=e.amountOut,m=u.amount.token.mint.equals(Z),d=l.amount.token.mint.equals(Z),p=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Go:Fe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:m?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!d)g=this.scope.account.getAssociatedTokenAccount(f,l.amount.token.isToken2022?Go:Fe);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?Go:Fe,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=h,w&&c.addInstruction(w)}d&&c.addInstruction({endInstructions:[hn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Fe})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let h=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?Go:Fe)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Nl({routeProgram:i,inputMint:p,swapInfo:q(_({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[ql(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:w}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[ql(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return c.addInstruction(T),r===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:T.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:T.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:c=new ot(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let A=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,k=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:w,remainingAccounts:x},launchPoolInfo:B,launchAuthProgramId:K,launchSwapInfo:I,outAmount:C,minOutAmount:L}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:k,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),N=e.toString()===T.poolInfo.mintA.address,O=f.useSOLBalance&&T.poolInfo.mintA.address===Z.toBase58(),R=f.useSOLBalance&&T.poolInfo.mintB.address===Z.toBase58(),v={},z;!r||r.equals(new M(0))?z=N?It.add(new ot(1)):Bt.sub(new ot(1)):z=le.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let H=this.createTxBuilder(A),[ce,se]=[new ve(T.poolInfo.mintA.address),new ve(T.poolInfo.mintB.address)],[ae,ge]=[new ve(T.poolInfo.mintA.programId),new ve(T.poolInfo.mintB.programId)],pe=this.scope.account.getAssociatedTokenAccount(ce,ae),te=this.scope.account.getAssociatedTokenAccount(se,ge);H.addInstruction({instructions:[Za(this.scope.ownerPubKey,pe,this.scope.ownerPubKey,ce,ae),Za(this.scope.ownerPubKey,te,this.scope.ownerPubKey,se,ge)]}),(N&&O||!N&&R)&&H.addInstruction({instructions:[Yf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?pe:te,lamports:BigInt(h.toString())}),Hf(N?pe:te)]}),v[T.poolInfo.mintA.address]=pe,v[T.poolInfo.mintB.address]=te,(!pe||!te)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:pe,ownerTokenAccountB:te}),H.addInstruction(n?Be.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:pe,tokenAccountB:te},outputMint:N?se:ce,amountOut:w,amountInMax:h,sqrtPriceLimitX64:z,remainingAccounts:x}):Be.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:pe,tokenAccountB:te},inputMint:new ve(e),amountIn:t,amountOutMin:w,sqrtPriceLimitX64:z,remainingAccounts:x}));let J=B.mintProgramFlag===0?Fe:Go,Se=this.scope.account.getAssociatedTokenAccount(B.mintA,J),Me=v[B.mintB.toBase58()];if(H.addInstruction({instructions:[Za(this.scope.ownerPubKey,Se,this.scope.ownerPubKey,B.mintA,J)]}),!Me){let ke=B.mintB.equals(Z),{account:Rt,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:B.mintB,notUseTokenAccount:ke,owner:this.scope.ownerPubKey,skipCloseAccount:!ke,createInfo:ke?{payer:this.scope.ownerPubKey,amount:w}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Me=Rt,Et&&H.addInstruction(Et)}return H.addInstruction({instructions:[jr(B.programId,this.scope.ownerPubKey,K,B.configId,B.platformId,new ve(i),Se,Me,B.vaultA,B.vaultB,B.mintA,B.mintB,J,Fe,Pn(B.programId,B.platformId,B.mintB).publicKey,An(B.programId,B.creator,B.mintB).publicKey,I.amountB.lt(w)?I.amountB:w,L,c,u)]}),H.addCustomComputeBudget(b),H.versionBuild({txVersion:g,extInfo:{routes:[{mint:new ve(e),amount:n?h:t,decimal:T.poolInfo[N?"mintA":"mintB"].decimals},{mint:N?se:ce,amount:w,decimal:T.poolInfo[N?"mintB":"mintA"].decimals},{mint:B.mintA,amount:C,decimal:B.mintDecimalsA}],outAmount:C,minOutAmount:L}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new ot(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var O,R,v,z,H,ce;let f=r>0?new M(r).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():r,y=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==y.poolInfo.mintA.address&&e.toString()!==y.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let b=e.toString()===y.poolInfo.mintA.address,g=y.poolInfo[b?"mintB":"mintA"],A=n?await Ne.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new ve(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await Ne.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),k=l;if(k||(k=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(i)})),g.address!==k.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${k.mintB.toBase58()})`);let T=m;if(!T){let se=await this.scope.connection.getAccountInfo(k.platformId);T=Ln.decode(se.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(k.mintA),w=Yt(k.programId).publicKey,x=h.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(O=h.extensions.feeConfig.olderTransferFee.epoch)!=null?O:a==null?void 0:a.epoch)!=null?R:0),maximumFee:BigInt(h.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((z=(v=h.extensions.feeConfig.newerTransferFee.epoch)!=null?v:a==null?void 0:a.epoch)!=null?z:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,B=n?t:A.minAmountOut.amount.raw,K=Ct.buyExactIn({poolInfo:k,amountB:B,protocolFeeRate:k.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:k.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:x,slot:d!=null?d:await this.scope.connection.getSlot()}),I=K.amountA.amount.sub((H=K.amountA.fee)!=null?H:new ot(0)),C=new M(I.toString()),L=new ot(1e4),N=f?new M(L.sub(new ot(f*1e4)).toNumber()/L.toNumber()).clampedTo(0,1):new M(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?A.maxAmountIn.amount:t,clmmAmountOut:B,remainingAccounts:A.remainingAccounts},clmmComputeInfo:A,launchPoolInfo:k,launchAuthProgramId:w,launchMintTransferFeeConfig:x,launchSwapInfo:K,outAmount:K.amountA.amount.sub((ce=K.amountA.fee)!=null?ce:new ot(0)),minOutAmount:new ot(C.mul(N).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new ot(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}){let d=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,p=await this.scope.fetchEpochInfo(),{clmmPoolData:f,clmmComputeAmount:{remainingAccounts:y},launchPoolInfo:b,launchAuthProgramId:g,launchSwapInfo:A,minLaunchOutAmount:k,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),w=this.createTxBuilder(d),x={},B=b.mintProgramFlag===0?Fe:Go,{account:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!K)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let I=b.mintB.equals(Z),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:b.mintB,notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(L&&w.addInstruction(L),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);x[b.mintB.toBase58()]=C,w.addInstruction({instructions:[Zr(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new ve(n),K,C,b.vaultA,b.vaultB,b.mintA,b.mintB,B,Fe,Pn(b.programId,b.platformId,b.mintB).publicKey,An(b.programId,b.creator,b.mintB).publicKey,A.amountA.amount.lt(e)?A.amountA.amount:e,k,r,a)]});let N=b.mintB.toString()===f.poolInfo.mintA.address,O=c.useSOLBalance&&f.poolInfo.mintA.address===Z.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===Z.toBase58(),v;!o||o.equals(new M(0))?v=N?It.add(new ot(1)):Bt.sub(new ot(1)):v=le.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[z,H]=[new ve(f.poolInfo.mintA.address),new ve(f.poolInfo.mintB.address)],[ce,se]=[new ve(f.poolInfo.mintA.programId),new ve(f.poolInfo.mintB.programId)],ae=O?void 0:this.scope.account.getAssociatedTokenAccount(z,ce),ge=R?void 0:this.scope.account.getAssociatedTokenAccount(H,se);if(!ae){let{account:pe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ce,mint:z,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?e:0},associatedOnly:!1,checkCreateATAOwner:u});ae=pe,te&&w.addInstruction(te)}if(!ge){let{account:pe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:se,mint:H,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?0:e},associatedOnly:!1,checkCreateATAOwner:u});ge=pe,te&&w.addInstruction(te)}return x[f.poolInfo.mintA.address]=ae,x[f.poolInfo.mintB.address]=ge,(!ae||!ge)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ae,ownerTokenAccountB:ge}),w.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ae,tokenAccountB:ge},inputMint:new ve(f.poolKeys[N?"mintA":"mintB"].address),amountIn:k,amountOutMin:h,sqrtPriceLimitX64:v,remainingAccounts:y})),w.addCustomComputeBudget(l),w.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:k,decimal:b.mintDecimalsB},{mint:new ve(f.poolKeys[N?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[N?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new ot(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,L,N,O;let l=o>0?new M(o).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(n)}));let d=m.mintB,p=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(d.toString()!==p.poolInfo.mintA.address&&d.toString()!==p.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let f=d.toString()===p.poolInfo.mintA.address,y=p.poolInfo[f?"mintB":"mintA"],b=u;if(!b){let R=await this.scope.connection.getAccountInfo(m.platformId);b=Ln.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),A=Yt(m.programId).publicKey,k=g.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((L=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?L:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((O=(N=g.extensions.feeConfig.newerTransferFee.epoch)!=null?N:i==null?void 0:i.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=Ct.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:k,slot:await this.scope.connection.getSlot()}),h=T.amountB,w=new M(h.toString()),x=new ot(1e4),B=l?new M(x.sub(new ot(l*1e4)).toNumber()/x.toNumber()).clampedTo(0,1):new M(1),K=new ot(w.mul(B).toFixed(0)),I=await Ne.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:K,tokenOut:y,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo()});return{clmmPoolData:p,clmmComputeAmount:I,launchPoolInfo:m,launchAuthProgramId:A,launchMintTransferFeeConfig:k,launchSwapInfo:T,minLaunchOutAmount:K,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=lr,clmm:n=no,cpmm:o=io}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Bi.offsetOf("baseMint"),length:64}}),r=V([F("baseMint"),F("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),c=V([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:po.span}],dataSlice:{offset:po.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:zr.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===ve.default.toString()?Z:e,t=t.toString()===ve.default.toString()?Z:t;let r={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),r[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&r[f.id.toString()]===void 0&&(r[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=Wr(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new ve(y.mintA.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new ve(y.mintB.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(Fe)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(Fe)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Bo({connection:this.scope.connection,mints:Array.from(o).map(y=>new ve(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>q(_({},y),{[b]:q(_({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,k,T,h,w,x,B,K;let m=l===void 0?new ot(0):e.raw.mul(new ot(l.feeBps.toNumber())).div(new ot(1e4)),d=e.raw.sub(m),p=new Re(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(_({},t),{address:bt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(_({},this.computeAmountOut({itemPool:I,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",I.version,I.id.toString(),C.message)}this.logDebug("direct done");for(let[I,C]of Object.entries(o)){let L={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:L,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var ce,se,ae,ge;let z=R===void 0?On:R.data.amountOut.amount.raw.sub((se=(ce=R.data.amountOut.fee)==null?void 0:ce.raw)!=null?se:On),H=v===void 0?On:v.data.amountOut.amount.raw.sub((ge=(ae=v.data.amountOut.fee)==null?void 0:ae.raw)!=null?ge:On);return z.lt(H)?1:-1})[0];if(N===void 0)continue;let O=new Re(Or(L),N.data.amountOut.amount.raw.sub((A=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?A:On));for(let R of C.out)try{let v=this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(q(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new Nt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(k=v.amountOut.fee)==null?void 0:k.raw)!=null?T:On)}).toFixed()),priceImpact:new M(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,R],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Re(N.data.amountOut.amount.token,((x=(w=N.data.amountOut.fee)==null?void 0:w.raw)!=null?x:On).add((K=(B=v.amountOut.fee)==null?void 0:B.raw)!=null?K:On)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:ln(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",R.version,R.id.toString(),v.message)}}return b.filter(I=>(I.allTrade||this.logDebug(`pool ${I.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),I.allTrade)).sort((I,C)=>I.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(On)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:k}=Ne.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(y.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[k],expirationTime:ln(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:r});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ii(q(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ii(q(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Re(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ii(q(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ii(q(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Re(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let i=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};r.size>0&&(await Ve(this.scope.connection,Array.from(r).map(l=>({pubkey:new ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Wa.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Hr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:q(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Ra({programId:new ve(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Eo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:kt({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:q(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Qf,Transaction as $a,TransactionInstruction as jf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zf}from"@solana/spl-token";import Ul from"bn.js";var ht=class extends De{static getPdaPoolId(e,t){return fe([ht.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return fe([ht.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Ul(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let r=n.map(l=>ht.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ht.VERSION_PROJECT.length;l++)a.push(...r.map(m=>ht.getPdaOwnerId(t,m,o,l).publicKey));let c=await rn(e,[...r,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=r[d],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==ht.POOL_LAYOUT.span||b.data.length!==ht.OWNER_LAYOUT.span)continue;let g=ht.POOL_LAYOUT.decode(y.data),A=ht.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(B=>B.debtAmount.gt(new Ul(0))).filter(B=>!B).length!==3,w=i>k&&i<T&&g.status===1,x=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:ht.VERSION_PROJECT[m],openTime:k,endTime:T,canClaim:x,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,K)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:A.tokenInfo[K].debtAmount.add(A.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(ze.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(ze.WSOL.mint),associatedOnly:u.mintAddress.equals(ze.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),r.push(l)}o.addInstruction({instructions:[ht.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let l of e){let m=[];for(let d of l.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(ze.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(ze.WSOL.mint),associatedOnly:d.mintAddress.equals(ze.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[ht.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:i,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return Cs(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new $a().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new $a().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new $a().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=V([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Zf,isSigner:!1,isWritable:!1}],r=Buffer.alloc(o.span);o.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new jf({keys:i,programId:e,data:a})}},on=ht;on.CLAIMED_NUM=3,on.POOL_LAYOUT=V([xe(8),E("bump"),E("status"),P("openTime"),P("endTime"),F("ammId"),Q(V([E("mintDecimals"),F("mintAddress"),F("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),ht.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),on.OWNER_LAYOUT=V([xe(8),E("bump"),E("version"),F("poolId"),F("owner"),P("lpAmount"),Q(V([F("mintAddress"),P("debtAmount"),P("claimedAmount")]),ht.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),on.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qf(e)),on.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},on.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Gi}from"@solana/web3.js";import zl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Jf,TransactionInstruction as Gl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xl}from"@solana/spl-token";var $f=V([E("instruction"),uc("amount")]),Ui=V([E("instruction")]);function ss({programId:s},e){let t=[{pubkey:Xl,isSigner:!1,isWritable:!1},{pubkey:vu,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Ui.span);return Ui.encode({instruction:2},n),new Gl({keys:t,programId:s,data:n})}function Ja(s){let{poolConfig:e,userKeys:t,side:n}=s,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,r=Buffer.alloc(Ui.span);Ui.encode({instruction:2},r);let a=[{pubkey:Xl,isWritable:!1,isSigner:!1},{pubkey:Jf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Gl({programId:e.programId,keys:a,data:r})}var ey={[ni.IDO_PROGRAM_ID_V1.toString()]:1,[ni.IDO_PROGRAM_ID_V2.toString()]:2,[ni.IDO_PROGRAM_ID_V3.toString()]:3,[ni.IDO_PROGRAM_ID_V4.toString()]:4},Xo=class extends De{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i,feePayer:r}){let a=this.createTxBuilder(r),c=ey[t.programId];c||this.logAndCreateError("invalid version",c);let u=ft(t),[l,m]=[!new zl(e.coin).isZero(),!new zl(e.pc).isZero()],d=u.projectInfo.mint.address.equals(Z),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:o});!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&f&&a.addInstruction(f);let y=u.buyInfo.mint.address.equals(Z),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!p&&m&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),m&&g&&a.addInstruction(g),(!p||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[ss({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[ss({programId:new Gi(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[ss({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let A={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:b,ledgerAccount:new Gi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[Ja(q(_({},A),{side:"base"}))]:[],...m?[Ja(q(_({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as ty}from"@solana/web3.js";import{MintLayout as ny,TOKEN_2022_PROGRAM_ID as eu,TOKEN_PROGRAM_ID as tu}from"@solana/spl-token";var Xi=class extends De{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:r,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(r),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Vn.address,Vn),this._mintGroup.official.add(Vn.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?eu.toBase58():tu.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?eu.toBase58():tu.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?eu.toBase58():tu.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Vn;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(_({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new ty(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=ny.decode(r.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:r.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var as=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:r,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new cn(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=we("Raydium"),this.farm=new yi({scope:this,moduleName:"Raydium_Farm"}),this.account=new ai({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ci({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Xi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new qi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Li({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Vi({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new on({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Vo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Xo({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Di({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:r||Date.now()-a,offset:a}})}static async load(e){var l;let t=oy({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new Pr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new as(q(_({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Ar);return this._owner.publicKey}setOwner(e){return this._owner=e?new cn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(ec);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw console.error(Ar),new Error(Ar)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){if(this.cluster==="devnet")return[];let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(o=>q(_({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{as as Raydium};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=raydium.mjs.map