@raydium-io/raydium-sdk-v2 0.2.36-alpha → 0.2.37-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- var Jl=Object.defineProperty,em=Object.defineProperties;var tm=Object.getOwnPropertyDescriptors;var Qi=Object.getOwnPropertySymbols;var yu=Object.prototype.hasOwnProperty,bu=Object.prototype.propertyIsEnumerable;var fu=(s,e,t)=>e in s?Jl(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,V=(s,e)=>{for(var t in e||(e={}))yu.call(e,t)&&fu(s,t,e[t]);if(Qi)for(var t of Qi(e))bu.call(e,t)&&fu(s,t,e[t]);return s},q=(s,e)=>em(s,tm(e));var Ge=(s,e)=>{var t={};for(var n in s)yu.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&Qi)for(var n of Qi(s))e.indexOf(n)<0&&bu.call(s,n)&&(t[n]=s[n]);return t};import{merge as ly}from"lodash";import nc from"axios";import{PublicKey as Au}from"@solana/web3.js";import{get as gu,set as nm}from"lodash";var ds=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}},Pu={},om={};function we(s){let e=gu(Pu,s);if(!e){let t=gu(om,s);e=new ds({name:s,logLevel:t}),nm(Pu,s,e)}return e}import{MINT_SIZE as im,TOKEN_PROGRAM_ID as rm,getTransferFeeConfig as sm,unpackMint as am}from"@solana/spl-token";var ps=we("Raydium_accountInfo_util");async function on(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=V({batchRequest:!1},t),r=fs(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=fs(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ps.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"&&ps.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new Au(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ps.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(s,e,t){let n=await on(s,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(V({},o),{accountInfo:n[i]}))}async function Io({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await _e(s,e.map(c=>({pubkey:gt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<im){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=am(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(V({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||rm,feeConfig:(a=sm(u))!=null?a:void 0})}return o[Au.default.toBase58()]=o[Z.toBase58()],o}import fn from"bn.js";var Bo=9e15,Vn=1e9,ys="0123456789abcdef",$i="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ji="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",bs={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Bo,maxE:Bo,crypto:!1},Tu,wn,be=!0,tr="[DecimalError] ",Fn=tr+"Invalid argument: ",Iu=tr+"Precision limit exceeded",Bu=tr+"crypto unavailable",xu="[object Decimal]",Pt=Math.floor,it=Math.pow,um=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,cm=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,lm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Su=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,rn=1e7,me=7,mm=9007199254740991,dm=$i.length-1,gs=Ji.length-1,G={toStringTag:xu};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=pm(n,Nu(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=Pt((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=Ve(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-Pt(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 Ve(this,new this.constructor(s))};G.dividedToIntegerBy=G.divToInt=function(s){var e=this,t=e.constructor;return oe(Ve(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/or(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=xo(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=xo(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/or(5,s)),o=xo(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,Ve(t.sinh(),t.cosh(),n.precision=s,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var s=this,e=s.constructor,t=s.abs().cmp(1),n=e.precision,o=e.rounding;return t!==-1?t===0?s.isNeg()?dn(e,n,o):new e(0):new e(NaN):s.isZero()?dn(e,n+4,o).times(.5):(e.precision=n+6,e.rounding=1,s=new e(1).minus(s).div(s.plus(1)).sqrt().atan(),e.precision=n,e.rounding=o,s.times(2))};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=Ve(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=dn(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<=gs)return r=dn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=gs)return r=dn(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&&Pt(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?er(l,a+10):vn(s,a),c=Ve(r,n,a,1),zo(c.d,o=m,d))do if(a+=10,r=vn(u,a),n=e?er(l,a+10):vn(s,a),c=Ve(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=Pt(s.e/me),l=Pt(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]=rn-1;--u[o],u[n]+=rn}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=nr(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=Ve(t,s.abs(),0,3,1),e.s*=s.s):e=Ve(t,s,0,n.modulo,1),e=e.times(s),be=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return Ps(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=Pt(m.e/me),n=Pt(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)/rn|0,u[o]%=rn;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=nr(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=Ku(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=ym(n,Nu(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=Pt((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(Ve(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=Ve(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=Pt(l.e/me)+Pt(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%rn|0,e=a/rn|0;i[o]=(i[o]+e)%rn|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=nr(i,t),be?oe(s,m.precision,m.rounding):s};G.toBinary=function(s,e){return As(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:(Ot(s,0,Vn),e===void 0?e=n.rounding:Ot(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=pn(n,!0):(Ot(s,0,Vn),e===void 0?e=o.rounding:Ot(e,0,8),n=oe(new o(n),s+1,e),t=pn(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=pn(o):(Ot(s,0,Vn),e===void 0?e=i.rounding:Ot(e,0,8),n=oe(new i(o),s+o.e+1,e),t=pn(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=Ku(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=Ve(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=Ve(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=Ve(u,n,i,1).minus(p).abs().cmp(Ve(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 As(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:Ot(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=Ve(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 As(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=Pt(s.e/me),e>=s.d.length-1&&(t=u<0?-u:u)<=mm)return o=Cu(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)?Pt(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=Ps(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(Ps(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=pn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Ot(s,1,Vn),e===void 0?e=o.rounding:Ot(e,0,8),n=oe(new o(n),s,e),t=pn(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):(Ot(s,1,Vn),e===void 0?e=n.rounding:Ot(e,0,8)),oe(new n(t),s,e)};G.toString=function(){var s=this,e=s.constructor,t=pn(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=pn(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 Ot(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 ji(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]+=ys.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 pm(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/or(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=xo(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 Ve=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,w,T,h,k,x,B,K,I,C,O,L=n.constructor,N=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new L(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?N*0:N/0);for(c?(p=1,l=n.e-o.e):(c=rn,p=me,l=Pt(n.e/p)-Pt(o.e/p)),C=v.length,K=R.length,g=new L(N),A=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,i==null?(k=i=L.precision,r=L.rounding):a?k=i+(n.e-o.e)+1:k=i,k<0)A.push(1),f=!0;else{if(k=k/p+2|0,m=0,C==1){for(d=0,v=v[0],k++;(m<K||d)&&k--;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,w=R.slice(0,C),T=w.length;T<C;)w[T++]=0;O=v.slice(),O.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,w,C,T),u<0?(h=w[0],C!=T&&(h=h*c+(w[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(v,d,c),b=y.length,T=w.length,u=e(y,w,b,T),u==1&&(d--,t(y,C<b?O:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(w,y,T,c),u==-1&&(T=w.length,u=e(v,w,C,T),u<1&&(d++,t(w,C<T?O:v,T,c))),T=w.length):u===0&&(d++,w=[0]),A[m++]=d,u&&w[0]?w[T++]=R[B]||0:(w=[R[B]],T=1);while((B++<K||w[0]!==void 0)&&k--);f=w[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,Tu=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]==rn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=rn)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 pn(s,e,t){if(!s.isFinite())return Lu(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 nr(s,e){var t=s[0];for(e*=me;t>=10;t/=10)e++;return e}function er(s,e,t){if(e>dm)throw be=!0,t&&(s.precision=t),Error(Iu);return oe(new s($i),e,1,!0)}function dn(s,e,t){if(e>gs)throw Error(Iu);return oe(new s(Ji),e,t,!0)}function Ku(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 Cu(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),ku(i.d,r)&&(o=!0)),t=Pt(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ku(e.d,r)}return be=!0,i}function wu(s){return s.d[s.d.length-1]&1}function Ru(s,e,t){for(var n,o,i=new s(e[0]),r=0;++r<e.length;){if(o=new s(e[r]),!o.s){i=o;break}n=i.cmp(o),(n===t||n===0&&i.s===t)&&(i=o)}return i}function Ps(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(Ve(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,w=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=w):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=er(g,l+2,w).times(i+""),y=vn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=w,e==null?oe(y,w,A,be=!0):y;for(m=y,c=r=y=Ve(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(Ve(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(er(g,l+2,w).times(i+""))),c=Ve(c,new g(p),l,1),e==null)if(zo(c.d,l-f,A,a))g.precision=l+=f,u=r=y=Ve(m.minus(1),m.plus(1),l,1),d=oe(y.times(y),l,1),o=a=1;else return oe(c,g.precision=w,A,be=!0);else return g.precision=w,c;c=u,o+=2}}function Lu(s){return String(s.s*s.s/0)}function Zi(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 fm(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Su.test(e))return Zi(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(cm.test(e))t=16,e=e.toLowerCase();else if(um.test(e))t=2;else if(lm.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=Cu(n,new n(t),i,i*2)),u=ji(e,t,rn),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=nr(u,l),s.d=u,be=!1,r&&(s=Ve(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?it(2,c):Yo.pow(2,c))),be=!0,s)}function ym(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:xo(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/or(5,t)),e=xo(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 xo(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=Ve(a.times(c),new s(e++*e++),l,1),a=o?n.plus(r):n.minus(r),n=Ve(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 or(s,e){for(var t=s;--e;)t*=s;return t}function Nu(s,e){var t,n=e.s<0,o=dn(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=wu(t)?n?2:3:n?4:1,e;wn=wu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function As(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(Ot(t,1,Vn),n===void 0?n=p.rounding:Ot(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Lu(s);else{for(l=pn(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=ji(pn(d),10,o),d.e=d.d.length),m=ji(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=Ve(s,d,t,n,0,o),m=s.d,i=s.e,u=Tu),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+=ys.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=ji(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=ys.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 ku(s,e){if(s.length>e)return s.length=e,!0}function bm(s){return new this(s).abs()}function gm(s){return new this(s).acos()}function Pm(s){return new this(s).acosh()}function Am(s,e){return new this(s).plus(e)}function wm(s){return new this(s).asin()}function km(s){return new this(s).asinh()}function hm(s){return new this(s).atan()}function Tm(s){return new this(s).atanh()}function Im(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=dn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?dn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=dn(this,i,1).times(.5),t.s=s.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Ve(s,e,i,1)),e=dn(this,i,1),this.precision=n,this.rounding=o,t=s.s<0?t.minus(e):t.plus(e)):t=this.atan(Ve(s,e,i,1)),t}function Bm(s){return new this(s).cbrt()}function xm(s){return oe(s=new this(s),s.e+1,2)}function Sm(s,e,t){return new this(s).clamp(e,t)}function Km(s){if(!s||typeof s!="object")throw Error(tr+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,Vn,"rounding",0,8,"toExpNeg",-Bo,0,"toExpPos",0,Bo,"maxE",0,Bo,"minE",-Bo,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=bs[t]),(n=s[t])!==void 0)if(Pt(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]=bs[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(Bu);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function Cm(s){return new this(s).cos()}function Rm(s){return new this(s).cosh()}function Ou(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,hu(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}if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Zi(u,i.toString())}if(c==="string")return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Su.test(i)?Zi(u,i):fm(u,i);if(c==="bigint")return i<0?(i=-i,u.s=-1):u.s=1,Zi(u,i.toString());throw Error(Fn+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=Km,o.clone=Ou,o.isDecimal=hu,o.abs=bm,o.acos=gm,o.acosh=Pm,o.add=Am,o.asin=wm,o.asinh=km,o.atan=hm,o.atanh=Tm,o.atan2=Im,o.cbrt=Bm,o.ceil=xm,o.clamp=Sm,o.cos=Cm,o.cosh=Rm,o.div=Lm,o.exp=Nm,o.floor=Om,o.hypot=Mm,o.ln=vm,o.log=Fm,o.log10=_m,o.log2=Vm,o.max=Em,o.min=Wm,o.mod=Dm,o.mul=qm,o.pow=Um,o.random=Gm,o.round=Xm,o.sign=zm,o.sin=Ym,o.sinh=Hm,o.sqrt=Qm,o.sub=jm,o.sum=Zm,o.tan=$m,o.tanh=Jm,o.trunc=ed,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 Lm(s,e){return new this(s).div(e)}function Nm(s){return new this(s).exp()}function Om(s){return oe(s=new this(s),s.e+1,3)}function Mm(){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 hu(s){return s instanceof Yo||s&&s.toStringTag===xu||!1}function vm(s){return new this(s).ln()}function Fm(s,e){return new this(s).log(e)}function Vm(s){return new this(s).log(2)}function _m(s){return new this(s).log(10)}function Em(){return Ru(this,arguments,-1)}function Wm(){return Ru(this,arguments,1)}function Dm(s,e){return new this(s).mod(e)}function qm(s,e){return new this(s).mul(e)}function Um(s,e){return new this(s).pow(e)}function Gm(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:Ot(s,1,Vn),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(Bu);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 Xm(s){return oe(s=new this(s),s.e+1,this.rounding)}function zm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function Ym(s){return new this(s).sin()}function Hm(s){return new this(s).sinh()}function Qm(s){return new this(s).sqrt()}function jm(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 $m(s){return new this(s).tan()}function Jm(s){return new this(s).tanh()}function ed(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=Ou(bs);$i=new Yo($i);Ji=new Yo(Ji);var M=Yo;import ud from"big.js";import sr from"bn.js";import td from"toformat";var nd=td,Ho=nd;import rr from"big.js";import id from"bn.js";import rd from"decimal.js-light";import Qo from"bn.js";var Mu=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>=Mu||s<=-Mu)&&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 ir=we("module/fraction"),ws=Ho(rr),jo=Ho(rd),sd={[0]:jo.ROUND_DOWN,[1]:jo.ROUND_HALF_UP,[2]:jo.ROUND_UP},ad={[0]:rr.roundDown,[1]:rr.roundHalfUp,[2]:rr.roundUp},Ke=class{constructor(e,t=new id(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)||ir.logWithError(`${e} is not an integer.`),e<=0&&ir.logWithError(`${e} is not positive.`),jo.set({precision:e+1,rounding:sd[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)||ir.logWithError(`${e} is not an integer.`),e<0&&ir.logWithError(`${e} is negative.`),ws.DP=e,ws.RM=ad[n]||1,new ws(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var cd=we("Raydium_amount"),vu=Ho(ud);function ld(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")):cd.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 sr(0),a=ks.pow(new sr(t.decimals));if(o)r=ne(n);else{let c=new sr(0),u=new sr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=ld(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 vu.DP=this.token.decimals,new vu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as md}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";var _n={chainId:101,address:md.default.toBase58(),programId:Fu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},At={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fu.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 xs}from"@solana/web3.js";import{PublicKey as Xe,SystemProgram as Vu,SYSVAR_RENT_PUBKEY as dd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as pd}from"@solana/spl-token";function S({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var hs=[S({pubkey:pd,isWritable:!1}),S({pubkey:Vu.programId,isWritable:!1}),S({pubkey:dd,isWritable:!1})];function Ts({publicKey:s,transformSol:e}){let t=Is(s.toString());if(t instanceof Xe)return e&&t.equals(ut)?Z:t;if(e&&t.toString()===ut.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 Is(s){try{return new Xe(s)}catch{return s}}var ar=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),En=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),pt=new Xe("SysvarRent111111111111111111111111111111111"),_u=new Xe("SysvarC1ock11111111111111111111111111111111"),sn=new Xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),fd=new Xe("Sysvar1nstructions1111111111111111111111111"),Bs=Vu.programId,Jy=new Xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),eb=new Xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),tb=new Xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),nb=new Xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),ob=new Xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),ib=new Xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),rb=new Xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),sb=new Xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ab=new Xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),ub=new Xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),cb=new Xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Xe("So11111111111111111111111111111111111111112"),ut=Xe.default;function gt(s){return Ts({publicKey:s,transformSol:!0})}var Ss=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===ut.toBase58()||e instanceof xs&&ut.equals(e)){this.decimals=At.decimals,this.symbol=At.symbol,this.name=At.name,this.mint=new xs(At.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?xs.default:Ts({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ze=Ss;ze.WSOL=new Ss(q(V({},At),{mint:At.address}));var Ks=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},ur=Ks;ur.SOL=new Ks(_n);import yd from"bn.js";var Eu=new Ke(new yd(100)),ct=class extends Ke{toSignificant(e=5,t,n){return this.mul(Eu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eu).toFixed(e,t,n)}};var bd=we("Raydium_price"),Mt=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(Cs(n.decimals),Cs(o.decimals))}get raw(){return new Ke(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&bd.logWithError("mul token not equals");let n=super.mul(t);return new Mt({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 vt=new fn(0),Wu=new fn(1),$b=new fn(2),Jb=new fn(3),eg=new fn(5),ks=new fn(10),tg=new fn(100),ng=new fn(1e3),og=new fn(1e4);function Cs(s){return ks.pow(ne(s))}function cr(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 fn(1)).div(t)}function lr(s,e,t){return s.mul(e).div(t)}function fs(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var an=class{constructor(e){this._owner=e}get publicKey(){return an.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return an.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return an.isKeyPair(this._owner)}get isPublicKey(){return an.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!an.isKeyPair(e)}};import{PublicKey as hd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";import{ComputeBudgetProgram as Du,Keypair as Uu,PublicKey as gd,Transaction as Gu,TransactionMessage as Pd,VersionedTransaction as Xu}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 Ad}from"@solana/spl-token";var qu=we("Raydium_txUtil"),zu=1644;function mr(s){let e=[],t=[];return s.microLamports&&(e.push(Du.setComputeUnitPrice({microLamports:s.microLamports})),t.push(X.SetComputeUnitPrice)),s.units&&(e.push(Du.setComputeUnitLimit({units:s.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function So(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 dr(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 Rs(s,e){s.length<1&&qu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&qu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Gu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<zu}catch{return!1}}function pe(s,e){let[t,n]=gd.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function $o({instructions:s,payer:e,signers:t}){return Rs(s,[e,...t])}function Jo({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uu.generate().publicKey.toString()}){let i=new Pd({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xu(i).serialize()).toString("base64").length<zu}catch{return!1}}var wd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),kd=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof Xu&&(e=wd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function eo(s){let e=[];return s.forEach(t=>{t instanceof Gu&&(t.recentBlockhash||(t.recentBlockhash=Ad.toBase58()),t.feePayer||(t.feePayer=Uu.generate().publicKey)),e.push(kd(t))}),console.log("simulate tx string:",e),e}function ee(s,e,t){return pe([s.toBuffer(),(t!=null?t:Td).toBuffer(),e.toBuffer()],new hd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as re}from"@solana/web3.js";var Yu=new re("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Hu=new re("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Qu=new re("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ei=new re("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ig=new re("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ju=new re("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ls=new re("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),pr=new re("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bg=new re("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Zu=new re("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),to=new re("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ti=new re("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),fr=new re("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),no=new re("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xg=new re("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),$u=new re("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Id=new re("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Bd=new re("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),xd=new re("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Sd=new re("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),oo=new re("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Ju=new re("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sg=new re("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),yr=new re("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),br=new re("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),rt=new re("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Kg=new re("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Cg=new re("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Rg=new re("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Lg=new re("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ng=new re("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ni={IDO_PROGRAM_ID_V1:Id,IDO_PROGRAM_ID_V2:Bd,IDO_PROGRAM_ID_V3:xd,IDO_PROGRAM_ID_V4:Sd};var kn={OPEN_BOOK_PROGRAM:new re("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new re("Ray1111111111111111111111111111111111111111"),AMM_V4:new re("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new re("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new re("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new re("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new re("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new re("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new re("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new re("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new re("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new re("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:re.default,Router:new re("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new re("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new re("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new re("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new re("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new re("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new re("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new re("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new re("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new re("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new re("Ray1111111111111111111111111111111111111111")};import We from"bn.js";var yn=1e4;function Le(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(V({},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===yn){let c=new We(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new We(yn)),new We(yn-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(yn)),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(yn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function un(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 io(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 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,a=Wn(s.mul(new We(o.transferFeeBasisPoints)),new We(yn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function Os(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===yn){let a=new We(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new We(yn)),new We(yn-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(yn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Ms,AddressLookupTableAccount as Ro}from"@solana/web3.js";async function vs({connection:s,address:e,cluster:t="mainnet"}){let n=await on(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Ms(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new Ro({key:a,state:Ro.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Co[a.toString()]=c:Ko[a.toString()]=c}return o}var Ko={},Fs=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Ko[e])return Ko;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Ko[e]=new Ro({key:t,state:Ro.deserialize(n.data)})),Ko},Co={},Vs=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Co[e])return Co;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Co[e]=new Ro({key:t,state:Ro.deserialize(n.data)})),Co};import{PublicKey as Lo,sendAndConfirmTransaction as _s,SystemProgram as Kd,Transaction as oi,TransactionMessage as ii,VersionedTransaction as ri}from"@solana/web3.js";import Cd from"axios";var gr=2e3,Pr=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 Cd.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}=mr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Kd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Lo(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!==Lo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(V({},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 So(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),eo([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 So(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],w=0;for(let T of r){if(++w,w<=p)continue;let h=await _s(this.connection,T,this.signers.find(k=>k.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));eo(A);let w=await this.signAllTransactions(A);if(m){let T=0,h=[],k=async()=>{if(!w[T])return;let x=await this.connection.sendRawTransaction(w[T].serialize(),{skipPreflight:y});h.push({txId:x,status:"sent",signedTx:w[T]}),d==null||d([...h]),T++;let B=!1,K=null,I=null,C=O=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let L=h.findIndex(N=>N.txId===x);if(L>-1){if(h[L].status==="error"||h[L].status==="success")return;h[L].status=O.err?"error":"success"}d==null||d([...h]),O.err||k()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var O;if(B){clearInterval(K);return}try{let L=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});L&&(B=!0,clearInterval(K),C({err:((O=L.meta)==null?void 0:O.err)||null}),console.log("tx status from getTransaction:",x))}catch(L){B=!0,clearInterval(K),console.error("getTransaction timeout:",L,x)}},gr)),I=this.connection.onSignature(x,O=>{if(B){this.connection.removeSignatureListener(I);return}B=!0,C(O)},"confirmed"),this.connection.getSignatureStatus(x)};return await k(),{txIds:h.map(x=>x.txId),signedTxs:w}}else{let T=[];for(let h=0;h<w.length;h+=1){let k=await this.connection.sendRawTransaction(w[h].serialize(),{skipPreflight:y});T.push(k)}return{txIds:T,signedTxs:w}}}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=V(V({},this.cluster==="devnet"?await Vs(this.connection):await Fs(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Lo(b));let l=await vs({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Lo.default.toBase58():i!=null?i:await So(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:w}=b||{};if(eo([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await dr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let k of h)try{k.sign(this.signers)}catch{}return{txId:w?"":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),eo(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 dr(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=[],w=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,k=null,x=null,B=K=>{k!==null&&clearInterval(k),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||w()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var K;if(h){clearInterval(k);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(k),B({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(k),console.error("getTransaction timeout:",I,T)}},gr)),x=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,B(K)},"confirmed"),this.connection.getSignatureStatus(T)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let w=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(w)}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?mr(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(V({},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(w=>w.isSigner).map(w=>w.pubkey.toString())).flat()).values()].map(A=>new Lo(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(w=>w.isSigner).map(w=>w.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||{},w=g!=null?g:await So(this.connection,this.blockhashCommitment);if(a.forEach(async(h,k)=>{h.recentBlockhash=w,c[k].length&&h.sign(...c[k])}),eo(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,k=[];for(let x of a){if(++h,h<=b){k.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});k.push(B)}return{txIds:k,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)),k=[...a.slice(0,b),...h];if(f){let x=0,B=[],K=async()=>{if(!k[x])return;x<b&&(B.push({txId:"",status:"success",signedTx:k[x]}),y==null||y([...B]),x++,K());let I=await this.connection.sendRawTransaction(k[x].serialize(),{skipPreflight:A});B.push({txId:I,status:"sent",signedTx:k[x]}),y==null||y([...B]),x++;let C=!1,O=null,L=null,N=R=>{O!==null&&clearInterval(O),L!==null&&this.connection.removeSignatureListener(L);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&&(O=setInterval(async()=>{var R;if(C){clearInterval(O);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(O),N({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(O),console.error("getTransaction timeout:",v,I)}},gr)),L=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(L);return}C=!0,N(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:B.map(I=>I.txId),signedTxs:k}}else{let x=[];for(let B=0;B<k.length;B+=1){let K=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:A});x.push(K)}return{txIds:x,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var w;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[]}=A,r=Ge(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=V(V({},this.cluster==="devnet"?await Vs(this.connection):await Fs(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let T of c)a[T]===void 0&&u.push(new Lo(T));let l=await vs({connection:this.connection,address:u});for(let[T,h]of Object.entries(l))a[T]=h;let m=t?mr(t):{instructions:[],instructionTypes:[]},d=await So(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(V({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],k=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&(Jo({instructions:k,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(k=>k.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(k=>p[k]).filter(k=>k!==void 0);if(t&&Jo({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let k=new ii({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ri(k))}else{let k=new ii({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ri(k))}y.push(h)}return(w=this.owner)!=null&&w.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:k,skipTxCount:x=0,recentBlockHash:B,skipPreflight:K=!0}=T||{};if(f.map(async(C,O)=>{y[O].length&&C.sign(y[O]),B&&(C.message.recentBlockhash=B)}),eo(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,O=[];for(let L of f){if(++C,C<=x){console.log("skip tx: ",C),O.push("tx skipped");continue}let N=await this.connection.sendTransaction(L,{skipPreflight:K});await dr(this.connection,N),O.push(N)}return{txIds:O,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)),O=[...f.slice(0,x),...C];if(h){let L=0,N=[],R=async()=>{if(!O[L])return;if(L<x){N.push({txId:"",status:"success",signedTx:O[L]}),k==null||k([...N]),L++,R();return}let v=await this.connection.sendTransaction(O[L],{skipPreflight:K});N.push({txId:v,status:"sent",signedTx:O[L]}),k==null||k([...N]),L++;let z=!1,H=null,ce=null,ae=ue=>{H!==null&&clearInterval(H),ce!==null&&this.connection.removeSignatureListener(ce);let ge=N.findIndex(fe=>fe.txId===v);if(ge>-1){if(N[ge].status==="error"||N[ge].status==="success")return;N[ge].status=ue.err?"error":"success"}k==null||k([...N]),ue.err||R()};this.loopMultiTxStatus&&(H=setInterval(async()=>{var ue;if(z){clearInterval(H);return}try{let ge=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});ge&&(z=!0,clearInterval(H),ae({err:((ue=ge.meta)==null?void 0:ue.err)||null}),console.log("tx status from getTransaction:",v))}catch(ge){z=!0,clearInterval(H),console.error("getTransaction timeout:",ge,v)}},gr)),ce=this.connection.onSignature(v,ue=>{if(z){this.connection.removeSignatureListener(ce);return}z=!0,ae(ue)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:O}}else{let L=[];for(let N=0;N<O.length;N+=1){let R=await this.connection.sendTransaction(O[N],{skipPreflight:K});L.push(R)}return{txIds:L,signedTxs:O}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};import{PublicKey as Rd}from"@solana/web3.js";import Ld from"bn.js";function Nd(s){return typeof s=="object"&&s!==null&&![ze,Re,Rd,Ke,Ld,Mt,ct].some(e=>typeof e=="object"&&s instanceof e)}function ft(s){return typeof s=="string"?Is(s):Array.isArray(s)?s.map(e=>ft(e)):Nd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,ft(t)])):s}import Od from"bn.js";var Ft=new Od(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"},ec=q(V({},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 tc="ray_tab_hash",Es="ray_req_hash",Md=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem(tc);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem(tc,s)),s},Ar=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(Es)||"[]").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(V({},t),{time:Date.now(),session:Md()}));try{localStorage.setItem(Es,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(Es,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return Ar(q(V({},t),{logCount:s,removeLastLog:!0}))}};var wr=we("Raydium_Api"),Ws=new Map,Ds=new Map;var kr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=nc.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?ec.BASE_HOST:lt.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return wr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(wr.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&&Ar({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),wr.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&&Ar({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),wr.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_POSITION_LINE||lt.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await nc.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(V({},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=>Ws.has(r)?(n.push(Ws.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=>{Ws.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&&gt(t).toBase58(),n&&n!=="undefined"?gt(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=Ds.get(this.cluster))!=null&&t.length)return Ds.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 Ds.set(this.cluster,e.data.data),e.data.data}};var hr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",oc="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Kr,SystemProgram as mp}from"@solana/web3.js";import{AccountLayout as Mo,createAssociatedTokenAccountIdempotentInstruction as $s,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as dp}from"@solana/spl-token";var qs=(...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 Pr({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(qs(e))}logInfo(...e){this.logger.info(qs(e))}logAndCreateError(...e){let t=qs(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as rp,SystemProgram as sp}from"@solana/web3.js";import ap from"bn.js";import{createCloseAccountInstruction as up,createInitializeAccountInstruction as cp,createTransferInstruction as lp,TOKEN_PROGRAM_ID as Oo}from"@solana/spl-token";import{Keypair as tp,PublicKey as Pc}from"@solana/web3.js";import np from"bn.js";import{TOKEN_PROGRAM_ID as op}from"@solana/spl-token";function vd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function Us(s,...e){if(!vd(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 Gs(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 ic(s,e){Us(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Ir=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),cn=(s,e)=>s<<32-e|s>>>e;var uA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Fd(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function Xs(s){return typeof s=="string"&&(s=Fd(s)),Us(s),s}var Tr=class{clone(){return this._cloneInto()}},cA={}.toString;function rc(s){let e=n=>s().update(Xs(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Vd(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 sc=(s,e,t)=>s&e^~s&t,ac=(s,e,t)=>s&e^s&t^e&t,Br=class extends Tr{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=Ir(this.buffer)}update(e){Gs(this);let{view:t,buffer:n,blockLen:o}=this;e=Xs(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=Ir(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){Gs(this),ic(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;Vd(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=Ir(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 _d=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),zs=class extends Br{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=cn(d,7)^cn(d,18)^d>>>3,y=cn(p,17)^cn(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=cn(a,6)^cn(a,11)^cn(a,25),p=l+d+sc(a,c,u)+_d[m]+qn[m]|0,y=(cn(n,2)^cn(n,13)^cn(n,22))+ac(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 uc=rc(()=>new zs);import{PublicKey as Zd}from"@solana/web3.js";import pc,{isBN as fc}from"bn.js";import{bits as Ed,BitStructure as PA,blob as Wd,Blob as AA,cstr as wA,f32 as kA,f32be as hA,f64 as TA,f64be as IA,greedy as BA,Layout as Dd,ns64 as xA,ns64be as SA,nu64 as qd,nu64be as KA,offset as Ud,s16 as CA,s16be as RA,s24 as LA,s24be as NA,s32 as Gd,s32be as OA,s40 as MA,s40be as vA,s48 as FA,s48be as VA,s8 as _A,seq as Xd,struct as EA,Structure as zd,u16 as Yd,u16be as WA,u24 as DA,u24be as qA,u32 as Hd,u32be as UA,u40 as GA,u40be as XA,u48 as zA,u48be as YA,u8 as Qd,UInt as jd,union as HA,Union as QA,unionLayoutDiscriminator as jA,utf8 as ZA}from"@solana/buffer-layout";var xr=Dd,cc=zd;var Ys=jd;var lc=Qd,Ut=Yd;var si=Hd;var mc=qd;var qe=Gd;var dc=Xd;var xe=Wd;var Hs=Ed,Qs=Ud;var so=class extends xr{constructor(t,n,o){super(t,o);this.blob=xe(t),this.signed=n}decode(t,n=0){let o=new pc(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 pc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Sr=class extends xr{constructor(t){super(8,t);this._lower=Hs(si(),!1),this._upper=Hs(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 V(V({},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 Ys(1,s)}function wt(s){return new Ys(4,s)}function P(s){return new so(8,!1,s)}function se(s){return new so(16,!1,s)}function yc(s){return new so(1,!0,s)}function No(s){return new so(8,!0,s)}function bc(s){return new so(16,!0,s)}var ao=class extends xr{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 ao(xe(32),e=>new Zd(e),e=>e.toBuffer(),s)}function Ye(s){return new ao(lc(),$d,Jd,s)}function $d(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function Jd(s){return s?1:0}function gc(s,e){let t=si("length"),n=_([t,Q(s,Qs(t,-t.span),"values")]);return new ao(n,({values:o})=>o,o=>({values:o}),e)}function ep(s){let e=si("length"),t=_([e,xe(Qs(e,-e.span),"data")]);return new ao(t,({data:n})=>n,n=>({data:n}),s)}function Vt(s){return new ao(ep(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var js=class extends cc{decode(e,t){return super.decode(e,t)}};function _(s,e,t){return new js(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:fc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=fc(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 dc(s,o,t)}var uo=_([F("mint"),F("owner"),P("amount"),wt("delegateOption"),F("delegate"),E("state"),wt("isNativeOption"),P("isNative"),P("delegatedAmount"),wt("closeAuthorityOption"),F("closeAuthority")]);var Pw=we("Raydium_Util");function Ac({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=uo.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:Pc.default,amount:new np(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function $e({fromPublicKey:s,programId:e=op,assignSeed:t}){let n=t?btoa(t).slice(0,32):tp.generate().publicKey.toBase58().slice(0,32);return{publicKey:ip(s,n,e),seed:n}}function ip(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=uc(n);return new Pc(o)}function Zs(s){let{mint:e,tokenAccount:t,owner:n,programId:o=Oo}=s;return cp(t,e,n,o)}function hn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Oo}=s;return up(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(uo.span,n),c=ne(t).add(new ap(a)),u=$e({fromPublicKey:o,programId:Oo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[sp.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:uo.span,programId:Oo}),Zs({mint:new rp(At.address),tokenAccount:u.publicKey,owner:i,programId:Oo})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:r?[]:[X.CloseAccount],endInstructions:r?[]:[hn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function wc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Oo}){return lp(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=V(V({},{}),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:dp},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ac({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 Kr(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Kr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(d))).sort((w,T)=>w.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 w=$s(o.payer||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(w),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&Mo.decode(h.data).mint.equals(n)&&Mo.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(w),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(wc({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 w=$e({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Mo.span),h=mp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:w.seed,newAccountPubkey:w.publicKey,lamports:T+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:Mo.span,programId:m});return f.instructions.push(h,Zs({mint:n,tokenAccount:w.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:w.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:w.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 $s(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 Kr(Z).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return V({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=$s(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)&&Mo.decode(y.data).mint.equals(i)&&Mo.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 Kr(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 V({tokenAccount:u},l.AllTxData)}};import{PublicKey as Ce,SystemProgram as Cp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Fc}from"@solana/spl-token";import{PublicKey as ra}from"@solana/web3.js";var Js=_([E("instruction")]),ea=_([E("instruction")]),pp=_([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),se("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),fp=_([P("state"),P("nonce"),F("lpVault"),F("rewardVault"),F(),F(),P(),P(),P("totalReward"),se("perShareReward"),P("lastSlot"),P("perSlotReward")]),yp=_([P("state"),P("nonce"),F("lpVault"),F("rewardVaultA"),P("totalRewardA"),se("perShareRewardA"),P("perSlotRewardA"),E("option"),F("rewardVaultB"),xe(7),P("totalRewardB"),se("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),F()]),bp=_([P(),P("state"),P("nonce"),P("validRewardTokenNum"),se("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(pp,5,"rewardInfos"),F("creator"),F(),Q(P(),32,"padding")]),gp=new Proxy(fp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),Pp=new Proxy(yp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},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)}}),Cr=new Proxy(bp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(V({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),Ap=_([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),ta=_([E("instruction"),P("nonce"),Q(Ap,5,"rewardTimeInfo")]),na=_([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),oa=_([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),jw=_([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),ia=_([P("state"),F("id"),F("owner"),P("deposited"),Q(se(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),Zw=_([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),kc=_([P("state"),F("id"),F("owner"),P("deposited"),Q(se(),2,"rewardDebts"),Q(P(),17)]),hc=_([P(),P("state"),F("id"),F("owner"),P("deposited"),Q(se(),5,"rewardDebts"),Q(P(),16)]),Gt=_([E("instruction"),P("amount")]),wp=_([F("mint"),F("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),yc("digitShift"),Q(E(),7,"reserved1"),Q(P(),7,"reserved2")]),kp=_([xe(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(E(),32,"reserved1"),Q(wp,4,"votingMints"),No("timeOffset"),E("bump"),Q(E(),7,"reserved2"),Q(P(),11,"reserved3")]),hp=_([No("startTime"),No("endTime"),E("kind"),Q(E(),15,"reserved")]),Tp=_([Q(hp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),E("votingMintConfigIdx"),Q(E(),29,"reserved")]),Ip=_([xe(8),F("voterAuthority"),F("registrar"),Q(Tp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),Q(E(),94,"reserved")]);import{NATIVE_MINT as sk}from"@solana/spl-token";var ak=we("Raydium_farm_config"),Tc=new ra("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ic=new ra("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var uk=new ra("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Bc={3:ia,5:kc,6:hc},sa=s=>[3,4,5,6].indexOf(s)!==-1,aa=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={[Yu.toString()]:3,[Hu.toString()]:4,[Qu.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 Kc,SYSVAR_CLOCK_PUBKEY as li,SYSVAR_RENT_PUBKEY as Sp,TransactionInstruction as Jt}from"@solana/web3.js";import Cc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Wk,createAssociatedTokenAccountIdempotentInstruction as Dk,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import Bp from"bn.js";var xp=we("Raydium.farm.util");function ui({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=pe([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}=pe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var xc=({programId:s,poolId:e})=>pe([e.toBuffer()],s);function Sc(s){return{isSet:new Bp(1),rewardPerSecond:ne(s.perSecond),rewardOpenTime:ne(s.openTime),rewardEndTime:ne(s.endTime),rewardType:ne(Xn[s.rewardType])}}function ua(s){return ne(s.endTime).sub(ne(s.openTime)).mul(ne(s.perSecond))}function ci(s){let e=Bc[s];return e||xp.logWithError("invalid version",s),e}var Kp=we("Raydium_farm_instruction"),$k={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||Kp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Js.span);Js.encode({instruction:r},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:i,isWritable:!1}),S({pubkey:Kc.programId,isWritable:!1}),S({pubkey:Sp,isWritable:!1})];return{instruction:new Jt({programId:o,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Rc(s){var n;let e=Buffer.alloc(ta.span);ta.encode({instruction:0,nonce:new Cc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...hs,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:ut}),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 Lc(s){let e=Buffer.alloc(ea.span);ea.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 ca({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(na.span);na.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 la({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(oa.span);oa.encode({instruction:4,isSet:new Cc(1),rewardPerSecond:ne(o.perSecond),rewardOpenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardType:ne(Xn[o.rewardType])},i);let r=[...hs,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(Gt.span);Gt.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(Gt.span);Gt.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 Nc(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=_([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(Gt.span);Gt.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 Oc(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(Gt.span);Gt.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 Mc(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(Gt.span);Gt.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 vc(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(Gt.span);Gt.encode({instruction:1,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:Kc.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(ut)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ua(q(V({},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:Tc,lockVault:(B=a==null?void 0:a.vault)!=null?B:Ic},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(Cr.span);l.addInstruction({instructions:[Cp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Cr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=xc({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(Sc(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 O=K.mint.equals(ut)?new Ce(At.address):K.mint;A.push({rewardMint:O,rewardVault:ui({programId:u.programId,poolId:d.publicKey,mint:O,type:"rewardVault"}),userRewardToken:I})}let{account:w,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),w||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:k}=Rc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:w,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:w,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(ut)?new Ce(At.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:ut,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:[ca({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(ut)?new Ce(At.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:ut,{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 w=ca({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[w],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(ut)?new Ce(At.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:[la({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(ut)?new Ce(At.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=la({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(V({},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),sa(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}),w=this.createTxBuilder(i);w.addCustomComputeBudget(l),w.addTipInstruction(m);let T={};for(let N of this.scope.account.tokenAccounts)if(a){let R=ee(this.scope.ownerPubKey,N.mint,N.programId).publicKey;N.publicKey&&R.equals(N.publicKey)&&(T[N.mint.toString()]=N.publicKey)}else T[N.mint.toString()]=N.publicKey;let h=g.lpMint,k=T[h.address];k||this.logAndCreateError("you don't have any lp","lp zero",T);let x=[];for(let N of d){let R=r&&N.mint.address===Z.toString(),v=T[N.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:N.mint.programId,mint:new Ce(N.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&&w.addInstruction(H)}T[N.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:N,instructionType:R}=mi({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[N],instructionTypes:[R]})}let I=aa({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});I&&this.logAndCreateError(I);let C={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:k,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(N=>new Ce(N))},O=f===6?vc(C):f===5?Mc(C):Oc(C),L={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return w.addInstruction({instructions:[O],instructionTypes:[L[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];sa(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:O,instructionType:L}=mi({id:new Ce(y.id),programId:new Ce(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[O],instructionTypes:[L]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,w=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:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!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(),O=g[I.mint.address];if(!O){let{account:L,instructionParams:N}=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});O=L,N&&b.addInstruction(N)}g[I.mint.address]=O,h.push(O)}let k=aa({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});k&&this.logAndCreateError(k);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?Nc(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=>gt(b.mint.address).equals(gt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:ut,m=this.createTxBuilder(r),d;if(t.equals(ut)||t.equals(Ce.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ua(q(V({},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:[Fc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=Lc({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(V({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,w=Zt[y],T=b.address,h=n&&T===Z.toString(),k=m[T];if(!k){let{account:O,instructionParams:L}=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});k=O,L&&l.addInstruction(L)}m[T.toString()]=k;let x=[];for(let O of g){let L=n&&O.mint.address===Z.toString(),N=m[O.mint.address];if(!N)if(L){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Ce(O.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:i,checkCreateATAOwner:r});N=R,v&&l.addInstruction(v)}else{let R=new Ce(O.mint.address);N=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Fc(this.scope.ownerPubKey,N,this.scope.ownerPubKey,R)]})}m[O.mint.address]=N,x.push(N)}let B=p[A],K={amount:vt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:B,lpAccount:k,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(O=>new Ce(O))},I=w===6?di(K):w===5?pi(K):fi(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as et}from"@solana/web3.js";import{AccountLayout as Af,NATIVE_MINT as Xr,TOKEN_PROGRAM_ID as Hn}from"@solana/spl-token";import{Keypair as vr,PublicKey as Y,SystemProgram as Sn,TransactionInstruction as yt}from"@solana/web3.js";import ka 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 Ep from"bn.js";import en from"bn.js";var He=new en(0),Xt=new en(1),In=new en(-1),st=new en(1).shln(64),Rr=new en(1).shln(128),bi=st.sub(Xt),gi=64,Vc=Rr.subn(1),kt=-443636,Bt=-kt,xt=new en("4295048016"),St=new en("79226673521066979257578248091"),Lr=new en("4295048017"),Nr=new en("79226673521066979257578248090"),_c=16,Ec="59543866431248",Wc="184467440737095516",Dc="15793534762490258745",Or=new en(10).pow(new en(6));var qc={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:[]},Ch=new en("18446744073700000000");import Pe from"bn.js";function Mr(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function ma(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function da(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 Uc(s,e){return Pi(s,e)?null:ma(s,e)}function Gc(s,e){return Pi(s,e)?null:da(s,e)}var Mh=Buffer.from("amm_config","utf8"),pa=Buffer.from("pool","utf8"),fa=Buffer.from("pool_vault","utf8"),Lp=Buffer.from("pool_reward_vault","utf8"),Xc=Buffer.from("position","utf8"),Np=Buffer.from("tick_array","utf8"),Op=Buffer.from("operation","utf8"),Mp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),vp=Buffer.from("observation","utf8");function zc(s,e,t,n){return pe([pa,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function ya(s,e,t){return pe([fa,e.toBuffer(),t.toBuffer()],s)}function Yc(s,e,t){return pe([Lp,e.toBuffer(),t.toBuffer()],s)}function ke(s,e,t){return pe([Np,e.toBuffer(),Mr(t)],s)}function ln(s,e,t,n){return pe([Xc,e.toBuffer(),Mr(t),Mr(n)],s)}function Kt(s,e){return pe([Xc,e.toBuffer()],s)}function Bn(s){return pe([Buffer.from("metadata","utf8"),sn.toBuffer(),s.toBuffer()],sn)}function Ai(s){return pe([Op],s)}function Je(s,e){return pe([Mp,e.toBuffer()],s)}function Hc(s,e){return pe([vp,e.toBuffer()],s)}var Qc=Buffer.from("locked_position","utf8");function ba(s,e){return pe([Qc,e.toBuffer()],s)}function vo(s,e){return pe([Qc,e.toBuffer()],s)}var Fp=Buffer.from("support_mint","utf8");function ga(s,e){return pe([Fp,e.toBuffer()],s)}import{PublicKey as zt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as jc}from"@solana/spl-token";import Ue from"bn.js";import bn from"bn.js";var wi=class{static getfeeGrowthInside(e,t,n){let o=new bn(0),i=new bn(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 bn(0),a=new bn(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,st),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,st),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,st),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,st),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,st),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,st),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 bn(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 bn(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 bn(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 bn(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,w;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 bn(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,r,!0),Le(new bn(new M(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}};var Vp=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(Vp/2));for(let p=0;p<l.length;p++){let{publicKey:f}=ke(t,n,l[p]);c.push(f)}let m=(await on(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(V({},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=at-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<at;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=ke(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<at;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=ke(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>Bt)return!1;let n=$.getTickArrayStartIndexByTick(kt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return at*e}};var Pa=14,xn=class{static maxTickInTickarrayBitmap(e){return e*at*co}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*at,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=Uc(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=Gc(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(Bt<=t)throw Error(`extensionTickBoundary check error: ${Bt}, ${t}`);if(n<=kt)throw Error(`extensionTickBoundary check error: ${n}, ${kt}`);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(co-1-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:i}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=Pi(512,c)?null:da(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=co-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}=lo.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}=ke(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=lo.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}=ke(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}=ke(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<kt||t>Bt)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(V({},m),{perSecond:ye.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new zt(d)});if(p.tokenMint.equals(zt.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,st),w=p.rewardTotalEmissioned.add(A);r.push(q(V({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,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>Bt&&(t=Te.getArrayStartIndex(Bt,e)+Te.tickCount(e)),n<kt&&(n=Te.getArrayStartIndex(kt,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)*co}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await _e(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=$c.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}=ke(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let r=await _e(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(V({},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(Kt(p,d).publicKey);let l=await on(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Fo.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:w,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:w,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(V({},B),{pendingReward:new Ue(0)})),leverage:h,tokenFeeAmountA:new Ue(0),tokenFeeAmountB:new Ue(0)}];let k=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}`]=k,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(i){let d=Object.values(m),p=await on(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}`,w=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[w].toString()],k=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],x=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:K}=await wi.GetPositionFees(y,g,k,x),I=await wi.GetPositionRewards(y,g,k,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 O;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?xt.add(new Ue(1)):St.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((O=p.fee)!=null?O:He),u,c),w=Le(y,d,o,!1),T=le.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new M(1).div(T),k=y.mul(new Ue(Math.floor((1-r)*1e10))).div(new Ue(1e10)),x=Le(k,d,o,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(h).sub(B).abs(),I=B,C=new ct(new M(K).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:w,minAmountOut:x,expirationTime:un(p.expirationTime,w.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(V({},u),{mint:u.address,isToken2022:u.programId===jc.toBase58()})),new ze(q(V({},l),{mint:l.address,isToken2022:l.programId===jc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:w,priceImpact:T,fee:h,remainingAccounts:k,executionPriceX64:x}=Ne.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new zt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),B=q(V({},f),{amount:new Re(m,f.amount),fee:f.fee===void 0?void 0:new Re(m,f.fee)}),K=q(V({},y),{amount:new Re(d,y.amount),fee:y.fee===void 0?void 0:new Re(d,y.fee)}),I=q(V({},b),{amount:new Re(d,b.amount),fee:b.fee===void 0?void 0:new Re(d,b.fee)}),C=new Mt({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)}),O=new Mt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:w.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new Re(m,h);return{allTrade:p,realAmountIn:B,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:O,priceImpact:T,fee:L,remainingAccounts:k,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?St.sub(new Ue(1)):xt.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),w=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),k=c?e.currentPrice:new M(1).div(e.currentPrice),x=new M(w).sub(k).abs(),B=k,K=new ct(new M(x).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:un(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,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[gt(e.mintA.address).toString()],d=o[gt(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:w}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),k=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(w.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(k.add(x)),I=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),C=3600*24*365,O=e.rewardDefaultInfos.map(L=>{var v,z;let N=L.mint.decimals,R=o[L.mint.address];return c<((v=L.startTime)!=null?v:0)||c>((z=L.endTime)!=null?z:0)||!L.perSecond||!R||N===void 0?0:new M(R.value).mul(new M(L.perSecond).mul(C)).div(new M(10).pow(N)).mul(B).mul(100).toNumber()});return{feeApr:I,rewardsApr:O,apr:I+O.reduce((L,N)=>L+N,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 w=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?w: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,w;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),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new zt(c.id));(await on(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=mo.decode(c.data))});let r=t.map(c=>Je(new zt(c.programId),new zt(c.id)).publicKey),a=await Ne.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(V({},c),{[u.id]:q(V({},n[u.id]),{id:new zt(u.id),version:6,programId:new zt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(V({},u.config),{id:new zt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:Je(new zt(u.programId),new zt(u.id)).publicKey,exBitmapInfo:a[Je(new zt(u.programId),new zt(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 Aa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Zc(s){return q(V({},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:Aa,week:Aa,month:Aa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(V({},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(Xt)),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(Xt)).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(Rr).sub(t).mod(Rr)}};function mt(s,e){return wa(s.mul(e),64,256)}function _p(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function wa(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,Xt,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,Xt,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<kt||e>Bt)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=Vc.div(n)),n}static getTickFromPrice(e,t,n){return le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(St)||e.lt(xt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Pe(t-64),o=_p(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<_c;){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(Ec)),d=wa(m.sub(new Pe(Wc)),64,128).toNumber(),p=wa(m.add(new Pe(Dc)),64,128).toNumber();return d==p?d:le.getSqrtPriceX64FromTick(p).lte(e)?p:d}},po=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=po.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),Xt,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),st):ye.mulDivFloor(n,t.sub(e),st)}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,Xt,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,w,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,(w=e.mintB.extensions)==null?void 0:w.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:un(f.expirationTime,y.expirationTime)}}},lo=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?xt.add(Xt):St.sub(Xt)),r){if(f.lt(xt))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(St))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,w=n[p],T=0,h=!r&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(He)&&!g.sqrtPriceX64.eq(f);){T>10;let k={};k.sqrtPriceStartX64=g.sqrtPriceX64;let x=$.nextInitTick(w,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:O}=ke(e,t,A);K=O,w=n[A];try{B=$.firstInitializedTick(w,r)}catch{throw Error("not found next tick info")}}k.tickNext=B.tick,k.initialized=B.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),k.tickNext<kt?k.tickNext=kt:k.tickNext>Bt&&(k.tickNext=Bt),k.sqrtPriceNextX64=le.getSqrtPriceX64FromTick(k.tickNext);let I;if(r&&k.sqrtPriceNextX64.lt(f)||!r&&k.sqrtPriceNextX64.gt(f)?I=f:I=k.sqrtPriceNextX64,[g.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=lo.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(k.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),g.amountCalculated=g.amountCalculated.sub(k.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(k.amountOut),g.amountCalculated=g.amountCalculated.add(k.amountIn.add(k.feeAmount))),g.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let C=B.liquidityNet;r&&(C=C.mul(In)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=k.tickNext!=g.tick&&!r&&w.startTickIndex===k.tickNext,g.tick=r?k.tickNext-1:k.tickNext}else if(g.sqrtPriceX64!=k.sqrtPriceStartX64){let C=le.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&w.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:k,isExist:x}=Te.nextInitializedTickArray(g.tick,l,r,o,i);x&&p!==k&&(g.accounts.push(ke(e,t,k).publicKey),p=k)}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,Or.sub(new Pe(i.toString())),Or);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),Or.sub(new Pe(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var at=60,co=512,$=class{static getTickArrayAddressByTick(e,t,n,o){let i=$.getTickArrayStartIndexByTick(n,o),{publicKey:r}=ke(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>=at)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*at,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*at,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*at:e+t*at}static mergeTickArrayBitmap(e){let t=new Ep(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*at));return[...$.searchLowBitFromStart(e,t,r-1,i,n),...$.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,co,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=$.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=ke(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<kt||e>Bt}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<at;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=at-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<at;){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=po.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=po.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=_([xe(8),E("bump"),Ut("index"),F(""),wt("protocolFeeRate"),wt("tradeFeeRate"),Ut("tickSpacing"),Q(P(),8,"")]),Wp=_([wt("blockTimestamp"),No("tickCumulative"),Q(P(),4)]),el=_([xe(8),Ye("initialized"),P("recentEpoch"),Ut("observationIndex"),F("poolId"),Q(Wp,100,"observations"),Q(P(),4)]),Dp=_([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),se("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),se("rewardGrowthGlobalX64")]),mo=_([xe(8),E("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Ut("tickSpacing"),se("liquidity"),se("sqrtPriceX64"),qe("tickCurrent"),wt(),se("feeGrowthGlobalX64A"),se("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),se("swapInAmountTokenA"),se("swapOutAmountTokenB"),se("swapInAmountTokenB"),se("swapOutAmountTokenA"),E("status"),Q(E(),7,""),Q(Dp,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")]),qp=_([se("growthInsideLastX64"),P("rewardAmountOwed")]),Fo=_([xe(8),E("bump"),F("nftMint"),F("poolId"),qe("tickLower"),qe("tickUpper"),se("liquidity"),se("feeGrowthInsideLastX64A"),se("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(qp,3,"rewardInfos"),Q(P(),8,"")]),UT=_([xe(8),E("bump"),F("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),se("liquidity"),se("feeGrowthInsideLastX64A"),se("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(se(),3,"rewardGrowthInside"),Q(P(),8,"")]),Up=_([qe("tick"),bc("liquidityNet"),se("liquidityGross"),se("feeGrowthOutsideX64A"),se("feeGrowthOutsideX64B"),Q(se(),3,"rewardGrowthsOutsideX64"),Q(wt(),13,"")]),ki=_([xe(8),F("poolId"),qe("startTickIndex"),Q(Up,at,"ticks"),E("initializedTickCount"),Q(E(),115,"")]),tl=_([xe(329),Q(F(),100,"whitelistMints")]),$c=_([xe(8),F("poolId"),Q(Q(P(),8),Pa,"positiveTickArrayBitmap"),Q(Q(P(),8),Pa,"negativeTickArrayBitmap")]),GT=_([P(),E("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(P(),8)]),nl=_([xe(8),E("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),P("recentEpoch"),Q(P(),8)]);el.span;var ol=we("Raydium_Clmm"),Yt={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]},il=[188,37,179,131,82,150,84,73],rl=[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=_([se("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(w=>({pubkey:w,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:He},g);let A=Buffer.from([...Yt.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}=zc(t,r,u,l),{publicKey:d}=Hc(t,m),{publicKey:p}=ya(t,m,u),{publicKey:f}=ya(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,w,T,h,k,x,B,K,I){let C=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),O=[...I?[{pubkey:I,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: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:sn,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...O],N=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:k,amountMaxA:x,amountMaxB:B,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},N);let R=Buffer.from([...Yt.openPosition,...N]);return new yt({keys:L,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h,k,x,B,K){let I=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],O=[{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],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:k,amountMaxB:x,withMetadata:B==="create",baseFlag:!1,optionBaseFlag:0},L);let N=Buffer.from([...Yt.openPositionWithTokenEx,...L]);return new yt({keys:O,programId:e,data:N})}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=vr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=ke(p,f,b),{publicKey:w}=ke(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:k}=Kt(p,y),{publicKey:x}=ln(p,f,o,i),B=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,w,k,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,w,k,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:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,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=vr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=ke(p,f,b),{publicKey:w}=ke(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:k}=Kt(p,y),{publicKey:x}=ln(p,f,o,i),B=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,w,k,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,w,k,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:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,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,w,T,h,k,x,B,K,I){let C=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),O=[...I?[{pubkey:I,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: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:sn,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...O],N=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ka(0),amountMaxA:x==="MintA"?B:K,amountMaxB:x==="MintA"?K:B,withMetadata:k==="create",baseFlag:x==="MintA",optionBaseFlag:1},N);let R=Buffer.from([...Yt.openPosition,...N]);return new yt({keys:L,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h,k,x,B,K){let I=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],O=[{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],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:new ka(0),amountMaxA:k==="MintA"?x:B,amountMaxB:k==="MintA"?B:x,withMetadata:h==="create",baseFlag:k==="MintA",optionBaseFlag:1},L);let N=Buffer.from([...Yt.openPositionWithTokenEx,...L]);return new yt({keys:O,programId:e,data:N})}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=vr.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}=ke(f,y,b),{publicKey:w}=ke(f,y,g),{publicKey:T}=m?ee(n.wallet,d,je):ee(n.wallet,d,Oe),{publicKey:h}=Bn(d),{publicKey:k}=Kt(f,d),{publicKey:x}=ln(f,y,o,i),B=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,x,A,w,k,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,w,k,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:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:x},instructions:[B],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=_([]),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([...Yt.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}=Kt(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 w=_([se("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],k=Buffer.alloc(w.span);w.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},k);let x=Buffer.from([...Yt.increaseLiquidity,...k]);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}=ke(u,l,m),{publicKey:f}=ke(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Kt(u,n.nftMint),{publicKey:g}=ln(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}=ke(u,l,m),{publicKey:f}=ke(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Kt(u,n.nftMint),{publicKey:g}=ln(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 w=_([se("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],k=Buffer.alloc(w.span);w.encode({liquidity:new ka(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},k);let x=Buffer.from([...Yt.increaseLiquidity,...k]);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,w){let T=_([se("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...w?[{pubkey:w,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()],k=[{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:ar,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([...Yt.decreaseLiquidity,...x]);return new yt({keys:k,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}=ke(l,m,d),{publicKey:y}=ke(l,m,p),{publicKey:b}=u?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,c),{publicKey:g}=Kt(l,n.nftMint),{publicKey:A}=ln(l,m,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new Y(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new Y(e.rewardDefaultInfos[k].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),w,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=_([P("amount"),P("otherAmountThreshold"),se("sqrtPriceLimitX64"),Ye("isBaseInput")]),w=[...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:ar,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let k=Buffer.from([...Yt.swap,...h]);return new yt({keys:T,programId:e,data:k})}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=_([P("openTime"),P("endTime"),se("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([...Yt.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=Yc(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=_([E("rewardIndex"),se("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([...Yt.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)&&ol.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=_([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:ar,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Yt.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)&&ol.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=vr.generate();u.push(g),l=g.publicKey}let m=a?ee(i,r,je).publicKey:ee(i,r,Oe).publicKey,{publicKey:d}=Kt(n,r),p=vo(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:sn,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=_([Ye("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let w=Buffer.from([...il,...A]);return new yt({keys:b,programId:e,data:w})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ee(o,i,Oe),{publicKey:a}=Kt(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:ba(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(il)})}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}=ke(t,n,o),{publicKey:a}=ke(t,n,i),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Oe),{publicKey:u}=Kt(t,e.ownerPosition.nftMint),{publicKey:l}=ln(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:ba(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(rl)})}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:w,rewardAccounts:T,exTickArrayBitmap:h}){let k=[...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:w,isSigner:!1,isWritable:!1},...k];return new yt({keys:x,programId:e,data:Buffer.from(rl)})}};var Gp=_([wt("mintAuthorityOption"),F("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),wt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as mI}from"@solana/web3.js";import{MintLayout as pI,TOKEN_PROGRAM_ID as yI}from"@solana/spl-token";var Fr=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:gt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var ht=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Ge(i,["address","programId","decimals"]);return V({chainId:101,address:gt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(V({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(V({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(V({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import sl from"bn.js";var ha=new sl(25),Vr=new sl(1e4);import{PublicKey as tt,SystemProgram as zp,SYSVAR_RENT_PUBKEY as MI,TransactionInstruction as Yn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Yp,TOKEN_PROGRAM_ID as fo}from"@solana/spl-token";import _r from"bn.js";var Ta=_([E("instruction"),P("amountIn"),P("minAmountOut")]),Ia=_([E("instruction"),P("maxAmountIn"),P("amountOut")]),RI=_([E("instruction"),E("nonce")]),Xp=_([E("instruction"),E("nonce"),P("startTime")]),Bi=_([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"),se("swapBaseInAmount"),se("swapQuoteOutAmount"),P("swapBase2QuoteFee"),se("swapQuoteInAmount"),se("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")]),LI=_([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"),se("swapBaseInAmount"),se("swapQuoteOutAmount"),se("swapQuoteInAmount"),se("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")]),Ba=_([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),xa=_([E("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var al=_([P("fee")]);var Er=we("Raydium_liquidity_instruction");function ul(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=no}=s,u=Buffer.alloc(Ba.span);Ba.encode({instruction:3,baseAmountIn:ne(o),quoteAmountIn:ne(i),otherAmountMin:ne(a),fixedSide:r==="base"?vt:Wu},u);let l=[S({pubkey:fo,isWritable:!1}),S({pubkey:new tt(e.id)}),S({pubkey:new tt(t.authority),isWritable:!1}),S({pubkey:new tt(t.openOrders),isWritable:!1}),S({pubkey:new tt(t.targetOrders)}),S({pubkey:new tt(e.lpMint.address)}),S({pubkey:new tt(t.vault.A)}),S({pubkey:new tt(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new tt(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 tt(t.marketEventQueue),isWritable:!1})),new Yn({programId:new tt(e.programId),keys:l,data:u})}function Sa(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=no}=s,c=ft(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(xa.span);xa.encode({instruction:4,lpAmount:ne(o),baseAmountMin:ne(i),quoteAmountMin:ne(r)},l);let m=[S({pubkey:fo,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 Ka({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:w,coinAmount:T,pcAmount:h,ammConfigId:k,feeDestinationId:x}){let B=_([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:fo,isSigner:!1,isWritable:!1},{pubkey:Yp,isSigner:!1,isWritable:!1},{pubkey:zp.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:k,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:w,coinAmount:T,pcAmount:h},I),{instruction:new Yn({keys:K,programId:s,data:I}),instructionType:X.AmmV4CreatePool}}function Hp({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=no},i){let r=ft(s),a=Buffer.alloc(Ta.span);Ta.encode({instruction:9,amountIn:ne(t),minAmountOut:ne(n)},a);let c=[S({pubkey:fo,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 Qp({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=no},i){let r=ft(s),a=Buffer.alloc(Ia.span);Ia.encode({instruction:11,maxAmountIn:ne(t),amountOut:ne(n)},a);let c=[S({pubkey:fo,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 jp(s,e,t,n,o,i,r,a,c,u){let l=_([E("instructionId"),P("amountIn"),P("minAmountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:16,amountIn:c,minAmountOut:u},m);let d=[{pubkey:fo,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=_([E("instructionId"),P("maxAmountIn"),P("amountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:17,maxAmountIn:c,amountOut:u},m);let d=[{pubkey:fo,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 Wr(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4){if(r==="in")return jp(new tt(e.programId),new tt(e.id),new tt(e.authority),new tt(e.vault.A),new tt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new _r(o.toString()),new _r(i.toString()));if(r==="out")return Zp(new tt(e.programId),new tt(e.id),new tt(e.authority),new tt(e.vault.A),new tt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new _r(o.toString()),new _r(i.toString()));Er.logWithError("invalid params","params",s)}throw Er.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function Dr(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 Hp(q(V({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Qp(q(V({},a),{maxAmountIn:o,amountOut:i}),t);Er.logWithError("invalid params","params",s)}throw Er.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var bo=5e4,$p=_([P("x"),P("y"),P("price")]),Jp=_([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q($p,bo,"DataElement")]);function ef(s,e){return[0,bo-2]}function tf(s){return[0,bo-2]}function nf(s){return[0,bo-2]}function of(s,e,t){let[n,o]=ef(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>=bo-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 Ca(s,e,t){let[n,o,i]=of(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 yo(s,e,t){return e*s.multiplier/t}function cl(s,e,t){return e*t/s.multiplier}function rf(s,e){let[t,n]=tf(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>bo-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 sf(s,e){let[t,n]=nf(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=bo-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 ll(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=rf(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 af(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=sf(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 uf(s,e){let t=ll(s,e,0,!1);return t[3]?t[0]:0}function ml(s,e,t,n){let o=Ca(s,e,t),i=yo(s,e,o),r=yo(s,t,o),a=yo(s,n,o),c=!0,[u,l,m,d]=ll(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return cl(s,p,o)}}function dl(s,e,t,n){let o=Ca(s,e,t),i=yo(s,e,o),r=yo(s,t,o),a=yo(s,n,o),c=!1,[u,l,m,d]=af(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return cl(s,p,o)}}function cf(s){let e=Jp.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 pl(s,e,t,n){let o=uf(s,yo(s,e,Ca(s,e,t)))/s.multiplier;return n?o:1/o}var xi=class{constructor({connection:e,modelDataPubKey:t=no}){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=cf(e==null?void 0:e.data))}}};import{PublicKey as df}from"@solana/web3.js";import dB from"bn.js";import{TOKEN_PROGRAM_ID as pf}from"@solana/spl-token";import{PublicKey as lf}from"@solana/web3.js";var mf=we("Raydium_liquidity_serum");function fl({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=lf.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw mf.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 qr({programId:s}){let{publicKey:e}=pe([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function go({name:s,programId:e,marketId:t}){let{publicKey:n}=pe([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function ff({programId:s,marketId:e}){let{publicKey:t}=pe([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function La({programId:s}){return pe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function Na({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=go({name:"amm_associated_seed",programId:a,marketId:t}),l=go({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=La({programId:a}),p=go({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=go({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=go({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=ff({programId:a,marketId:t}),g=go({name:"target_associated_seed",programId:a,marketId:t}),A=go({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=fl({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:w,lookupTableAccount:df.default,configId:qr({programId:a})}}var Ra={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Ur=s=>{let e={},t=pf.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:ht({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:ht({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:Ra,week:Ra,month:Ra,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:qr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:ht({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 Pl}from"@solana/spl-token";import{SystemProgram as Po,SYSVAR_RENT_PUBKEY as bf,Transaction as yl,TransactionInstruction as gf}from"@solana/web3.js";import{createInitializeAccountInstruction as bl,TOKEN_PROGRAM_ID as gl}from"@solana/spl-token";function yf(s="accountFlags"){let e=new Sr(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 Oa=_([xe(5),yf("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=_([E("version"),wt("instruction"),P("baseLotSize"),P("quoteLotSize"),Ut("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:bf,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 gf({keys:n,programId:s,data:o})}async function Gr({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new yl,o=await s.getMinimumBalanceForRentExemption(165);n.add(Po.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:gl}),Po.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:gl}),bl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),bl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Po.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(Oa.span),space:Oa.span,programId:t.programId}));let i=new yl;return i.add(Po.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}),Po.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}),Po.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}),Po.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`}),w=$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`}),k=$e({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-baseVault`}),x=$e({fromPublicKey:y,programId:Pl,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:O}=I(),L=new Ki(Math.round(10**e.decimals*n)),N=new Ki(Math.round(n*10**t.decimals*o));if(L.eq(vt))throw Error("lot size is too small");if(N.eq(vt))throw Error("tick size or lot size is too small");let R=await Gr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:k,quoteVault:x,vaultOwner:C,requestQueue:A,eventQueue:w,bids:T,asks:h,feeRateBps:B,quoteDustThreshold:K,vaultSignerNonce:O,baseLotSize:L,quoteLotSize:N,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:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.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:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.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=Fr(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=vt;r.isZero()||(d=m==="base"?cr(r.mul(u),c):cr(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=cr(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new ct(new Ze(1)).add(o),y=new ct(new Ze(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Re(a,d),w=new Re(a,b),T=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:A,maxAnotherAmount:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[i.token,r.token],w=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!w&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new et(n.lpMint.address)}),k=[g,A],x=[w,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"?(k.reverse(),x.reverse(),B.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,O]=k,[L,N]=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:L,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ce}=J,ae=Ge(J,["tokenAccount"]);H.addInstruction(ae);let Se=await f.handleTokenAccount({side:"in",amount:v,mint:O.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ue}=Se,ge=Ge(Se,["tokenAccount"]);H.addInstruction(ge);let Me=await f.handleTokenAccount({side:"out",amount:0,mint:new et(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:fe}=Me,te=Ge(Me,["tokenAccount"]);return H.addInstruction(te),H.addInstruction({instructions:[ul({poolInfo:n,poolKeys:z,userKeys:{baseTokenAccount:ce,quoteTokenAccount:ue,lpTokenAccount:fe,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 et(n.mintA.address),new et(n.mintB.address),new et(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 w=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:k,checkCreateATAOwner:x}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),O=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:w,bypassAssociatedCheck:k,checkCreateATAOwner:x}),{tokenAccount:B}=O,K=Ge(O,["tokenAccount"]);h.addInstruction(K);let L=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:k,checkCreateATAOwner:x}),{tokenAccount:I}=L,C=Ge(L,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Sa({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 w=A[t.lpMint.address];if(w===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(),k=t.mintB.address===ze.WSOL.mint.toString(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new et(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 et(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,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 et(r.programId),poolId:new et(r.id),owner:this.scope.ownerPubKey,version:z}),ce,ae=await this.scope.connection.getAccountInfo(H);if(ae&&(ce=ci(z).decode(ae.data)),z!==6&&!ce){let{instruction:Me,instructionType:he}=mi({id:new et(r.id),programId:new et(r.programId),version:z,ledger:H,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Me],instructionTypes:[he]})}let ue=[];for(let Me of r.rewardInfos){let he=Me.mint.address===ze.WSOL.mint.toString();if(A[Me.mint.address])ue.push(A[Me.mint.address]);else{let{account:bt,instructionParams:Nt}=await this.scope.account.getOrCreateTokenAccount({mint:new et(Me.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});bt||this.logAndCreateError("farm reward account not found:",Me.mint.address),Nt&&g.addInstruction(Nt),ue.push(bt)}}let ge=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],fe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ge,lpAccount:w,rewardAccounts:ue},te=Zt[r.programId],J=te===6?di(fe):te===5?pi(fe):fi(fe),Se={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[J],instructionTypes:[Se[te]]})}let C=await this.getAmmPoolKeys(t.id),O=Sa({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:w,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[O],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[L,N]=t.mintA.address===n.mintA.address?[x,K]:[K,x],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Be.openPositionFromBaseInstructions(q(V({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:L,tokenAccountB:N},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 N;let A=u.feePayer||((N=this.scope.owner)==null?void 0:N.publicKey),w=u.useSOLBalance&&o.mint.equals(Xr),T=u.useSOLBalance&&i.mint.equals(Xr),h=this.createTxBuilder(g),{account:k,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:A,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!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||{}),k===void 0||B===void 0)throw Error("you don't has some token account");let I=Na({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:O,instructionType:L}=Ka(q(V({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:B,userLpVault:ee(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[O],instructionTypes:[L]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=pr,marketProgram:n=ju,feeDestinationId:o=$u,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:w,txTipConfig:T,feePayer:h}){var Yi,Hi,To;let k=this.scope.ownerPubKey,x=m.feePayer||((Yi=this.scope.owner)==null?void 0:Yi.publicKey),B=m.useSOLBalance&&r.mint.equals(Xr),K=m.useSOLBalance&&a.mint.equals(Xr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-market`}),O=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-request`}),L=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-event`}),N=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-bids`}),R=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-asks`}),v=$e({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-baseVault`}),z=$e({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-quoteVault`}),H=0,ce=new Ze(100);function ae(){let It=new Ze(0);for(;;)try{return{vaultOwner:et.createProgramAddressSync([C.publicKey.toBuffer(),It.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:It}}catch{if(It.iaddn(1),It.gt(new Ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:ue,vaultSignerNonce:ge}=ae(),fe=new Ze(Math.round(10**r.decimals*b)),te=new Ze(Math.round(b*10**a.decimals*g));if(fe.eq(vt))throw Error("lot size is too small");if(te.eq(vt))throw Error("tick size or lot size is too small");let J=await Gr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ue,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:z,requestQueue:O,eventQueue:L,bids:N,asks:R,feeRateBps:H,quoteDustThreshold:ce,vaultSignerNonce:ge,baseLotSize:fe,quoteLotSize:te,lowestFeeMarket:d}}),Se=this.createTxBuilder(h);Se.addInstruction({instructions:J[0].transaction.instructions,signers:J[0].signer});for await(let It of J.slice(1,J.length))Se.addInstruction({instructions:It.transaction.instructions,signers:It.signer,instructionTypes:It.instructionTypes});let{account:Me,instructionParams:he}=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(he||{});let{account:bt,instructionParams:Nt}=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(Nt||{}),Me===void 0)throw Error("you don't has base token account");if(bt===void 0)throw Error("you don't has quote token account");let ot=Na({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Xi={programId:t,ammId:ot.id,ammAuthority:ot.authority,ammOpenOrders:ot.openOrders,lpMint:ot.lpMint,coinMint:ot.baseMint,pcMint:ot.quoteMint,coinVault:ot.baseVault,pcVault:ot.quoteVault,withdrawQueue:ot.withdrawQueue,ammTargetOrders:ot.targetOrders,poolTempLp:ot.lpVault,marketProgramId:ot.marketProgramId,marketId:ot.marketId,ammConfigId:ot.configId,feeDestinationId:o},{instruction:zi,instructionType:ho}=Ka(q(V({},Xi),{userWallet:this.scope.ownerPubKey,userCoinVault:Me,userPcVault:bt,userLpVault:ee(this.scope.ownerPubKey,ot.lpMint,i).publicKey,nonce:ot.nonce,openTime:l,coinAmount:c,pcAmount:u}));Se.addInstruction({instructions:[zi],instructionTypes:[ho]});let jt=B||K?[((Hi=he==null?void 0:he.instructions)==null?void 0:Hi[0])||((To=Nt==null?void 0:Nt.instructions)==null?void 0:To[0])].filter(It=>!!It):void 0;return A===0?Se.sizeCheckBuildV0({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:O.publicKey,eventQueue:L.publicKey,bids:N.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new et(r.mint),quoteMint:new et(a.mint)},Xi)}):Se.sizeCheckBuild({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:O.publicKey,eventQueue:L.publicKey,bids:N.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new et(r.mint),quoteMint:new et(a.mint)},Xi)})}async getCreatePoolFee({programId:t}){let n=qr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return al.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,w;if(A)w=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let L=pl(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?w=new M(1e6).div(L*1e6):w=new M(L*1e6).div(1e6)}let T=n,h=new Ze(0),k=new Ze(0);if(!T.isZero())if(A){k=Wn(T.mul(ha),Vr);let L=T.sub(k),N=f.add(L);h=y.mul(L).div(N)}else{k=T.mul(new Ze(2)).div(new Ze(1e4));let L=T.sub(k);p==="quote"?h=new Ze(ml(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.toNumber())):h=new Ze(dl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.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(k).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new M(h.toString()).div(10**g).div(new M(T.sub(k).toString()).div(10**b)));let C=w.sub(I).div(w).mul(100);return{amountOut:B,minAmountOut:K,currentPrice:w,executionPrice:I,priceImpact:C,fee:k}}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(Vr).div(Vr.sub(ha))}let w=new Ze(new M(g.toString()).mul(1+r).toFixed(0)),T=g,h=w;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 k=null;!g.isZero()&&!A.isZero()&&(k=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 ${k.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(k).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:k,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],w=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new et(g.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:f});p.addInstruction(k||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:w,associatedOnly:f});let{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new et(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?Wr({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):Dr({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 _e(this.scope.connection,t.map(l=>({pubkey:new et(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(V({},d),{programId:m.accountInfo.owner}),r.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,r.map(l=>({pubkey:new et(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(Af.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(V({},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=Ur({[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 Ct from"bn.js";import{AccountLayout as Al,createAssociatedTokenAccountIdempotentInstruction as wl,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 Ct(new j(o.address).toBuffer()).gt(new Ct(new j(i.address).toBuffer()))?[i,o,new M(1).div(a)]:[o,i,a],A=le.priceToSqrtPriceX64(g,y.decimals,b.decimals),w=[],T=[];y.programId===Qn.toBase58()&&T.push(ga(t,new j(y.address)).publicKey),b.programId===Qn.toBase58()&&T.push(ga(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((B,K)=>{B&&w.push(T[K])});let k=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:w});return f.addInstruction(k),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(V({},k.address),{observationId:k.address.observationId.toBase58(),exBitmapAccount:k.address.exBitmapAccount.toBase58(),programId:t.toString(),id:k.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:k.address.mintAVault.toString(),B:k.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:V({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.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},qc),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),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),k=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&&(w=K),A.addInstruction(I||{});let{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(O||{}),(!w||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:w==null?void 0:w.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let L=t||await this.getClmmPoolKeys(e.id),N=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:L,ownerInfo:q(V({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(N),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:V({},N.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),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),k=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&&(w=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:k||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(w===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),O=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(O),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:O.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(),w=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:k,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(g=k),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:w,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});w&&(y=w),f.addInstruction(T||{});let{account:h,instructionParams:k}=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(k||{}),!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 L;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,w,{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:k,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});w=k,x&&y.addInstruction(x);let B=[];for(let N of t.rewardDefaultInfos){let R=i.useSOLBalance&&N.mint.address===Z.toString(),v;if(N.mint.address===t.mintA.address)v=A;else if(N.mint.address===t.mintB.address)v=w;else{let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(N.mint.programId),mint:new j(N.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&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(L=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:L.owner.equals(Qn),C=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:w,rewardAccounts:B},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let O=V({},C.address);if(i.closePosition){let N=await Be.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:N.instructions,endInstructionTypes:N.instructionTypes}),O=V(V({},O),N.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:O}})}async lockPosition(e){var f;let{programId:t=ti,authProgramId:n=fr,poolProgramId:o=to,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=fr,clmmProgram:o=to,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=Fo.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),w=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:k,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=k,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:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});h=B,K&&y.addInstruction(K);let I={},C=[];for(let ue of f.rewardInfos){let ge=a.useSOLBalance&&ue.mint.address===Z.toString(),fe=I[ue.mint.address];if(!fe){let{account:te,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ue.mint.programId),mint:new j(ue.mint.address),notUseTokenAccount:ge,owner:this.scope.ownerPubKey,skipCloseAccount:!ge,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ge?!1:c});fe=te,J&&y.addInstruction(J)}I[ue.mint.address]=fe,C.push(fe)}let O=vo(t,r.lockNftMint).publicKey,L=ee(this.scope.ownerPubKey,r.lockNftMint,Ri).publicKey,N=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=ke(new j(f.programId),r.poolId,N),{publicKey:z}=ke(new j(f.programId),r.poolId,R),{publicKey:H}=ln(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),ce=[];for(let ue=0;ue<f.rewardInfos.length;ue++)ce.push({poolRewardVault:new j(f.rewardInfos[ue].vault),ownerRewardVault:C[ue],rewardMint:new j(f.rewardInfos[ue].mint.address)});let ae=await Be.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:O,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:L,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:[ae],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 Ct(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 Ct(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),w=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=V(V({},d),w.address),m.addInstruction(w)}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 Ct(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 Ct(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=V(V({},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=V(V({},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(),w=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=g?xt.add(new Ct(1)):St.sub(new Ct(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 k;if(!k){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=B,K&&b.addInstruction(K)}(!h||!k)&&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:k,mintAUseSOLBalance:A,mintBUseSOLBalance:w,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:k},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(),w=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=n.toString()===e.mintB.address?xt.add(new Ct(1)):St.sub(new Ct(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 k;if(!k){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=B,K&&b.addInstruction(K)}(!h||!k)&&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:k,mintAUseSOLBalance:A,mintBUseSOLBalance:w,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:k},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=fr,clmmProgram:p=to}){var w,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 _e(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var k,x;g[h.pubkey.toBase58()]=(x=(k=h==null?void 0:h.accountInfo)==null?void 0:k.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(N=>!N.liquidity.isZero()||N.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let k=h,x=o.useSOLBalance&&k.mintA.address===Z.toString(),B=o.useSOLBalance&&k.mintB.address===Z.toString(),K=f[k.mintA.address];if(!K)if(x){let{account:N,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new j(k.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=N,R&&A.addInstruction(R)}else{let N=new j(k.mintA.address);K=this.scope.account.getAssociatedTokenAccount(N,new j(k.mintA.programId)),A.addInstruction({instructions:[wl(this.scope.ownerPubKey,K,this.scope.ownerPubKey,N,new j(k.mintA.programId))]})}let I=f[k.mintB.address];if(!I)if(B){let{account:N,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new j(k.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=N,R&&A.addInstruction(R)}else{let N=new j(k.mintB.address);I=this.scope.account.getAssociatedTokenAccount(N,new j(k.mintB.programId)),A.addInstruction({instructions:[wl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,N,new j(k.mintB.programId))]})}f[k.mintA.address]=K,f[k.mintB.address]=I;let C=[];for(let N of k.rewardDefaultInfos){let R=o.useSOLBalance&&N.mint.address===Z.toString(),v=f[N.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(N.mint.programId),mint:new j(N.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[N.mint.address]=v,C.push(v)}let O=await this.getClmmPoolKeys(k.id),L=[];for(let N=0;N<O.rewardInfos.length;N++)L.push({poolRewardVault:new j(O.rewardInfos[N].vault),ownerRewardVault:C[N],rewardMint:new j(O.rewardInfos[N].mint.address)});for(let N of t[h.id]){let R=(w=n==null?void 0:n[h.id])==null?void 0:w[N.nftMint.toBase58()];if(R){let v=ee(this.scope.ownerPubKey,R.lockNftMint,Ri).publicKey,z=$.getTickArrayStartIndexByTick(N.tickLower,O.config.tickSpacing),H=$.getTickArrayStartIndexByTick(N.tickUpper,O.config.tickSpacing),{publicKey:ce}=ke(new j(O.programId),R.poolId,z),{publicKey:ae}=ke(new j(O.programId),R.poolId,H),{publicKey:ue}=ln(new j(O.programId),R.poolId,N.tickLower,N.tickUpper),ge=vo(m,R.lockNftMint).publicKey,fe=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:ue,vaultA:new j(O.vault.A),vaultB:new j(O.vault.B),tickArrayLower:ce,tickArrayUpper:ae,userVaultA:K,userVaultB:I,mintA:new j(O.mintA.address),mintB:new j(O.mintB.address),rewardAccounts:L,exTickArrayBitmap:Je(p,R.poolId).publicKey});A.addInstruction({instructions:[fe],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:O.lookupTableAccount?[O.lookupTableAccount]:[]})}else{let v=Be.decreaseLiquidityInstructions({poolInfo:k,poolKeys:O,ownerPosition:N,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new Ct(0),amountMinA:new Ct(0),amountMinB:new Ct(0),nft2022:(T=g[N.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?tl.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=to}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new Ct(1))).map(r=>Kt(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=Fo.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 Ct(1))).map(c=>vo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=nl.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=Fo.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 _e(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=mo.decode(r.accountInfo.data),c=le.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(V({},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 _e(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:ht({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:ht({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(V({},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 Io({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 _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Zc(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Al.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Al.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(V({},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:ht({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 Of,NATIVE_MINT as Eo,TOKEN_PROGRAM_ID as Rt,createAssociatedTokenAccountIdempotentInstruction as Wo}from"@solana/spl-token";import kl from"bn.js";import zr from"bn.js";function Ma(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function wf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Ma(s,e).gt(Ni)&&(t=t.add(new zr(1))),[t,e]}var Ni=new zr(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]=wf(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 Ma(e.mul(n),t).gt(Ni)&&r.gt(Ni)&&(r=r.add(new zr(1))),Ma(e.mul(o),t).gt(Ni)&&a.gt(Ni)&&(a=a.add(new zr(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import kf from"bn.js";var _t=class{static tradingFee(e,t){return Zo(e,t,Ft)}static protocolFee(e,t){return lr(e,t,Ft)}static fundFee(e,t){return lr(e,t,Ft)}static creatorFee(e,t){return Zo(e,t,Ft)}static splitCreatorFee(e,t,n){return lr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Ft),o=Ft.sub(t);return n.add(o).sub(new kf(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 kl(0),l=_t.tradingFee(e,o),m;c?(u=_t.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=_t.protocolFee(l,r),p=_t.protocolFee(l,a),f=Oi.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=_t.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 kl(0),m;if(c)m=e;else{let b=_t.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Oi.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=_t.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=_t.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=_t.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=_t.protocolFee(u,r),y=_t.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:n.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Qe from"bn.js";import{PublicKey as Vi,TransactionInstruction as Cn,Keypair as Rf,SystemProgram as Va}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Yr,TOKEN_2022_PROGRAM_ID as _a,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";var hf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),kS=Buffer.from("amm_config","utf8"),Tf=Buffer.from("pool","utf8"),If=Buffer.from("pool_lp_mint","utf8"),Bf=Buffer.from("pool_vault","utf8"),xf=Buffer.from("observation","utf8"),Sf=Buffer.from("permission","utf8");function _o(s){return pe([hf],s)}function va(s,e,t,n){return pe([Tf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function Kf(s,e){return pe([If,e.toBuffer()],s)}function hl(s,e,t){return pe([Bf,e.toBuffer(),t.toBuffer()],s)}function vi(s,e){return pe([xf,e.toBuffer()],s)}function Fa({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=_o(e).publicKey,r=s||va(e,t,n,o).publicKey,a=Kf(e,r).publicKey,c=hl(e,r,n).publicKey,u=hl(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 Cf=Buffer.from("locked_liquidity","utf8");function Fi(s,e){return pe([Cf,e.toBuffer()],s)}function Tl(s,e){return pe([Sf,e.toBuffer()],s)}var Lf=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 Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=va(s,t,i,r).publicKey,k=[{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:Yr,isSigner:!1,isWritable:!1},{pubkey:Bs,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1}],x=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:w},x),new Cn({keys:k,programId:s,data:Buffer.from([...Rn.initialize,...x])})}function Bl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([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 Lf.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 xl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([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 Hr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([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 Sl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([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 Kl(s){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=s,r=[],[a,c]=[new Vi(t.id),new Vi(t.lpMint.address)],u;if(i)u=new Vi((await i(1))[0]);else{let g=Rf.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=Nf({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 Vi(n.vault.A),poolVaultB:new Vi(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 Nf({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:Va.programId,isSigner:!1,isWritable:!1},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Yr,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],A=_([P("lpAmount"),Ye("withMetadata")]),w=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},w);let T=Buffer.from([...Rn.lockCpLiquidity,...w]);return new Cn({keys:g,programId:s,data:T})}function Ea({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:oo,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=_([P("lpFeeAmount")]),w=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},w);let T=Buffer.from([...Rn.collectCpFee,...w]);return new Cn({keys:g,programId:s,data:T})}function Wa(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:Yr,isSigner:!1,isWritable:!1},{pubkey:Va.programId,isSigner:!1,isWritable:!1}];return new Cn({keys:p,programId:s,data:Rn.collectCreatorFee})}function Cl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h,k){let x=_([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:Yr,isSigner:!1,isWritable:!1},{pubkey:Va.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(x.span);return x.encode({amountA:w,amountB:T,openTime:h,feeOn:k},K),new Cn({keys:B,programId:s,data:Buffer.from([...Rn.initializeWithPermission,...K])})}var Rl=_([xe(8),E("bump"),Ye("disableCreatePool"),Ut("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),F("protocolOwner"),F("fundOwner"),P("creatorFeeRate"),Q(P(),15)]),Qr=_([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)]),MS=_([xe(8),F("configId"),Q(P(),30)]);var _i=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 _e(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=Qr.decode(d.accountInfo.data);o[String(e[m])]=q(V({},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 _e(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]]=Rl.decode(f.data)}}let c={},u=await _e(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(Of.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(V({},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(V({},n),{[o]:q(V({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:_o(i.programId).publicKey,mintA:ht({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:ht({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 Io({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=ht({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=ht({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=ht({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Rt.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:_o(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,w]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],k=i.useSOLBalance&&A.address===Eo.toBase58(),x=i.useSOLBalance&&w.address===Eo.toBase58(),[B,K]=[new U(A.address),new U(w.address)],I=this.createTxBuilder(d),{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:B,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:b,amount:T}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:r,checkCreateATAOwner:a});I.addInstruction(O||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:new U(w.address),tokenProgram:w.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(N||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let R=Fa({poolId:e,programId:t,configId:new U(u.id),mintA:B,mintB:K});return I.addInstruction({instructions:[Il(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,B,K,R.lpMint,C,L,ee(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((z=A.programId)!=null?z:Rt),new U((H=w.programId)!=null?H:Rt),R.observationId,T,h,o)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(V({},R),{mintA:A,mintB:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:w}=a||this.computePairAmount({poolInfo:q(V({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new ct(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=w.amount,h=t.mintA.address===Eo.toString(),k=t.mintB.address===Eo.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:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(L||{}),!I&&!O&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let N=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:N,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 ct(new Qe(1)).sub(r);return x.addInstruction({instructions:[Bl(new U(t.programId),this.scope.ownerPubKey,new U(z.authority),new U(t.id),R,I,O,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 ct(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,w=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],k=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:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(k&&l),associatedOnly:!k,checkCreateATAOwner:!1});B=I,C&&w.addInstruction(C);let{account:O,instructionParams:L}=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=O,L&&w.addInstruction(L),(!B||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let N=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});N||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return w.addInstruction({instructions:[xl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),N,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]:[]}),w.addCustomComputeBudget(r),w.addTipInstruction(a),w.versionBuild({txVersion:c})}async swap(e){var C,O,L,N,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,w]=[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:k,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:Rt),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:p||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:w,tokenProgram:new U((O=t.mintB.programId)!=null?O:Rt),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:p||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!k||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:B,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?Sl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:B,o?B:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:Rt),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:Rt),o?A:w,o?w:A,vi(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Hr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:B,o?B:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((L=t[o?"mintA":"mintB"].programId)!=null?L:Rt),new U((N=t[o?"mintB":"mintA"].programId)!=null?N:Rt),o?A:w,o?w: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 Kl({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:yr,lockAuthProgram:(y=e.authProgram)!=null?y:br,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 O;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=yr,authProgram:r=br,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,w,{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:k,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});w=k,x&&p.addInstruction(x),(!A||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:w});let B=(O=e.poolKeys)!=null?O:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,o,Rt),{publicKey:I}=Fi(i,o),{publicKey:C}=ee(r,new U(t.lpMint.address),Rt);return p.addInstruction({instructions:[Ea({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:w,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=yr,authProgram:o=br,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)],w=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],k=m[f.mintB.address];if(!h)if(w){let{account:C,instructionParams:O}=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,O&&l.addInstruction(O),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:[Wo(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!k)if(T){let{account:C,instructionParams:O}=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});k=C,O&&l.addInstruction(O),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);k=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Wo(this.scope.ownerPubKey,k,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=k}(!h||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:k});let x=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:B}=ee(u,b,Rt),{publicKey:K}=Fi(n,b),{publicKey:I}=ee(o,new U(f.lpMint.address),Rt);l.addInstruction({instructions:[Ea({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:k,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())),[w,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,k]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=i.useSOLBalance&&w.address===Eo.toBase58(),B=i.useSOLBalance&&T.address===Eo.toBase58(),[K,I]=[new U(w.address),new U(T.address)],C=this.createTxBuilder(d),{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:w.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(L||{});let{account:N,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:k}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),O===void 0||N===void 0)throw Error("you don't has some token account");let v=Fa({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[Cl(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,O,N,ee(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((H=w.programId)!=null?H:Rt),new U((ce=T.programId)!=null?ce:Rt),v.observationId,Tl(t,this.scope.ownerPubKey).publicKey,h,k,o,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(V({},v),{mintA:w,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=oo,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:[Wo(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Wo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Wa(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,poolKeyList:t,programId:n=oo,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=r||this.scope.ownerPubKey,c=this.createTxBuilder(a),u={},l=t!=null?t:[];if(!l.length){let d=e.map(b=>b.id),p=95,f=[];for(let b=0;b<d.length;b+=p)f.push(d.slice(b,b+p));l=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let m=l.reduce((d,p)=>q(V({},d),{[p.id]:p}),{});for(let d of e){let p=m[d.id]||await this.getCpmmPoolKeys(d.id),[f,y,b,g]=[new U(d.mintA.address),new U(d.mintB.address),new U(d.mintA.programId),new U(d.mintB.programId)],A=u[d.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),w=u[d.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);u[d.mintA.address]||c.addInstruction({instructions:[Wo(this.scope.ownerPubKey,A,this.scope.ownerPubKey,f,b)]}),u[d.mintB.address]||c.addInstruction({instructions:[Wo(this.scope.ownerPubKey,w,this.scope.ownerPubKey,y,g)]}),u[d.mintA.address]=A,u[d.mintB.address]=w,c.addInstruction({instructions:[Wa(n,this.scope.ownerPubKey,new U(p.authority),new U(p.id),new U(p.config.id),new U(p.vault.A),new U(p.vault.B),f,y,A,w,b,g)],instructionTypes:[]})}return o===0?c.sizeCheckBuildV0({computeBudgetConfig:i}):c.sizeCheckBuild({computeBudgetConfig:i})}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,k,x,B,K,I,C,O;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:",(k=(h=l.fee)==null?void 0:h.toString())!=null?k: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:vt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let L=Mf(f,t,n,d);this.logDebug("lpAmountData:",{amountA:L.amountA.toString(),amountB:L.amountB.toString()}),y=Le(L[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new ct(new Qe(1)).add(i),g=new ct(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),w=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:",(O=(C=A.fee)==null?void 0:C.toString())!=null?O:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:w,liquidity:f}}};function Mf(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 Jf}from"@solana/web3.js";import{createTransferInstruction as Yl,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as ko,createAssociatedTokenAccountIdempotentInstruction as $a,createSyncNativeInstruction as ey,createTransferCheckedInstruction as ty}from"@solana/spl-token";import nt from"bn.js";var Ll={[Ls.toBase58()]:3},Nl={3:Ls};var Da=_([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)]),Ol={3:Da};import{PublicKey as Ml}from"@solana/web3.js";var jr=we("Serum"),Zr=class{static getProgramId(e){let t=Nl[e];return t||jr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ll[t];return n||jr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ol[e];return t||jr.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=Ml.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return jr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ml.default,nonce:o}}};import{PublicKey as de,SystemProgram as vf,TransactionInstruction as Ff}from"@solana/web3.js";import jn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Vf,TOKEN_2022_PROGRAM_ID as _f,TOKEN_PROGRAM_ID as Ef}from"@solana/spl-token";function Wf(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var k;let y=[],b=[S({pubkey:Ef,isWritable:!1}),S({pubkey:_f,isWritable:!1}),S({pubkey:Vf,isWritable:!1}),S({pubkey:vf.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],w=[i,r,a];for(let x=0;x<g.length;x++){let B=g[x],K=w[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(w[x])})),b.push(S({pubkey:new de(w[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(Df(B.sqrtPriceX64.toString(),K));for(let C of(k=f[x])!=null?k:[])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:Zu,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=_([E("insId"),P("amountIn"),P("amountOut"),Q(se(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new Ff({keys:b,programId:s,data:h})}function Df(s,e){if(s)if(e){let t=new jn(s).div(new jn(25));return t.gt(Lr)?t:Lr}else{let t=new jn(s).mul(new jn(25));return t.lt(Nr)?t:Nr}else return e?Lr:Nr}function vl({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)?xt.add(Xt):St.sub(Xt);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:[Hr(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")?Dr({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"}):Wr({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:[Wf(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 $r,TOKEN_2022_PROGRAM_ID as jf,TOKEN_PROGRAM_ID as za}from"@solana/spl-token";import{SystemProgram as Qt,TransactionInstruction as Et}from"@solana/web3.js";import Uo from"bn.js";var Zn=_([P(),P("epoch"),E("curveType"),Ut("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)]),qf=_([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),mn=_([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"),qf.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),P("platformVestingShare"),Q(E(),54)]),uC=_([P(),P("epoch"),F("poolId"),F("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),Q(P(),8)]),Fl=_([E("migrateType"),E("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Uf=_([P("epoch"),E("index"),F("configId"),Fl.replicate("bondingCurveParam"),Q(P(),50)]),Ln=_([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"),F("platformVestingWallet"),P("platformVestingScale"),F("platformCpCreator"),Q(E(),108),gc(Uf,"platformCurve")]);var Gf=Buffer.from("vault_auth_seed","utf8"),pC=Buffer.from("global_config","utf8"),Xf=Buffer.from("pool_vesting","utf8"),zf=Buffer.from("platform_config","utf8"),Yf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Hf=Buffer.from("creator_fee_vault_auth_seed","utf8"),Qf=Buffer.from("platform_global_access","utf8");function Ht(s){return pe([Gf],s)}function Do(s,e,t){return pe([pa,e.toBuffer(),t.toBuffer()],s)}function qa(s,e,t){return pe([fa,e.toBuffer(),t.toBuffer()],s)}function Ao(s){return pe([Buffer.from("__event_authority","utf8")],s)}function Ua(s,e){return pe([zf,e.toBuffer()],s)}function qo(s,e,t){return pe([Xf,e.toBuffer(),t.toBuffer()],s)}function gn(s,e,t){return pe([e.toBuffer(),t.toBuffer()],s)}function Ga(s){return pe([Yf],s)}function Pn(s,e,t){return pe([e.toBuffer(),t.toBuffer()],s)}function Xa(s){return pe([Hf],s)}function Vl(s,e,t){return pe([Qf,e.toBuffer(),t.toBuffer()],s)}var Wt={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]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106])};function _l(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h){let k=_([E("decimals"),Vt("name"),Vt("symbol"),Vt("uri")]),x=_([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn")]),B=_([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),K=_([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),I=[{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:za,isSigner:!1,isWritable:!1},{pubkey:za,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),O=Buffer.alloc(x.span),L=Buffer.alloc(b.type==="ConstantCurve"?K.span:B.span);return k.encode({decimals:d,name:p,symbol:f,uri:y},C),b.type==="ConstantCurve"?K.encode(q(V({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?B.encode(q(V({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&B.encode(q(V({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),x.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:w,cpmmCreatorFeeOn:T},O),new Et({keys:I,programId:s,data:Buffer.from([...Wt.initializeV2,...C,...L,...O])})}function El(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h){let k=_([E("decimals"),Vt("name"),Vt("symbol"),Vt("uri")]),x=_([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),_([Ut("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),B=_([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),K=_([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),I=[{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:jf,isSigner:!1,isWritable:!1},{pubkey:za,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),O=Buffer.alloc(x.span),L=Buffer.alloc(y.type==="ConstantCurve"?K.span:B.span);return k.encode({decimals:m,name:d,symbol:p,uri:f},C),y.type==="ConstantCurve"?K.encode(q(V({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?B.encode(q(V({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&B.encode(q(V({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),x.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:w,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new Uo(0)}},O),new Et({keys:I,programId:s,data:Buffer.from([...Wt.initializeWithToken2022,...C,...L,...O])})}function Jr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new Uo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.buyExactIn,...k])})}function Wl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new Uo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.buyExactOut,...k])})}function es(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new Uo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.sellExactIn,...k])})}function Dl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new Uo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.sellExactOut,...k])})}function Ya(s,e,t,n,o,i,r,a,c){let u=_([]),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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:$r,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Et({keys:l,programId:s,data:Buffer.from([...Wt.claimVestedToken,...m])})}function Ha(s,e,t,n,o,i){let r=_([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:Qt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Et({keys:a,programId:s,data:Buffer.from([...Wt.createVestingAccount,...c])})}function Qa(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:Qt.programId,isSigner:!1,isWritable:!0},{pubkey:$r,isSigner:!1,isWritable:!0}];return new Et({keys:u,programId:s,data:Wt.claimPlatformFee})}function ql(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Vt("name"),Vt("web"),Vt("img"),P("creatorFeeRate"),P("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+4*3);return y.encode({platformScale:c.platformScale,creatorScale:c.creatorScale,burnScale:c.burnScale,feeRate:u,name:m,web:d,img:p,creatorFeeRate:l,platformVestingScale:f},g),new Et({keys:b,programId:s,data:Buffer.from([...Wt.createPlatformConfig,...g])})}function Ul(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=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=_([E("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);i=Buffer.alloc(r.span),r.encode(V({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=_([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=_([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=_([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=_([E("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Vt("name"),Vt("web"),Vt("img"),F("transferFeeExtensionAuth"),P("creatorFeeRate"),P("platformVestingScale"),F("platformVestingWallet")]);i=Buffer.alloc(1+32+32+32+8*5+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,platformVestingWallet:n.value.platformVestingWallet,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,platformVestingScale:n.value.platformVestingScale},i)}else if(n.type==="updateVestingWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:9,value:n.value},i)}else if(n.type==="updatePlatformVestingScale"){let r=_([E("index"),P("value")]);i=Buffer.alloc(r.span),r.encode({index:10,value:n.value},i)}else if(n.type==="updatePlatformCpCreator"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:11,value:n.value},i)}else throw Error("updateInfo params type error");return new Et({keys:o,programId:s,data:Buffer.from([...Wt.updatePlaformConfig,...i])})}function ja(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:$r,isSigner:!1,isWritable:!1}];return new Et({keys:c,programId:s,data:Wt.claimPlatformFeeFromVault})}function Za(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:$r,isSigner:!1,isWritable:!1}];return new Et({keys:a,programId:s,data:Wt.claimCreatorFee})}var IC=new Uo("18446744073709551615");function Gl(s,e,t,n,o,i){let r=[{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:i,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1}];return new Et({keys:r,programId:s,data:Wt.createPlatformVestingAccount})}import ts 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 ns=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 ts(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new ts(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 ts(0))||m.lt(new ts(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 io(o,i)}};import tn from"bn.js";import os from"bn.js";var is=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 os(0)))throw Error("invalid input 1");let a=new os(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new os(0))||t.lt(new os(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 io(o,n)}};import Dt from"bn.js";import Xl from"bn.js";var Ei=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 Xl(o.mul(this._Q64).toFixed(0))}};Ei._Q64=new M(new Xl(1).shln(64).toString());var rs=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(Ei._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 Dt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Dt(3)).sub(i),u=t.mul(new Dt(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new Dt(2)).mul(st).div(l);if(!m.gt(new Dt(0)))throw Error("a need gt 0");if(!bi.gt(m))throw Error("a need lt u64 max");if(m.lt(new Dt(0))||u.lt(new Dt(0)))throw Error("invalid input 0");return{a:m,b:new Dt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Dt(2).mul(n).mul(st).div(e.virtualA);return new Dt(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 io(e.virtualA.mul(o),new Dt(2).mul(st)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=io(e.virtualA.mul(o),new Dt(2).mul(st));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Dt(2).mul(n).mul(st).div(e.virtualA),i=new Dt(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Lt=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(V({},m),{decimalA:c,decimalB:u})),p=o.div(new tn(t-1)),f=new tn(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,w=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(w),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:w,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(k.amountA.amount),w=w.add(k.amountB);let x=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:w},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(Ft).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new tn(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(Ft);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(Ft);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new tn(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new tn(10).pow(new tn(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new tn(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 w=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Ns(b,c,u),amountB:g,splitFee:w}}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=Os(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=Ns(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=Lt.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:Os(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 tn(0):e.mul(n).div(r),c=r.isZero()?new tn(0):e.mul(o).div(r),u=r.isZero()?new tn(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,Ft)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Ft),o=Ft.sub(t);return n.add(o).sub(new tn(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new tn(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 ns;case 1:return is;case 2:return rs}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as wo,TOKEN_PROGRAM_ID as Ee,createAssociatedTokenAccountIdempotentInstruction as qt,createSyncNativeInstruction as Zf,getTransferFeeConfig as ss,unpackMint as as}from"@solana/spl-token";import ie from"bn.js";import{PublicKey as zl,SystemProgram as $f}from"@solana/web3.js";var us={initPriceX64:new ie("515752397214619"),supply:new ie(1e15),totalSellA:new ie(7931e11),totalFundRaisingB:new ie(85e9),totalFundRaisingBUSD:new ie(125e8),totalLockedAmount:new ie("0"),cliffPeriod:new ie("0"),unlockPeriod:new ie("0"),decimals:6,virtualA:new ie("1073471847374405"),virtualB:new ie("30050573465"),realA:new ie(0),realB:new ie(0),protocolFee:new ie(0),platformId:new zl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ie(0),cliffPeriod:new ie(0),unlockPeriod:new ie(0),startTime:new ie(0),totalAllocatedShare:new ie(0)}},Jn=new ie(1e4);var Wi=class extends De{constructor(e){super(e)}async createLaunchpad(O){var L=O,{programId:e=rt,authProgramId:t,platformId:n=us.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:A,slippage:w,associatedOnly:T=!0,checkCreateATAOwner:h=!1,extraSigners:k,token2022:x,transferFeeExtensionParams:B,creatorFeeOn:K=0,platformConfigAccess:I}=L,C=Ge(L,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","platformConfigAccess"]);var ou,iu,ru,su,au,uu,cu,lu,mu,du,pu;let N=this.createTxBuilder(b);t=t!=null?t:Ht(e).publicKey,x=!!B,x&&(l="cpmm");let R=d;if(!R&&m){let An=await this.scope.connection.getAccountInfo(m);An&&(R=Zn.decode(An.data))}R||this.logAndCreateError("config not found");let v=R.mintB,z=R.curveType,{publicKey:H}=Do(e,o,v),{publicKey:ce}=qa(e,H,o),{publicKey:ae}=qa(e,H,v),{publicKey:ue}=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 fe=(await this.scope.api.fetchLaunchConfigs()).find(An=>An.key.pubKey===m.toBase58()),te=(ou=C==null?void 0:C.supply)!=null?ou:new ie(fe.defaultParams.supplyInit),J=(iu=C==null?void 0:C.totalSellA)!=null?iu:new ie(fe.defaultParams.totalSellA),Se=(ru=C==null?void 0:C.totalFundRaisingB)!=null?ru:new ie(fe.defaultParams.totalFundRaisingB),Me=(su=C==null?void 0:C.totalLockedAmount)!=null?su:new ie(0),he=await this.scope.connection.getAccountInfo(n);he||this.logAndCreateError("platform id not found:",n.toString());let bt=Ln.decode(he.data),Nt=bt.platformVestingScale,ot=bt.feeRate,zi=Lt.getCurve(R.curveType).getInitParam({supply:te,totalFundRaising:Se,totalSell:J,totalLockedAmount:Me,migrateFee:R.migrateFee}),ho;try{ho=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let jt={epoch:new ie(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(au=ho==null?void 0:ho.decimals)!=null?au:r,supply:te,totalSellA:J,mintA:new zl(o),mintB:v,virtualA:zi.a,virtualB:zi.b,realA:us.realA,realB:us.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:us.protocolFee,platformFee:ot,platformId:n,configId:m,vaultA:ce,vaultB:ae,creator:this.scope.ownerPubKey,totalFundRaisingB:Se,vestingSchedule:{totalLockedAmount:Me,cliffPeriod:new ie(0),unlockPeriod:new ie(0),startTime:new ie(0),totalAllocatedShare:new ie(0)},mintProgramFlag:x?1:0,cpmmCreatorFeeOn:K,platformVestingShare:Nt!=null?Nt:new ie(0)},Yi=Lt.getCurve(R.curveType),{c:Hi}=Yi.getInitParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalLockedAmount:Me,totalSell:R.curveType===0?jt.totalSellA:new ie(0),migrateFee:R.migrateFee});try{Lt.checkParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalSell:Hi,totalLockedAmount:Me,decimals:jt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(An){this.logAndCreateError(`check create mint params failed, ${An.message}`)}N.addInstruction({instructions:[x?El(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,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,(uu=C==null?void 0:C.cliffPeriod)!=null?uu:new ie(0),(cu=C==null?void 0:C.unlockPeriod)!=null?cu:new ie(0),K,B):_l(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,ae,ue,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,(lu=C==null?void 0:C.cliffPeriod)!=null?lu:new ie(0),(mu=C==null?void 0:C.unlockPeriod)!=null?mu:new ie(0),K,I?Vl(e,n,m).publicKey:void 0)]});let To=x?await this.scope.connection.getEpochInfo():void 0,It=B?{epoch:BigInt((To==null?void 0:To.epoch)||0),maximumFee:BigInt((du=B==null?void 0:B.maxinumFee.toString())!=null?du:0),transferFeeBasisPoints:(pu=B==null?void 0:B.transferFeeBasePoints)!=null?pu:0}:void 0,Xo={amountA:{amount:new ie(0),fee:void 0,expirationTime:void 0},amountB:new ie(0),splitFee:{platformFee:new ie(0),shareFee:new ie(0),protocolFee:new ie(0),creatorFee:new ie(0)}},ms;if(k!=null&&k.length&&N.addInstruction({signers:k}),!C.createOnly){let{builder:An,extInfo:$l}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?wo:void 0,mintA:o,mintB:v,poolInfo:jt,buyAmount:g,minMintAAmount:A,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:ot,slippage:w,associatedOnly:T,checkCreateATAOwner:h,skipCheckMintA:!It,transferFeeConfigA:It?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:It,newerTransferFee:It}:void 0,fromCreate:!0});N.addInstruction(V({},An.AllTxData)),Xo=V({},$l),ms=(this.scope.cluster==="devnet"||p===1)&&C.shareFeeReceiver?[An.allInstructions[0]]:void 0}return N.addTipInstruction(y),p===0?N.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:Xo,splitIns:ms,address:q(V({},jt),{poolId:H})}):N.sizeCheckBuild({computeBudgetConfig:f,swapInfo:Xo,splitIns:ms,address:q(V({},jt),{poolId:H})})}async buyToken({programId:e=rt,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 ie(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:w=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:k=!1}){var J,Se,Me;p.lte(new ie(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let x=this.createTxBuilder(d),{publicKey:B}=Do(e,n,i);t=t!=null?t:Ht(e).publicKey;let K=h;if(!k)if(K)o=wo;else{let he=await this.scope.connection.getAccountInfo(n);if(he&&he.owner.equals(wo)){o=he.owner;let bt=as(n,he,o);K=ss(bt)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),O=T&&C,L=O?this.scope.account.getAssociatedTokenAccount(i,Ee):null,N=C;if(x.addInstruction({instructions:[qt(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...O?[qt(this.scope.ownerPubKey,L,this.scope.ownerPubKey,i,Ee),$f.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L,lamports:BigInt(p.toString())}),Zf(L)]:[]]}),!O){let{account:he,instructionParams:bt}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:N?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!N,notUseTokenAccount:N,associatedOnly:N?!1:A,checkCreateATAOwner:w});he&&(L=he),x.addInstruction(bt||{})}L||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let he=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});he||this.logAndCreateError("cannot found pool:",B.toBase58()),R=mn.decode(he.data)}let v=a,z=await _e(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(he=>({pubkey:he})));if(!v){let he=z.find(bt=>bt.pubkey.equals(R.configId));(!he||!he.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Zn.decode(he.accountInfo.data)}let H=z.find(he=>he.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 ae=Lt.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()}),ue=new M(ae.amountA.amount.toString()).sub((Se=(J=ae.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),fe=f!=null?f:y?new ie(ue.mul(ge).toFixed(0)):ae.amountA.amount.sub((Me=ae.amountA.fee)!=null?Me:new ie(0));ae.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ae.amountA.toString()}, input ${i.toBase58()} amount: ${ae.amountB.toString()}`);let te=g?ee(g,i,Ee).publicKey:void 0;return te&&x.addInstruction({instructions:[qt(this.scope.ownerPubKey,te,g,i)]}),x.addInstruction({instructions:[Jr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,I,L,R.vaultA,R.vaultB,n,i,o,Ee,gn(e,R.platformId,i).publicKey,Pn(e,R.creator,i).publicKey,ae.amountB.lt(p)?ae.amountB:p,fe,b,te)]}),x.addCustomComputeBudget(l),x.addTipInstruction(m),x.versionBuild({txVersion:u,extInfo:q(V({},ae),{decimalOutAmount:ue,minDecimalOutAmount:new M(fe.toString())})})}async buyTokenExactOut({programId:e=rt,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 ie(0),shareFeeReceiver:A,associatedOnly:w=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ie(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let k=this.createTxBuilder(p),{publicKey:x}=Do(e,n,i);t=t!=null?t:Ht(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=mn.decode(te.data)}let K=a,I=await _e(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 O=Ln.decode(C.accountInfo.data);u=u||O.feeRate;let L=c;if(!h)if(L)o=wo;else{let te=await this.scope.connection.getAccountInfo(n);if(te&&te.owner.equals(wo)){o=te.owner;let J=as(n,te,o);L=ss(J)||void 0}}let N=Lt.buyExactOut({poolInfo:B,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:O.creatorFeeRate,transferFeeConfigA:L,slot:await this.scope.connection.getSlot()}),R=new M(N.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 ie(R.mul(v).toFixed(0)):N.amountB,H=this.scope.account.getAssociatedTokenAccount(n,o),ce=null,ae=i.equals(Nn);k.addInstruction({instructions:[qt(this.scope.ownerPubKey,H,this.scope.ownerPubKey,n,o)]});let{account:ue,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:ae?{payer:this.scope.ownerPubKey,amount:N.amountB}:void 0,skipCloseAccount:!ae,notUseTokenAccount:ae,associatedOnly:ae?!1:w,checkCreateATAOwner:T});ue&&(ce=ue),k.addInstruction(ge||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let fe=A?ee(A,i,Ee).publicKey:void 0;return fe&&k.addInstruction({instructions:[qt(this.scope.ownerPubKey,fe,A,i)]}),k.addInstruction({instructions:[Wl(e,this.scope.ownerPubKey,t,B.configId,B.platformId,x,H,ce,B.vaultA,B.vaultB,n,i,o,Ee,gn(e,B.platformId,i).publicKey,Pn(e,B.creator,i).publicKey,y,z,g,fe)]}),k.addCustomComputeBudget(m),k.addTipInstruction(d),k.versionBuild({txVersion:l,extInfo:{maxSpentAmount:z,outAmount:y}})}async sellToken({programId:e=rt,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 ie(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Ht(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ie(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:k}=Do(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(wo)){n=J.owner;let Se=as(o,J,n);x=ss(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:w});C&&(B=C),h.addInstruction(O||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:N}=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:w});L&&(K=L),h.addInstruction(N||{}),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(k,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(J.data)}let v=a,z=await _e(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 ae=Lt.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()}),ue=new M(ae.amountB.toString()),ge=y?new M(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new M(1),fe=f!=null?f:y?new ie(ue.mul(ge).toFixed(0)):ae.amountB;fe.lte(new ie(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:[qt(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[es(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,B,K,R.vaultA,R.vaultB,o,i,n,Ee,gn(e,R.platformId,i).publicKey,Pn(e,R.creator,i).publicKey,ae.amountA.amount.lt(p)?ae.amountA.amount:p,fe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:fe}})}async sellTokenExactOut({programId:e=rt,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 ie(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Ht(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ie(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:k}=Do(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(wo)){n=J.owner;let Se=as(o,J,n);x=ss(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:w});C&&(B=C),h.addInstruction(O||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:N}=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:w});L&&(K=L),h.addInstruction(N||{}),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(k,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(J.data)}let v=a,z=await _e(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 ae=Lt.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()}),ue=new M(ae.amountA.amount.toString()),ge=y?new M(Jn.add(y).toNumber()/Jn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),fe=(f!=null?f:y)?new ie(ue.mul(ge).toFixed(0)):ae.amountA.amount,te=g?ee(g,i,Ee).publicKey:void 0;return te&&h.addInstruction({instructions:[qt(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[Dl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,B,K,R.vaultA,R.vaultB,o,i,n,Ee,gn(e,R.platformId,i).publicKey,Pn(e,R.creator,i).publicKey,p,fe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:fe}})}async createPlatformConfig({programId:e=rt,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:i,cpConfigId:r,migrateCpLockNftScale:a,transferFeeExtensionAuth:c,creatorFeeRate:u,feeRate:l,name:m,web:d,img:p,platformVestingScale:f=new ie(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:A}){let w=this.createTxBuilder(A),{publicKey:T}=Ua(e,t);return w.addInstruction({instructions:[ql(e,t,n,o,i,T,r,c,a,l,u,m,d,p,f)]}),w.addCustomComputeBudget(b),w.addTipInstruction(g),w.versionBuild({txVersion:y,extInfo:{platformId:T}})}async updatePlatformConfig({programId:e=rt,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Ua(e,t).publicKey;return u.addInstruction({instructions:[Ul(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createPlatformVestingAccount({programId:e=rt,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:i,vestingRecord:r,txVersion:a,computeBudgetConfig:c,txTipConfig:u,feePayer:l}){let m=this.createTxBuilder(l),d=r!=null?r:qo(e,i,n).publicKey;return m.addInstruction({instructions:[Gl(e,t,n,o,i,d)]}),m.addCustomComputeBudget(c),m.addTipInstruction(u),m.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=rt,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:Ht(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 w=mn.decode(A.data),T=await this.scope.connection.getAccountInfo(w.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",w.configId.toBase58()),f=Zn.decode(T.data).mintB,y=y!=null?y:w.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:[qt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Qa(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=rt,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:Ht(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:mn.span},{memcmp:{offset:mn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=mn.decode(m.account.data);if(d.platformFee.lte(new ie(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Ee).publicKey;u.addInstruction({instructions:[qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Qa(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=rt,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=qo(e,t,n).publicKey;return u.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=rt,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=qo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=rt,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=Ht(e).publicKey,m=o||qo(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=mn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Ee).publicKey;return u.addInstruction({instructions:[qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[Ya(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=rt,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=V({},n),l=Ht(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=V(V({},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]||qo(e,d,this.scope.ownerPubKey).publicKey,b=ee(this.scope.ownerPubKey,f.mintA,Ee).publicKey;c.addInstruction({instructions:[qt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[Ya(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=rt,platformId:t,mintB:n,mintBProgram:o=Ee,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=gn(e,t,n).publicKey,d=Ga(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),ja(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=rt,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=Ga(e).publicKey,p=gn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Nn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:w}=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(w||{}),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:[ja(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=rt,mintB:t,mintBProgram:n=Ee,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=Pn(e,this.scope.ownerPubKey,t).publicKey,l=Xa(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[qt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Za(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=rt,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=Pn(e,this.scope.ownerPubKey,c).publicKey,m=Xa(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[qt(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),Za(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 _e(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=mn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(V({},l),{poolId:e[c],programId:u.accountInfo.owner}),i.push(l.configId)}let r=await _e(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(V({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(V({},c),{[u]:q(V({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new nt(0),Di=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?ko: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?ko:Fe);else{let{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?ko: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,k&&c.addInstruction(k)}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?ko:Fe)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=vl({routeProgram:i,inputMint:p,swapInfo:q(V({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder(),k=u.amount.token.isToken2022?ty(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],ko):Yl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());h.addInstruction({instructions:[k],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:x}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();x.length<2&&c.addInstruction({instructions:[Yl(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 nt(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,w=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:k,remainingAccounts:x},launchPoolInfo:B,launchAuthProgramId:K,launchSwapInfo:I,outAmount:C,minOutAmount:O}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:w,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),L=e.toString()===T.poolInfo.mintA.address,N=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=L?xt.add(new nt(1)):St.sub(new nt(1)):z=le.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let H=this.createTxBuilder(A),[ce,ae]=[new ve(T.poolInfo.mintA.address),new ve(T.poolInfo.mintB.address)],[ue,ge]=[new ve(T.poolInfo.mintA.programId),new ve(T.poolInfo.mintB.programId)],fe=this.scope.account.getAssociatedTokenAccount(ce,ue),te=this.scope.account.getAssociatedTokenAccount(ae,ge);H.addInstruction({instructions:[$a(this.scope.ownerPubKey,fe,this.scope.ownerPubKey,ce,ue),$a(this.scope.ownerPubKey,te,this.scope.ownerPubKey,ae,ge)]}),(L&&N||!L&&R)&&H.addInstruction({instructions:[Jf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L?fe:te,lamports:BigInt(h.toString())}),ey(L?fe:te)]}),v[T.poolInfo.mintA.address]=fe,v[T.poolInfo.mintB.address]=te,(!fe||!te)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:fe,ownerTokenAccountB:te}),H.addInstruction(n?Be.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:te},outputMint:L?ae:ce,amountOut:k,amountInMax:h,sqrtPriceLimitX64:z,remainingAccounts:x}):Be.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:te},inputMint:new ve(e),amountIn:t,amountOutMin:k,sqrtPriceLimitX64:z,remainingAccounts:x}));let J=B.mintProgramFlag===0?Fe:ko,Se=this.scope.account.getAssociatedTokenAccount(B.mintA,J),Me=v[B.mintB.toBase58()];if(H.addInstruction({instructions:[$a(this.scope.ownerPubKey,Se,this.scope.ownerPubKey,B.mintA,J)]}),!Me){let he=B.mintB.equals(Z),{account:bt,instructionParams:Nt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:B.mintB,notUseTokenAccount:he,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:he?{payer:this.scope.ownerPubKey,amount:k}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Me=bt,Nt&&H.addInstruction(Nt)}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,gn(B.programId,B.platformId,B.mintB).publicKey,Pn(B.programId,B.creator,B.mintB).publicKey,I.amountB.lt(k)?I.amountB:k,O,c,u)]}),H.addCustomComputeBudget(b),H.versionBuild({txVersion:g,extInfo:{routes:[{mint:new ve(e),amount:n?h:t,decimal:T.poolInfo[L?"mintA":"mintB"].decimals},{mint:L?ae:ce,amount:k,decimal:T.poolInfo[L?"mintB":"mintA"].decimals},{mint:B.mintA,amount:C,decimal:B.mintDecimalsA}],outAmount:C,minOutAmount:O}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new nt(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var N,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()}),w=l;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(i)})),g.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${w.mintB.toBase58()})`);let T=m;if(!T){let ae=await this.scope.connection.getAccountInfo(w.platformId);T=Ln.decode(ae.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(w.mintA),k=Ht(w.programId).publicKey,x=h.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(N=h.extensions.feeConfig.olderTransferFee.epoch)!=null?N: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=Lt.buyExactIn({poolInfo:w,amountB:B,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:w.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 nt(0)),C=new M(I.toString()),O=new nt(1e4),L=f?new M(O.sub(new nt(f*1e4)).toNumber()/O.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:w,launchAuthProgramId:k,launchMintTransferFeeConfig:x,launchSwapInfo:K,outAmount:K.amountA.amount.sub((ce=K.amountA.fee)!=null?ce:new nt(0)),minOutAmount:new nt(C.mul(L).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new nt(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:w,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),k=this.createTxBuilder(d),x={},B=b.mintProgramFlag===0?Fe:ko,{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:O}=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(O&&k.addInstruction(O),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);x[b.mintB.toBase58()]=C,k.addInstruction({instructions:[es(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,gn(b.programId,b.platformId,b.mintB).publicKey,Pn(b.programId,b.creator,b.mintB).publicKey,A.amountA.amount.lt(e)?A.amountA.amount:e,w,r,a)]});let L=b.mintB.toString()===f.poolInfo.mintA.address,N=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=L?xt.add(new nt(1)):St.sub(new nt(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,ae]=[new ve(f.poolInfo.mintA.programId),new ve(f.poolInfo.mintB.programId)],ue=N?void 0:this.scope.account.getAssociatedTokenAccount(z,ce),ge=R?void 0:this.scope.account.getAssociatedTokenAccount(H,ae);if(!ue){let{account:fe,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:L?e:0},associatedOnly:!1,checkCreateATAOwner:u});ue=fe,te&&k.addInstruction(te)}if(!ge){let{account:fe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ae,mint:H,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:L?0:e},associatedOnly:!1,checkCreateATAOwner:u});ge=fe,te&&k.addInstruction(te)}return x[f.poolInfo.mintA.address]=ue,x[f.poolInfo.mintB.address]=ge,(!ue||!ge)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ue,ownerTokenAccountB:ge}),k.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ue,tokenAccountB:ge},inputMint:new ve(f.poolKeys[L?"mintA":"mintB"].address),amountIn:w,amountOutMin:h,sqrtPriceLimitX64:v,remainingAccounts:y})),k.addCustomComputeBudget(l),k.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:w,decimal:b.mintDecimalsB},{mint:new ve(f.poolKeys[L?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[L?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new nt(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,O,L,N;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=Ht(m.programId).publicKey,w=g.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((O=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((N=(L=g.extensions.feeConfig.newerTransferFee.epoch)!=null?L:i==null?void 0:i.epoch)!=null?N:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=Lt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:w,slot:await this.scope.connection.getSlot()}),h=T.amountB,k=new M(h.toString()),x=new nt(1e4),B=l?new M(x.sub(new nt(l*1e4)).toNumber()/x.toNumber()).clampedTo(0,1):new M(1),K=new nt(k.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:w,launchSwapInfo:T,minLaunchOutAmount:K,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=pr,clmm:n=to,cpmm:o=oo}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Bi.offsetOf("baseMint"),length:64}}),r=_([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=_([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:mo.span}],dataSlice:{offset:mo.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:Qr.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=Ur(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 Io({connection:this.scope.connection,mints:Array.from(o).map(y=>new ve(y))});a=V(V({},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(V({},y),{[b]:q(V({},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,w,T,h,k,x,B,K;let m=l===void 0?new nt(0):e.raw.mul(new nt(l.feeBps.toNumber())).div(new nt(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(V({},t),{address:gt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(V({},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 O={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},L=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:O,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var ce,ae,ue,ge;let z=R===void 0?On:R.data.amountOut.amount.raw.sub((ae=(ce=R.data.amountOut.fee)==null?void 0:ce.raw)!=null?ae:On),H=v===void 0?On:v.data.amountOut.amount.raw.sub((ge=(ue=v.data.amountOut.fee)==null?void 0:ue.raw)!=null?ge:On);return z.lt(H)?1:-1})[0];if(L===void 0)continue;let N=new Re(Fr(O),L.data.amountOut.amount.raw.sub((A=(g=L.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:N});b.push(q(V({},v),{allTrade:!!(L.data.allTrade&&v.allTrade),amountIn:L.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new Mt({baseToken:L.data.amountIn.amount.token,denominator:L.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(w=v.amountOut.fee)==null?void 0:w.raw)!=null?T:On)}).toFixed()),priceImpact:new M(L.data.priceImpact.add(v.priceImpact).toFixed()),fee:[L.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[L.pool,R],remainingAccounts:[L.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Re(L.data.amountOut.amount.token,((x=(k=L.data.amountOut.fee)==null?void 0:k.raw)!=null?x:On).add((K=(B=v.amountOut.fee)==null?void 0:B.raw)!=null?K:On)):void 0,middleToken:L.data.amountOut.amount.token,poolReady:L.data.poolReady&&v.poolReady,poolType:[L.data.poolType,v.poolType],feeConfig:f,expirationTime:un(L.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:w}=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:[w],expirationTime:un(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(V({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ii(q(V({},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(V({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ii(q(V({},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 _e(this.scope.connection,Array.from(r).map(l=>({pubkey:new ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Da.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Zr.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(V({},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=V({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:La({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:_o(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:ht({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:q(V({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 ny,Transaction as Ja,TransactionInstruction as oy}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as iy}from"@solana/spl-token";import Hl from"bn.js";var Tt=class extends De{static getPdaPoolId(e,t){return pe([Tt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return pe([Tt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Hl(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=>Tt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Tt.VERSION_PROJECT.length;l++)a.push(...r.map(m=>Tt.getPdaOwnerId(t,m,o,l).publicKey));let c=await on(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!==Tt.POOL_LAYOUT.span||b.data.length!==Tt.OWNER_LAYOUT.span)continue;let g=Tt.POOL_LAYOUT.decode(y.data),A=Tt.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(B=>B.debtAmount.gt(new Hl(0))).filter(B=>!B).length!==3,k=i>w&&i<T&&g.status===1,x=h&&k;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:Tt.VERSION_PROJECT[m],openTime:w,endTime:T,canClaim:x,canClaimErrorType:h?k?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:[Tt.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:[Tt.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 Rs(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ja().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Ja().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ja().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),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:iy,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 oy({keys:i,programId:e,data:a})}},nn=Tt;nn.CLAIMED_NUM=3,nn.POOL_LAYOUT=_([xe(8),E("bump"),E("status"),P("openTime"),P("endTime"),F("ammId"),Q(_([E("mintDecimals"),F("mintAddress"),F("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),Tt.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),nn.OWNER_LAYOUT=_([xe(8),E("bump"),E("version"),F("poolId"),F("owner"),P("lpAmount"),Q(_([F("mintAddress"),P("debtAmount"),P("claimedAmount")]),Tt.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),nn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ny(e)),nn.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},nn.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ui}from"@solana/web3.js";import Zl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as sy,TransactionInstruction as Ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as jl}from"@solana/spl-token";var ry=_([E("instruction"),mc("amount")]),qi=_([E("instruction")]);function cs({programId:s},e){let t=[{pubkey:jl,isSigner:!1,isWritable:!1},{pubkey:_u,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(qi.span);return qi.encode({instruction:2},n),new Ql({keys:t,programId:s,data:n})}function eu(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(qi.span);qi.encode({instruction:2},r);let a=[{pubkey:jl,isWritable:!1,isSigner:!1},{pubkey:sy,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 Ql({programId:e.programId,keys:a,data:r})}var ay={[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},Go=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=ay[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?[cs({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[cs({programId:new Ui(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[cs({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Ui(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 Ui(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[eu(q(V({},A),{side:"base"}))]:[],...m?[eu(q(V({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as uy}from"@solana/web3.js";import{MintLayout as cy,TOKEN_2022_PROGRAM_ID as tu,TOKEN_PROGRAM_ID as nu}from"@solana/spl-token";var Gi=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(_n.address,_n),this._mintGroup.official.add(_n.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(V({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?tu.toBase58():nu.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 _n;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(V({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new uy(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=cy.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 ls=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 an(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 Gi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Di({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Li({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new _i({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new nn({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Vo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Go({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Wi({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=ly({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new kr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new ls(q(V({},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(hr);return this._owner.publicKey}setOwner(e){return this._owner=e?new an(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(oc);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(hr),new Error(hr)}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(V({},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{ls as Raydium};
1
+ var Jl=Object.defineProperty,em=Object.defineProperties;var tm=Object.getOwnPropertyDescriptors;var Hi=Object.getOwnPropertySymbols;var yu=Object.prototype.hasOwnProperty,bu=Object.prototype.propertyIsEnumerable;var fu=(s,e,t)=>e in s?Jl(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,V=(s,e)=>{for(var t in e||(e={}))yu.call(e,t)&&fu(s,t,e[t]);if(Hi)for(var t of Hi(e))bu.call(e,t)&&fu(s,t,e[t]);return s},q=(s,e)=>em(s,tm(e));var Ge=(s,e)=>{var t={};for(var n in s)yu.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&Hi)for(var n of Hi(s))e.indexOf(n)<0&&bu.call(s,n)&&(t[n]=s[n]);return t};import{merge as ly}from"lodash";import nc from"axios";import{PublicKey as Au}from"@solana/web3.js";import{get as gu,set as nm}from"lodash";var ds=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}},Pu={},om={};function we(s){let e=gu(Pu,s);if(!e){let t=gu(om,s);e=new ds({name:s,logLevel:t}),nm(Pu,s,e)}return e}import{MINT_SIZE as im,TOKEN_PROGRAM_ID as rm,getTransferFeeConfig as sm,unpackMint as am}from"@solana/spl-token";var ps=we("Raydium_accountInfo_util");async function on(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=V({batchRequest:!1},t),r=fs(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=fs(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ps.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"&&ps.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new Au(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ps.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(s,e,t){let n=await on(s,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(V({},o),{accountInfo:n[i]}))}async function Io({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await _e(s,e.map(c=>({pubkey:gt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<im){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=am(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(V({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||rm,feeConfig:(a=sm(u))!=null?a:void 0})}return o[Au.default.toBase58()]=o[Z.toBase58()],o}import fn from"bn.js";var Bo=9e15,Vn=1e9,ys="0123456789abcdef",Zi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",$i="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",bs={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Bo,maxE:Bo,crypto:!1},Tu,wn,be=!0,er="[DecimalError] ",Fn=er+"Invalid argument: ",Iu=er+"Precision limit exceeded",Bu=er+"crypto unavailable",xu="[object Decimal]",Pt=Math.floor,it=Math.pow,um=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,cm=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,lm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Su=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,rn=1e7,me=7,mm=9007199254740991,dm=Zi.length-1,gs=$i.length-1,G={toStringTag:xu};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=pm(n,Nu(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=Pt((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=Ve(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-Pt(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 Ve(this,new this.constructor(s))};G.dividedToIntegerBy=G.divToInt=function(s){var e=this,t=e.constructor;return oe(Ve(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/nr(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=xo(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=xo(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/nr(5,s)),o=xo(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,Ve(t.sinh(),t.cosh(),n.precision=s,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var s=this,e=s.constructor,t=s.abs().cmp(1),n=e.precision,o=e.rounding;return t!==-1?t===0?s.isNeg()?dn(e,n,o):new e(0):new e(NaN):s.isZero()?dn(e,n+4,o).times(.5):(e.precision=n+6,e.rounding=1,s=new e(1).minus(s).div(s.plus(1)).sqrt().atan(),e.precision=n,e.rounding=o,s.times(2))};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=Ve(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=dn(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<=gs)return r=dn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=gs)return r=dn(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&&Pt(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?Ji(l,a+10):vn(s,a),c=Ve(r,n,a,1),Xo(c.d,o=m,d))do if(a+=10,r=vn(u,a),n=e?Ji(l,a+10):vn(s,a),c=Ve(r,n,a,1),!i){+dt(c.d).slice(o+1,o+15)+1==1e14&&(c=oe(c,m+1,0));break}while(Xo(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=Pt(s.e/me),l=Pt(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]=rn-1;--u[o],u[n]+=rn}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=tr(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=Ve(t,s.abs(),0,3,1),e.s*=s.s):e=Ve(t,s,0,n.modulo,1),e=e.times(s),be=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return Ps(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=Pt(m.e/me),n=Pt(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)/rn|0,u[o]%=rn;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=tr(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=Ku(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=ym(n,Nu(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=Pt((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(Ve(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=Ve(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=Pt(l.e/me)+Pt(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%rn|0,e=a/rn|0;i[o]=(i[o]+e)%rn|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=tr(i,t),be?oe(s,m.precision,m.rounding):s};G.toBinary=function(s,e){return As(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:(Ot(s,0,Vn),e===void 0?e=n.rounding:Ot(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=pn(n,!0):(Ot(s,0,Vn),e===void 0?e=o.rounding:Ot(e,0,8),n=oe(new o(n),s+1,e),t=pn(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=pn(o):(Ot(s,0,Vn),e===void 0?e=i.rounding:Ot(e,0,8),n=oe(new i(o),s+o.e+1,e),t=pn(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=Ku(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=Ve(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=Ve(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=Ve(u,n,i,1).minus(p).abs().cmp(Ve(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 As(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:Ot(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=Ve(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 As(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=Pt(s.e/me),e>=s.d.length-1&&(t=u<0?-u:u)<=mm)return o=Cu(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)?Pt(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=Ps(s.times(vn(a,n+t)),n),o.d&&(o=oe(o,n+5,1),Xo(o.d,n,i)&&(e=n+10,o=oe(Ps(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=pn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Ot(s,1,Vn),e===void 0?e=o.rounding:Ot(e,0,8),n=oe(new o(n),s,e),t=pn(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):(Ot(s,1,Vn),e===void 0?e=n.rounding:Ot(e,0,8)),oe(new n(t),s,e)};G.toString=function(){var s=this,e=s.constructor,t=pn(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=pn(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 Ot(s,e,t){if(s!==~~s||s<e||s>t)throw Error(Fn+s)}function Xo(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 Qi(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]+=ys.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 pm(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/nr(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=xo(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 Ve=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,w,T,h,k,x,B,K,I,C,O,L=n.constructor,N=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new L(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?N*0:N/0);for(c?(p=1,l=n.e-o.e):(c=rn,p=me,l=Pt(n.e/p)-Pt(o.e/p)),C=v.length,K=R.length,g=new L(N),A=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,i==null?(k=i=L.precision,r=L.rounding):a?k=i+(n.e-o.e)+1:k=i,k<0)A.push(1),f=!0;else{if(k=k/p+2|0,m=0,C==1){for(d=0,v=v[0],k++;(m<K||d)&&k--;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,w=R.slice(0,C),T=w.length;T<C;)w[T++]=0;O=v.slice(),O.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,w,C,T),u<0?(h=w[0],C!=T&&(h=h*c+(w[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(v,d,c),b=y.length,T=w.length,u=e(y,w,b,T),u==1&&(d--,t(y,C<b?O:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(w,y,T,c),u==-1&&(T=w.length,u=e(v,w,C,T),u<1&&(d++,t(w,C<T?O:v,T,c))),T=w.length):u===0&&(d++,w=[0]),A[m++]=d,u&&w[0]?w[T++]=R[B]||0:(w=[R[B]],T=1);while((B++<K||w[0]!==void 0)&&k--);f=w[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,Tu=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]==rn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=rn)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 pn(s,e,t){if(!s.isFinite())return Lu(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 tr(s,e){var t=s[0];for(e*=me;t>=10;t/=10)e++;return e}function Ji(s,e,t){if(e>dm)throw be=!0,t&&(s.precision=t),Error(Iu);return oe(new s(Zi),e,1,!0)}function dn(s,e,t){if(e>gs)throw Error(Iu);return oe(new s($i),e,t,!0)}function Ku(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 Cu(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),ku(i.d,r)&&(o=!0)),t=Pt(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ku(e.d,r)}return be=!0,i}function wu(s){return s.d[s.d.length-1]&1}function Ru(s,e,t){for(var n,o,i=new s(e[0]),r=0;++r<e.length;){if(o=new s(e[r]),!o.s){i=o;break}n=i.cmp(o),(n===t||n===0&&i.s===t)&&(i=o)}return i}function Ps(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(Ve(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&&Xo(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,w=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=w):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=Ji(g,l+2,w).times(i+""),y=vn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=w,e==null?oe(y,w,A,be=!0):y;for(m=y,c=r=y=Ve(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(Ve(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(Ji(g,l+2,w).times(i+""))),c=Ve(c,new g(p),l,1),e==null)if(Xo(c.d,l-f,A,a))g.precision=l+=f,u=r=y=Ve(m.minus(1),m.plus(1),l,1),d=oe(y.times(y),l,1),o=a=1;else return oe(c,g.precision=w,A,be=!0);else return g.precision=w,c;c=u,o+=2}}function Lu(s){return String(s.s*s.s/0)}function ji(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 fm(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Su.test(e))return ji(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(cm.test(e))t=16,e=e.toLowerCase();else if(um.test(e))t=2;else if(lm.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=Cu(n,new n(t),i,i*2)),u=Qi(e,t,rn),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=tr(u,l),s.d=u,be=!1,r&&(s=Ve(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?it(2,c):zo.pow(2,c))),be=!0,s)}function ym(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:xo(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/nr(5,t)),e=xo(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 xo(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=Ve(a.times(c),new s(e++*e++),l,1),a=o?n.plus(r):n.minus(r),n=Ve(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 nr(s,e){for(var t=s;--e;)t*=s;return t}function Nu(s,e){var t,n=e.s<0,o=dn(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=wu(t)?n?2:3:n?4:1,e;wn=wu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function As(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(Ot(t,1,Vn),n===void 0?n=p.rounding:Ot(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Lu(s);else{for(l=pn(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=Qi(pn(d),10,o),d.e=d.d.length),m=Qi(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=Ve(s,d,t,n,0,o),m=s.d,i=s.e,u=Tu),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+=ys.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=Qi(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=ys.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 ku(s,e){if(s.length>e)return s.length=e,!0}function bm(s){return new this(s).abs()}function gm(s){return new this(s).acos()}function Pm(s){return new this(s).acosh()}function Am(s,e){return new this(s).plus(e)}function wm(s){return new this(s).asin()}function km(s){return new this(s).asinh()}function hm(s){return new this(s).atan()}function Tm(s){return new this(s).atanh()}function Im(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=dn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?dn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=dn(this,i,1).times(.5),t.s=s.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Ve(s,e,i,1)),e=dn(this,i,1),this.precision=n,this.rounding=o,t=s.s<0?t.minus(e):t.plus(e)):t=this.atan(Ve(s,e,i,1)),t}function Bm(s){return new this(s).cbrt()}function xm(s){return oe(s=new this(s),s.e+1,2)}function Sm(s,e,t){return new this(s).clamp(e,t)}function Km(s){if(!s||typeof s!="object")throw Error(er+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,Vn,"rounding",0,8,"toExpNeg",-Bo,0,"toExpPos",0,Bo,"maxE",0,Bo,"minE",-Bo,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=bs[t]),(n=s[t])!==void 0)if(Pt(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]=bs[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(Bu);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function Cm(s){return new this(s).cos()}function Rm(s){return new this(s).cosh()}function Ou(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,hu(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}if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return ji(u,i.toString())}if(c==="string")return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Su.test(i)?ji(u,i):fm(u,i);if(c==="bigint")return i<0?(i=-i,u.s=-1):u.s=1,ji(u,i.toString());throw Error(Fn+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=Km,o.clone=Ou,o.isDecimal=hu,o.abs=bm,o.acos=gm,o.acosh=Pm,o.add=Am,o.asin=wm,o.asinh=km,o.atan=hm,o.atanh=Tm,o.atan2=Im,o.cbrt=Bm,o.ceil=xm,o.clamp=Sm,o.cos=Cm,o.cosh=Rm,o.div=Lm,o.exp=Nm,o.floor=Om,o.hypot=Mm,o.ln=vm,o.log=Fm,o.log10=_m,o.log2=Vm,o.max=Em,o.min=Wm,o.mod=Dm,o.mul=qm,o.pow=Um,o.random=Gm,o.round=Xm,o.sign=zm,o.sin=Ym,o.sinh=Hm,o.sqrt=Qm,o.sub=jm,o.sum=Zm,o.tan=$m,o.tanh=Jm,o.trunc=ed,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 Lm(s,e){return new this(s).div(e)}function Nm(s){return new this(s).exp()}function Om(s){return oe(s=new this(s),s.e+1,3)}function Mm(){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 hu(s){return s instanceof zo||s&&s.toStringTag===xu||!1}function vm(s){return new this(s).ln()}function Fm(s,e){return new this(s).log(e)}function Vm(s){return new this(s).log(2)}function _m(s){return new this(s).log(10)}function Em(){return Ru(this,arguments,-1)}function Wm(){return Ru(this,arguments,1)}function Dm(s,e){return new this(s).mod(e)}function qm(s,e){return new this(s).mul(e)}function Um(s,e){return new this(s).pow(e)}function Gm(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:Ot(s,1,Vn),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(Bu);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 Xm(s){return oe(s=new this(s),s.e+1,this.rounding)}function zm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function Ym(s){return new this(s).sin()}function Hm(s){return new this(s).sinh()}function Qm(s){return new this(s).sqrt()}function jm(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 $m(s){return new this(s).tan()}function Jm(s){return new this(s).tanh()}function ed(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 zo=G.constructor=Ou(bs);Zi=new zo(Zi);$i=new zo($i);var M=zo;import ud from"big.js";import rr from"bn.js";import td from"toformat";var nd=td,Yo=nd;import ir from"big.js";import id from"bn.js";import rd from"decimal.js-light";import Ho from"bn.js";var Mu=9007199254740991;function ne(s){let e=we("Raydium_parseBigNumberish");if(s instanceof Ho)return s;if(typeof s=="string"){if(s.match(/^-?[0-9]+$/))return new Ho(s);e.logWithError(`invalid BigNumberish string: ${s}`)}return typeof s=="number"?(s%1&&e.logWithError(`BigNumberish number underflow: ${s}`),(s>=Mu||s<=-Mu)&&e.logWithError(`BigNumberish number overflow: ${s}`),new Ho(String(s))):typeof s=="bigint"?new Ho(s.toString()):(e.error(`invalid BigNumberish value: ${s}`),new Ho(0))}var or=we("module/fraction"),ws=Yo(ir),Qo=Yo(rd),sd={[0]:Qo.ROUND_DOWN,[1]:Qo.ROUND_HALF_UP,[2]:Qo.ROUND_UP},ad={[0]:ir.roundDown,[1]:ir.roundHalfUp,[2]:ir.roundUp},Ke=class{constructor(e,t=new id(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)||or.logWithError(`${e} is not an integer.`),e<=0&&or.logWithError(`${e} is not positive.`),Qo.set({precision:e+1,rounding:sd[n]});let o=new Qo(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)||or.logWithError(`${e} is not an integer.`),e<0&&or.logWithError(`${e} is negative.`),ws.DP=e,ws.RM=ad[n]||1,new ws(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var cd=we("Raydium_amount"),vu=Yo(ud);function ld(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")):cd.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 rr(0),a=ks.pow(new rr(t.decimals));if(o)r=ne(n);else{let c=new rr(0),u=new rr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=ld(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 vu.DP=this.token.decimals,new vu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as md}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";var _n={chainId:101,address:md.default.toBase58(),programId:Fu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},At={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fu.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 xs}from"@solana/web3.js";import{PublicKey as Xe,SystemProgram as Vu,SYSVAR_RENT_PUBKEY as dd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as pd}from"@solana/spl-token";function S({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var hs=[S({pubkey:pd,isWritable:!1}),S({pubkey:Vu.programId,isWritable:!1}),S({pubkey:dd,isWritable:!1})];function Ts({publicKey:s,transformSol:e}){let t=Is(s.toString());if(t instanceof Xe)return e&&t.equals(ut)?Z:t;if(e&&t.toString()===ut.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 Is(s){try{return new Xe(s)}catch{return s}}var sr=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),En=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),pt=new Xe("SysvarRent111111111111111111111111111111111"),_u=new Xe("SysvarC1ock11111111111111111111111111111111"),sn=new Xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),fd=new Xe("Sysvar1nstructions1111111111111111111111111"),Bs=Vu.programId,Jy=new Xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),eb=new Xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),tb=new Xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),nb=new Xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),ob=new Xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),ib=new Xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),rb=new Xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),sb=new Xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ab=new Xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),ub=new Xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),cb=new Xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Xe("So11111111111111111111111111111111111111112"),ut=Xe.default;function gt(s){return Ts({publicKey:s,transformSol:!0})}var Ss=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===ut.toBase58()||e instanceof xs&&ut.equals(e)){this.decimals=At.decimals,this.symbol=At.symbol,this.name=At.name,this.mint=new xs(At.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?xs.default:Ts({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ze=Ss;ze.WSOL=new Ss(q(V({},At),{mint:At.address}));var Ks=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},ar=Ks;ar.SOL=new Ks(_n);import yd from"bn.js";var Eu=new Ke(new yd(100)),ct=class extends Ke{toSignificant(e=5,t,n){return this.mul(Eu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eu).toFixed(e,t,n)}};var bd=we("Raydium_price"),Mt=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(Cs(n.decimals),Cs(o.decimals))}get raw(){return new Ke(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&bd.logWithError("mul token not equals");let n=super.mul(t);return new Mt({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 vt=new fn(0),Wu=new fn(1),$b=new fn(2),Jb=new fn(3),eg=new fn(5),ks=new fn(10),tg=new fn(100),ng=new fn(1e3),og=new fn(1e4);function Cs(s){return ks.pow(ne(s))}function ur(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 jo(s,e,t){return s.mul(e).add(t).sub(new fn(1)).div(t)}function cr(s,e,t){return s.mul(e).div(t)}function fs(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var an=class{constructor(e){this._owner=e}get publicKey(){return an.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return an.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return an.isKeyPair(this._owner)}get isPublicKey(){return an.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!an.isKeyPair(e)}};import{PublicKey as hd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";import{ComputeBudgetProgram as Du,Keypair as Uu,PublicKey as gd,Transaction as Gu,TransactionMessage as Pd,VersionedTransaction as Xu}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 Ad}from"@solana/spl-token";var qu=we("Raydium_txUtil"),zu=1644;function lr(s){let e=[],t=[];return s.microLamports&&(e.push(Du.setComputeUnitPrice({microLamports:s.microLamports})),t.push(X.SetComputeUnitPrice)),s.units&&(e.push(Du.setComputeUnitLimit({units:s.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function So(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 mr(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 Rs(s,e){s.length<1&&qu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&qu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Gu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<zu}catch{return!1}}function pe(s,e){let[t,n]=gd.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function Zo({instructions:s,payer:e,signers:t}){return Rs(s,[e,...t])}function $o({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uu.generate().publicKey.toString()}){let i=new Pd({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xu(i).serialize()).toString("base64").length<zu}catch{return!1}}var wd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),kd=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof Xu&&(e=wd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function eo(s){let e=[];return s.forEach(t=>{t instanceof Gu&&(t.recentBlockhash||(t.recentBlockhash=Ad.toBase58()),t.feePayer||(t.feePayer=Uu.generate().publicKey)),e.push(kd(t))}),console.log("simulate tx string:",e),e}function ee(s,e,t){return pe([s.toBuffer(),(t!=null?t:Td).toBuffer(),e.toBuffer()],new hd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as re}from"@solana/web3.js";var Yu=new re("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Hu=new re("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Qu=new re("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jo=new re("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ig=new re("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ju=new re("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ls=new re("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),dr=new re("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bg=new re("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Zu=new re("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),to=new re("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ei=new re("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new re("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),no=new re("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xg=new re("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),$u=new re("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Id=new re("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Bd=new re("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),xd=new re("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Sd=new re("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),oo=new re("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Ju=new re("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sg=new re("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),fr=new re("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),yr=new re("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),rt=new re("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Kg=new re("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Cg=new re("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Rg=new re("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Lg=new re("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ng=new re("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ti={IDO_PROGRAM_ID_V1:Id,IDO_PROGRAM_ID_V2:Bd,IDO_PROGRAM_ID_V3:xd,IDO_PROGRAM_ID_V4:Sd};var kn={OPEN_BOOK_PROGRAM:new re("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new re("Ray1111111111111111111111111111111111111111"),AMM_V4:new re("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new re("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new re("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new re("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new re("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new re("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new re("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new re("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new re("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new re("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:re.default,Router:new re("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new re("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new re("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new re("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new re("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new re("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new re("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new re("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new re("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new re("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new re("Ray1111111111111111111111111111111111111111")};import We from"bn.js";var yn=1e4;function Le(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(V({},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===yn){let c=new We(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new We(yn)),new We(yn-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(yn)),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(yn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function un(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 io(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 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,a=Wn(s.mul(new We(o.transferFeeBasisPoints)),new We(yn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function Os(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===yn){let a=new We(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new We(yn)),new We(yn-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(yn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Ms,AddressLookupTableAccount as Ro}from"@solana/web3.js";async function vs({connection:s,address:e,cluster:t="mainnet"}){let n=await on(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Ms(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new Ro({key:a,state:Ro.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Co[a.toString()]=c:Ko[a.toString()]=c}return o}var Ko={},Fs=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Ko[e])return Ko;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Ko[e]=new Ro({key:t,state:Ro.deserialize(n.data)})),Ko},Co={},Vs=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Co[e])return Co;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Co[e]=new Ro({key:t,state:Ro.deserialize(n.data)})),Co};import{PublicKey as Lo,sendAndConfirmTransaction as _s,SystemProgram as Kd,Transaction as ni,TransactionMessage as oi,VersionedTransaction as ii}from"@solana/web3.js";import Cd from"axios";var br=2e3,gr=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 Cd.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}=lr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Kd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Lo(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!==Lo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(V({},t||{})):this.build(t)}build(e){var n;let t=new ni;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 So(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),eo([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 So(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],w=0;for(let T of r){if(++w,w<=p)continue;let h=await _s(this.connection,T,this.signers.find(k=>k.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));eo(A);let w=await this.signAllTransactions(A);if(m){let T=0,h=[],k=async()=>{if(!w[T])return;let x=await this.connection.sendRawTransaction(w[T].serialize(),{skipPreflight:y});h.push({txId:x,status:"sent",signedTx:w[T]}),d==null||d([...h]),T++;let B=!1,K=null,I=null,C=O=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let L=h.findIndex(N=>N.txId===x);if(L>-1){if(h[L].status==="error"||h[L].status==="success")return;h[L].status=O.err?"error":"success"}d==null||d([...h]),O.err||k()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var O;if(B){clearInterval(K);return}try{let L=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});L&&(B=!0,clearInterval(K),C({err:((O=L.meta)==null?void 0:O.err)||null}),console.log("tx status from getTransaction:",x))}catch(L){B=!0,clearInterval(K),console.error("getTransaction timeout:",L,x)}},br)),I=this.connection.onSignature(x,O=>{if(B){this.connection.removeSignatureListener(I);return}B=!0,C(O)},"confirmed"),this.connection.getSignatureStatus(x)};return await k(),{txIds:h.map(x=>x.txId),signedTxs:w}}else{let T=[];for(let h=0;h<w.length;h+=1){let k=await this.connection.sendRawTransaction(w[h].serialize(),{skipPreflight:y});T.push(k)}return{txIds:T,signedTxs:w}}}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=V(V({},this.cluster==="devnet"?await Vs(this.connection):await Fs(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Lo(b));let l=await vs({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Lo.default.toBase58():i!=null?i:await So(this.connection,this.blockhashCommitment),d=new oi({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 ii(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:w}=b||{};if(eo([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await mr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let k of h)try{k.sign(this.signers)}catch{}return{txId:w?"":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),eo(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 mr(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=[],w=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,k=null,x=null,B=K=>{k!==null&&clearInterval(k),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||w()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var K;if(h){clearInterval(k);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(k),B({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(k),console.error("getTransaction timeout:",I,T)}},br)),x=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,B(K)},"confirmed"),this.connection.getSignatureStatus(T)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let w=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(w)}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?lr(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(V({},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(w=>w.isSigner).map(w=>w.pubkey.toString())).flat()).values()].map(A=>new Lo(A));if(p!==t[l]&&u.length<12&&(Zo({instructions:y,payer:this.feePayer,signers:g})||Zo({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,Zo({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ni().add(...i.instructions,...u)):a.push(new ni().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(w=>w.isSigner).map(w=>w.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);Zo({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new ni().add(...i.instructions,...u)):a.push(new ni().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||{},w=g!=null?g:await So(this.connection,this.blockhashCommitment);if(a.forEach(async(h,k)=>{h.recentBlockhash=w,c[k].length&&h.sign(...c[k])}),eo(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,k=[];for(let x of a){if(++h,h<=b){k.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});k.push(B)}return{txIds:k,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)),k=[...a.slice(0,b),...h];if(f){let x=0,B=[],K=async()=>{if(!k[x])return;x<b&&(B.push({txId:"",status:"success",signedTx:k[x]}),y==null||y([...B]),x++,K());let I=await this.connection.sendRawTransaction(k[x].serialize(),{skipPreflight:A});B.push({txId:I,status:"sent",signedTx:k[x]}),y==null||y([...B]),x++;let C=!1,O=null,L=null,N=R=>{O!==null&&clearInterval(O),L!==null&&this.connection.removeSignatureListener(L);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&&(O=setInterval(async()=>{var R;if(C){clearInterval(O);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(O),N({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(O),console.error("getTransaction timeout:",v,I)}},br)),L=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(L);return}C=!0,N(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:B.map(I=>I.txId),signedTxs:k}}else{let x=[];for(let B=0;B<k.length;B+=1){let K=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:A});x.push(K)}return{txIds:x,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var w;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[]}=A,r=Ge(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=V(V({},this.cluster==="devnet"?await Vs(this.connection):await Fs(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let T of c)a[T]===void 0&&u.push(new Lo(T));let l=await vs({connection:this.connection,address:u});for(let[T,h]of Object.entries(l))a[T]=h;let m=t?lr(t):{instructions:[],instructionTypes:[]},d=await So(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(V({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],k=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&($o({instructions:k,payer:this.feePayer,lookupTableAddressAccount:a})||$o({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&&$o({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let B=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ii(B))}else{let B=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ii(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(k=>k.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(k=>p[k]).filter(k=>k!==void 0);if(t&&$o({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let k=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ii(k))}else{let k=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ii(k))}y.push(h)}return(w=this.owner)!=null&&w.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:k,skipTxCount:x=0,recentBlockHash:B,skipPreflight:K=!0}=T||{};if(f.map(async(C,O)=>{y[O].length&&C.sign(y[O]),B&&(C.message.recentBlockhash=B)}),eo(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,O=[];for(let L of f){if(++C,C<=x){console.log("skip tx: ",C),O.push("tx skipped");continue}let N=await this.connection.sendTransaction(L,{skipPreflight:K});await mr(this.connection,N),O.push(N)}return{txIds:O,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)),O=[...f.slice(0,x),...C];if(h){let L=0,N=[],R=async()=>{if(!O[L])return;if(L<x){N.push({txId:"",status:"success",signedTx:O[L]}),k==null||k([...N]),L++,R();return}let v=await this.connection.sendTransaction(O[L],{skipPreflight:K});N.push({txId:v,status:"sent",signedTx:O[L]}),k==null||k([...N]),L++;let z=!1,H=null,ce=null,ae=ue=>{H!==null&&clearInterval(H),ce!==null&&this.connection.removeSignatureListener(ce);let ge=N.findIndex(fe=>fe.txId===v);if(ge>-1){if(N[ge].status==="error"||N[ge].status==="success")return;N[ge].status=ue.err?"error":"success"}k==null||k([...N]),ue.err||R()};this.loopMultiTxStatus&&(H=setInterval(async()=>{var ue;if(z){clearInterval(H);return}try{let ge=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});ge&&(z=!0,clearInterval(H),ae({err:((ue=ge.meta)==null?void 0:ue.err)||null}),console.log("tx status from getTransaction:",v))}catch(ge){z=!0,clearInterval(H),console.error("getTransaction timeout:",ge,v)}},br)),ce=this.connection.onSignature(v,ue=>{if(z){this.connection.removeSignatureListener(ce);return}z=!0,ae(ue)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:O}}else{let L=[];for(let N=0;N<O.length;N+=1){let R=await this.connection.sendTransaction(O[N],{skipPreflight:K});L.push(R)}return{txIds:L,signedTxs:O}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};import{PublicKey as Rd}from"@solana/web3.js";import Ld from"bn.js";function Nd(s){return typeof s=="object"&&s!==null&&![ze,Re,Rd,Ke,Ld,Mt,ct].some(e=>typeof e=="object"&&s instanceof e)}function ft(s){return typeof s=="string"?Is(s):Array.isArray(s)?s.map(e=>ft(e)):Nd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,ft(t)])):s}import Od from"bn.js";var Ft=new Od(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"},ec=q(V({},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 tc="ray_tab_hash",Es="ray_req_hash",Md=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem(tc);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem(tc,s)),s},Pr=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(Es)||"[]").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(V({},t),{time:Date.now(),session:Md()}));try{localStorage.setItem(Es,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(Es,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return Pr(q(V({},t),{logCount:s,removeLastLog:!0}))}};var Ar=we("Raydium_Api"),Ws=new Map,Ds=new Map;var wr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=nc.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?ec.BASE_HOST:lt.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return Ar.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(Ar.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&&Pr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Ar.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&&Pr({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),Ar.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_POSITION_LINE||lt.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await nc.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(V({},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=>Ws.has(r)?(n.push(Ws.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=>{Ws.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&&gt(t).toBase58(),n&&n!=="undefined"?gt(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=Ds.get(this.cluster))!=null&&t.length)return Ds.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 Ds.set(this.cluster,e.data.data),e.data.data}};var kr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",oc="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Sr,SystemProgram as mp}from"@solana/web3.js";import{AccountLayout as Mo,createAssociatedTokenAccountIdempotentInstruction as $s,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as dp}from"@solana/spl-token";var qs=(...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 gr({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(qs(e))}logInfo(...e){this.logger.info(qs(e))}logAndCreateError(...e){let t=qs(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as rp,SystemProgram as sp}from"@solana/web3.js";import ap from"bn.js";import{createCloseAccountInstruction as up,createInitializeAccountInstruction as cp,createTransferInstruction as lp,TOKEN_PROGRAM_ID as Oo}from"@solana/spl-token";import{Keypair as tp,PublicKey as Pc}from"@solana/web3.js";import np from"bn.js";import{TOKEN_PROGRAM_ID as op}from"@solana/spl-token";function vd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function Us(s,...e){if(!vd(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 Gs(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 ic(s,e){Us(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Tr=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),cn=(s,e)=>s<<32-e|s>>>e;var uA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Fd(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function Xs(s){return typeof s=="string"&&(s=Fd(s)),Us(s),s}var hr=class{clone(){return this._cloneInto()}},cA={}.toString;function rc(s){let e=n=>s().update(Xs(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Vd(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 sc=(s,e,t)=>s&e^~s&t,ac=(s,e,t)=>s&e^s&t^e&t,Ir=class extends hr{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=Tr(this.buffer)}update(e){Gs(this);let{view:t,buffer:n,blockLen:o}=this;e=Xs(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=Tr(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){Gs(this),ic(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;Vd(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=Tr(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 _d=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),zs=class extends Ir{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=cn(d,7)^cn(d,18)^d>>>3,y=cn(p,17)^cn(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=cn(a,6)^cn(a,11)^cn(a,25),p=l+d+sc(a,c,u)+_d[m]+qn[m]|0,y=(cn(n,2)^cn(n,13)^cn(n,22))+ac(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 uc=rc(()=>new zs);import{PublicKey as Zd}from"@solana/web3.js";import pc,{isBN as fc}from"bn.js";import{bits as Ed,BitStructure as PA,blob as Wd,Blob as AA,cstr as wA,f32 as kA,f32be as hA,f64 as TA,f64be as IA,greedy as BA,Layout as Dd,ns64 as xA,ns64be as SA,nu64 as qd,nu64be as KA,offset as Ud,s16 as CA,s16be as RA,s24 as LA,s24be as NA,s32 as Gd,s32be as OA,s40 as MA,s40be as vA,s48 as FA,s48be as VA,s8 as _A,seq as Xd,struct as EA,Structure as zd,u16 as Yd,u16be as WA,u24 as DA,u24be as qA,u32 as Hd,u32be as UA,u40 as GA,u40be as XA,u48 as zA,u48be as YA,u8 as Qd,UInt as jd,union as HA,Union as QA,unionLayoutDiscriminator as jA,utf8 as ZA}from"@solana/buffer-layout";var Br=Dd,cc=zd;var Ys=jd;var lc=Qd,Ut=Yd;var ri=Hd;var mc=qd;var qe=Gd;var dc=Xd;var xe=Wd;var Hs=Ed,Qs=Ud;var so=class extends Br{constructor(t,n,o){super(t,o);this.blob=xe(t),this.signed=n}decode(t,n=0){let o=new pc(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 pc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},xr=class extends Br{constructor(t){super(8,t);this._lower=Hs(ri(),!1),this._upper=Hs(ri(),!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 V(V({},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 Ys(1,s)}function wt(s){return new Ys(4,s)}function P(s){return new so(8,!1,s)}function se(s){return new so(16,!1,s)}function yc(s){return new so(1,!0,s)}function No(s){return new so(8,!0,s)}function bc(s){return new so(16,!0,s)}var ao=class extends Br{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 ao(xe(32),e=>new Zd(e),e=>e.toBuffer(),s)}function Ye(s){return new ao(lc(),$d,Jd,s)}function $d(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function Jd(s){return s?1:0}function gc(s,e){let t=ri("length"),n=_([t,Q(s,Qs(t,-t.span),"values")]);return new ao(n,({values:o})=>o,o=>({values:o}),e)}function ep(s){let e=ri("length"),t=_([e,xe(Qs(e,-e.span),"data")]);return new ao(t,({data:n})=>n,n=>({data:n}),s)}function Vt(s){return new ao(ep(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var js=class extends cc{decode(e,t){return super.decode(e,t)}};function _(s,e,t){return new js(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:fc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=fc(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 dc(s,o,t)}var uo=_([F("mint"),F("owner"),P("amount"),wt("delegateOption"),F("delegate"),E("state"),wt("isNativeOption"),P("isNative"),P("delegatedAmount"),wt("closeAuthorityOption"),F("closeAuthority")]);var Pw=we("Raydium_Util");function Ac({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=uo.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:Pc.default,amount:new np(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function $e({fromPublicKey:s,programId:e=op,assignSeed:t}){let n=t?btoa(t).slice(0,32):tp.generate().publicKey.toBase58().slice(0,32);return{publicKey:ip(s,n,e),seed:n}}function ip(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=uc(n);return new Pc(o)}function Zs(s){let{mint:e,tokenAccount:t,owner:n,programId:o=Oo}=s;return cp(t,e,n,o)}function hn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Oo}=s;return up(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(uo.span,n),c=ne(t).add(new ap(a)),u=$e({fromPublicKey:o,programId:Oo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[sp.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:uo.span,programId:Oo}),Zs({mint:new rp(At.address),tokenAccount:u.publicKey,owner:i,programId:Oo})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:r?[]:[X.CloseAccount],endInstructions:r?[]:[hn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function wc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Oo}){return lp(s,e,t,BigInt(String(n)),o,i)}var si=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=V(V({},{}),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:dp},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ac({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 Sr(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Sr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(d))).sort((w,T)=>w.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 w=$s(o.payer||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(w),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&Mo.decode(h.data).mint.equals(n)&&Mo.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(w),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(wc({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 w=$e({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Mo.span),h=mp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:w.seed,newAccountPubkey:w.publicKey,lamports:T+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:Mo.span,programId:m});return f.instructions.push(h,Zs({mint:n,tokenAccount:w.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:w.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:w.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 $s(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 Sr(Z).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return V({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=$s(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)&&Mo.decode(y.data).mint.equals(i)&&Mo.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 Sr(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 V({tokenAccount:u},l.AllTxData)}};import{PublicKey as Ce,SystemProgram as Cp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Fc}from"@solana/spl-token";import{PublicKey as ra}from"@solana/web3.js";var Js=_([E("instruction")]),ea=_([E("instruction")]),pp=_([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),se("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),fp=_([P("state"),P("nonce"),F("lpVault"),F("rewardVault"),F(),F(),P(),P(),P("totalReward"),se("perShareReward"),P("lastSlot"),P("perSlotReward")]),yp=_([P("state"),P("nonce"),F("lpVault"),F("rewardVaultA"),P("totalRewardA"),se("perShareRewardA"),P("perSlotRewardA"),E("option"),F("rewardVaultB"),xe(7),P("totalRewardB"),se("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),F()]),bp=_([P(),P("state"),P("nonce"),P("validRewardTokenNum"),se("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(pp,5,"rewardInfos"),F("creator"),F(),Q(P(),32,"padding")]),gp=new Proxy(fp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),Pp=new Proxy(yp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},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)}}),Kr=new Proxy(bp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(V({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),Ap=_([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),ta=_([E("instruction"),P("nonce"),Q(Ap,5,"rewardTimeInfo")]),na=_([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),oa=_([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),jw=_([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),ia=_([P("state"),F("id"),F("owner"),P("deposited"),Q(se(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),Zw=_([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),kc=_([P("state"),F("id"),F("owner"),P("deposited"),Q(se(),2,"rewardDebts"),Q(P(),17)]),hc=_([P(),P("state"),F("id"),F("owner"),P("deposited"),Q(se(),5,"rewardDebts"),Q(P(),16)]),Gt=_([E("instruction"),P("amount")]),wp=_([F("mint"),F("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),yc("digitShift"),Q(E(),7,"reserved1"),Q(P(),7,"reserved2")]),kp=_([xe(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(E(),32,"reserved1"),Q(wp,4,"votingMints"),No("timeOffset"),E("bump"),Q(E(),7,"reserved2"),Q(P(),11,"reserved3")]),hp=_([No("startTime"),No("endTime"),E("kind"),Q(E(),15,"reserved")]),Tp=_([Q(hp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),E("votingMintConfigIdx"),Q(E(),29,"reserved")]),Ip=_([xe(8),F("voterAuthority"),F("registrar"),Q(Tp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),Q(E(),94,"reserved")]);import{NATIVE_MINT as sk}from"@solana/spl-token";var ak=we("Raydium_farm_config"),Tc=new ra("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ic=new ra("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var uk=new ra("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Bc={3:ia,5:kc,6:hc},sa=s=>[3,4,5,6].indexOf(s)!==-1,aa=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={[Yu.toString()]:3,[Hu.toString()]:4,[Qu.toString()]:5,[Jo.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 Kc,SYSVAR_CLOCK_PUBKEY as ci,SYSVAR_RENT_PUBKEY as Sp,TransactionInstruction as Jt}from"@solana/web3.js";import Cc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Wk,createAssociatedTokenAccountIdempotentInstruction as Dk,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import Bp from"bn.js";var xp=we("Raydium.farm.util");function ai({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=pe([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}=pe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var xc=({programId:s,poolId:e})=>pe([e.toBuffer()],s);function Sc(s){return{isSet:new Bp(1),rewardPerSecond:ne(s.perSecond),rewardOpenTime:ne(s.openTime),rewardEndTime:ne(s.endTime),rewardType:ne(Xn[s.rewardType])}}function ua(s){return ne(s.endTime).sub(ne(s.openTime)).mul(ne(s.perSecond))}function ui(s){let e=Bc[s];return e||xp.logWithError("invalid version",s),e}var Kp=we("Raydium_farm_instruction"),$k={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 li(s){let{version:e,id:t,ledger:n,programId:o,owner:i}=s,r={3:9,5:10}[e];r||Kp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Js.span);Js.encode({instruction:r},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:i,isWritable:!1}),S({pubkey:Kc.programId,isWritable:!1}),S({pubkey:Sp,isWritable:!1})];return{instruction:new Jt({programId:o,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Rc(s){var n;let e=Buffer.alloc(ta.span);ta.encode({instruction:0,nonce:new Cc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...hs,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:ut}),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 Lc(s){let e=Buffer.alloc(ea.span);ea.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 ca({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(na.span);na.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 la({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(oa.span);oa.encode({instruction:4,isSet:new Cc(1),rewardPerSecond:ne(o.perSecond),rewardOpenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardType:ne(Xn[o.rewardType])},i);let r=[...hs,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 mi(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(Gt.span);Gt.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 di(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(Gt.span);Gt.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:ci,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,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=_([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:ci,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 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:3}),m=Buffer.alloc(Gt.span);Gt.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:ci,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 Oc(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(Gt.span);Gt.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:ci,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 Mc(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(Gt.span);Gt.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:ci,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 vc(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(Gt.span);Gt.encode({instruction:1,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:Kc.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 fi=class extends De{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ut)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ua(q(V({},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=Jo,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:Tc,lockVault:(B=a==null?void 0:a.vault)!=null?B:Ic},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(Kr.span);l.addInstruction({instructions:[Cp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Kr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=xc({programId:new Ce(u.programId),poolId:d.publicKey}),b=ai({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(Sc(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 O=K.mint.equals(ut)?new Ce(At.address):K.mint;A.push({rewardMint:O,rewardVault:ai({programId:u.programId,poolId:d.publicKey,mint:O,type:"rewardVault"}),userRewardToken:I})}let{account:w,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),w||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:k}=Rc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:w,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:w,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(ut)?new Ce(At.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:ut,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:[ca({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(ut)?new Ce(At.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:ut,{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 w=ca({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[w],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(ut)?new Ce(At.address):o.mint,d=ai({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:[la({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(ut)?new Ce(At.address):m.mint,p=ai({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=la({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(V({},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),sa(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}),w=this.createTxBuilder(i);w.addCustomComputeBudget(l),w.addTipInstruction(m);let T={};for(let N of this.scope.account.tokenAccounts)if(a){let R=ee(this.scope.ownerPubKey,N.mint,N.programId).publicKey;N.publicKey&&R.equals(N.publicKey)&&(T[N.mint.toString()]=N.publicKey)}else T[N.mint.toString()]=N.publicKey;let h=g.lpMint,k=T[h.address];k||this.logAndCreateError("you don't have any lp","lp zero",T);let x=[];for(let N of d){let R=r&&N.mint.address===Z.toString(),v=T[N.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:N.mint.programId,mint:new Ce(N.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&&w.addInstruction(H)}T[N.mint.address]=v,x.push(v)}let B,K=await this.scope.connection.getAccountInfo(A);if(K&&(B=ui(f).decode(K.data)),n.programId!==Jo.toString()&&n.programId!==kn.FARM_PROGRAM_ID_V6.toString()&&!B){let{instruction:N,instructionType:R}=li({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[N],instructionTypes:[R]})}let I=aa({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});I&&this.logAndCreateError(I);let C={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:k,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(N=>new Ce(N))},O=f===6?vc(C):f===5?Mc(C):Oc(C),L={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return w.addInstruction({instructions:[O],instructionTypes:[L[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];sa(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)ui(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:O,instructionType:L}=li({id:new Ce(y.id),programId:new Ce(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[O],instructionTypes:[L]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,w=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:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!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(),O=g[I.mint.address];if(!O){let{account:L,instructionParams:N}=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});O=L,N&&b.addInstruction(N)}g[I.mint.address]=O,h.push(O)}let k=aa({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});k&&this.logAndCreateError(k);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?mi(x):f===5?di(x):f===4?Nc(x):pi(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=>gt(b.mint.address).equals(gt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:ut,m=this.createTxBuilder(r),d;if(t.equals(ut)||t.equals(Ce.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ua(q(V({},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:[Fc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=Lc({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(V({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,w=Zt[y],T=b.address,h=n&&T===Z.toString(),k=m[T];if(!k){let{account:O,instructionParams:L}=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});k=O,L&&l.addInstruction(L)}m[T.toString()]=k;let x=[];for(let O of g){let L=n&&O.mint.address===Z.toString(),N=m[O.mint.address];if(!N)if(L){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Ce(O.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:i,checkCreateATAOwner:r});N=R,v&&l.addInstruction(v)}else{let R=new Ce(O.mint.address);N=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Fc(this.scope.ownerPubKey,N,this.scope.ownerPubKey,R)]})}m[O.mint.address]=N,x.push(N)}let B=p[A],K={amount:vt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:B,lpAccount:k,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(O=>new Ce(O))},I=w===6?mi(K):w===5?di(K):pi(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as et}from"@solana/web3.js";import{AccountLayout as Af,NATIVE_MINT as Gr,TOKEN_PROGRAM_ID as Hn}from"@solana/spl-token";import{Keypair as Mr,PublicKey as Y,SystemProgram as Sn,TransactionInstruction as yt}from"@solana/web3.js";import ka from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as hi,TOKEN_2022_PROGRAM_ID as je,TOKEN_PROGRAM_ID as Oe}from"@solana/spl-token";import Ep from"bn.js";import en from"bn.js";var He=new en(0),Xt=new en(1),In=new en(-1),st=new en(1).shln(64),Cr=new en(1).shln(128),yi=st.sub(Xt),bi=64,Vc=Cr.subn(1),kt=-443636,Bt=-kt,xt=new en("4295048016"),St=new en("79226673521066979257578248091"),Rr=new en("4295048017"),Lr=new en("79226673521066979257578248090"),_c=16,Ec="59543866431248",Wc="184467440737095516",Dc="15793534762490258745",Nr=new en(10).pow(new en(6));var qc={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:[]},Ch=new en("18446744073700000000");import Pe from"bn.js";function Or(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function ma(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function da(s,e){let t=0;for(let n=0;n<s&&!e.testn(n);n++)t++;return t}function gi(s,e){for(let t=0;t<s;t++)if(e.testn(t))return!1;return!0}function Uc(s,e){return gi(s,e)?null:ma(s,e)}function Gc(s,e){return gi(s,e)?null:da(s,e)}var Mh=Buffer.from("amm_config","utf8"),pa=Buffer.from("pool","utf8"),fa=Buffer.from("pool_vault","utf8"),Lp=Buffer.from("pool_reward_vault","utf8"),Xc=Buffer.from("position","utf8"),Np=Buffer.from("tick_array","utf8"),Op=Buffer.from("operation","utf8"),Mp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),vp=Buffer.from("observation","utf8");function zc(s,e,t,n){return pe([pa,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function ya(s,e,t){return pe([fa,e.toBuffer(),t.toBuffer()],s)}function Yc(s,e,t){return pe([Lp,e.toBuffer(),t.toBuffer()],s)}function ke(s,e,t){return pe([Np,e.toBuffer(),Or(t)],s)}function ln(s,e,t,n){return pe([Xc,e.toBuffer(),Or(t),Or(n)],s)}function Kt(s,e){return pe([Xc,e.toBuffer()],s)}function Bn(s){return pe([Buffer.from("metadata","utf8"),sn.toBuffer(),s.toBuffer()],sn)}function Pi(s){return pe([Op],s)}function Je(s,e){return pe([Mp,e.toBuffer()],s)}function Hc(s,e){return pe([vp,e.toBuffer()],s)}var Qc=Buffer.from("locked_position","utf8");function ba(s,e){return pe([Qc,e.toBuffer()],s)}function vo(s,e){return pe([Qc,e.toBuffer()],s)}var Fp=Buffer.from("support_mint","utf8");function ga(s,e){return pe([Fp,e.toBuffer()],s)}import{PublicKey as zt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as jc}from"@solana/spl-token";import Ue from"bn.js";import bn from"bn.js";var Ai=class{static getfeeGrowthInside(e,t,n){let o=new bn(0),i=new bn(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 bn(0),a=new bn(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,st),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,st),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,st),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,st),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,st),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,st),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 bn(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 bn(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 bn(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 bn(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,w;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 bn(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,r,!0),Le(new bn(new M(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}};var Vp=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(Vp/2));for(let p=0;p<l.length;p++){let{publicKey:f}=ke(t,n,l[p]);c.push(f)}let m=(await on(e,c)).map(p=>p!==null?wi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(V({},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=at-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<at;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=ke(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<at;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=ke(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>Bt)return!1;let n=$.getTickArrayStartIndexByTick(kt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return at*e}};var Pa=14,xn=class{static maxTickInTickarrayBitmap(e){return e*at*co}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*at,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=Uc(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=Gc(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)}}}},ki=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(Bt<=t)throw Error(`extensionTickBoundary check error: ${Bt}, ${t}`);if(n<=kt)throw Error(`extensionTickBoundary check error: ${n}, ${kt}`);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(co-1-a),u=gi(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:i}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=gi(512,c)?null:da(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=co-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}=lo.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}=ke(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=lo.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])?ki.checkTickArrayIsInit(Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):$.checkTickArrayIsInitialized($.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=ke(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}=ke(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}=ki.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<kt||t>Bt)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(V({},m),{perSecond:ye.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new zt(d)});if(p.tokenMint.equals(zt.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,st),w=p.rewardTotalEmissioned.add(A);r.push(q(V({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,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>Bt&&(t=Te.getArrayStartIndex(Bt,e)+Te.tickCount(e)),n<kt&&(n=Te.getArrayStartIndex(kt,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)*co}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await _e(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=$c.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}=ke(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let r=await _e(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=wi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(V({},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(Kt(p,d).publicKey);let l=await on(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Fo.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:w,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:w,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(V({},B),{pendingReward:new Ue(0)})),leverage:h,tokenFeeAmountA:new Ue(0),tokenFeeAmountB:new Ue(0)}];let k=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}`]=k,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(i){let d=Object.values(m),p=await on(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]=wi.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}`,w=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[w].toString()],k=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],x=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:K}=await Ai.GetPositionFees(y,g,k,x),I=await Ai.GetPositionRewards(y,g,k,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 O;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?xt.add(new Ue(1)):St.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((O=p.fee)!=null?O:He),u,c),w=Le(y,d,o,!1),T=le.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new M(1).div(T),k=y.mul(new Ue(Math.floor((1-r)*1e10))).div(new Ue(1e10)),x=Le(k,d,o,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(h).sub(B).abs(),I=B,C=new ct(new M(K).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:w,minAmountOut:x,expirationTime:un(p.expirationTime,w.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(V({},u),{mint:u.address,isToken2022:u.programId===jc.toBase58()})),new ze(q(V({},l),{mint:l.address,isToken2022:l.programId===jc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:w,priceImpact:T,fee:h,remainingAccounts:k,executionPriceX64:x}=Ne.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new zt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),B=q(V({},f),{amount:new Re(m,f.amount),fee:f.fee===void 0?void 0:new Re(m,f.fee)}),K=q(V({},y),{amount:new Re(d,y.amount),fee:y.fee===void 0?void 0:new Re(d,y.fee)}),I=q(V({},b),{amount:new Re(d,b.amount),fee:b.fee===void 0?void 0:new Re(d,b.fee)}),C=new Mt({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)}),O=new Mt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:w.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new Re(m,h);return{allTrade:p,realAmountIn:B,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:O,priceImpact:T,fee:L,remainingAccounts:k,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?St.sub(new Ue(1)):xt.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),w=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),k=c?e.currentPrice:new M(1).div(e.currentPrice),x=new M(w).sub(k).abs(),B=k,K=new ct(new M(x).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:un(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,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[gt(e.mintA.address).toString()],d=o[gt(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:w}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),k=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(w.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(k.add(x)),I=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),C=3600*24*365,O=e.rewardDefaultInfos.map(L=>{var v,z;let N=L.mint.decimals,R=o[L.mint.address];return c<((v=L.startTime)!=null?v:0)||c>((z=L.endTime)!=null?z:0)||!L.perSecond||!R||N===void 0?0:new M(R.value).mul(new M(L.perSecond).mul(C)).div(new M(10).pow(N)).mul(B).mul(100).toNumber()});return{feeApr:I,rewardsApr:O,apr:I+O.reduce((L,N)=>L+N,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 w=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?w: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,w;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),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new zt(c.id));(await on(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=mo.decode(c.data))});let r=t.map(c=>Je(new zt(c.programId),new zt(c.id)).publicKey),a=await Ne.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(V({},c),{[u.id]:q(V({},n[u.id]),{id:new zt(u.id),version:6,programId:new zt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(V({},u.config),{id:new zt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:Je(new zt(u.programId),new zt(u.id)).publicKey,exBitmapInfo:a[Je(new zt(u.programId),new zt(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 Aa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Zc(s){return q(V({},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:Aa,week:Aa,month:Aa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(V({},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(Xt)),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(Xt)).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(Cr).sub(t).mod(Cr)}};function mt(s,e){return wa(s.mul(e),64,256)}function _p(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function wa(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(bi);if(o){let r=i,a=i.add(n.mul(e));return a.gte(r)?ye.mulDivCeil(r,e,a):ye.mulDivRoundingUp(r,Xt,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(bi);if(o)return e.add(i.div(t));{let r=ye.mulDivRoundingUp(i,Xt,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<kt||e>Bt)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=Vc.div(n)),n}static getTickFromPrice(e,t,n){return le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(St)||e.lt(xt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Pe(t-64),o=_p(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<_c;){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(Ec)),d=wa(m.sub(new Pe(Wc)),64,128).toNumber(),p=wa(m.add(new Pe(Dc)),64,128).toNumber();return d==p?d:le.getSqrtPriceX64FromTick(p).lte(e)?p:d}},po=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=po.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(bi),r=t.sub(e);return o?ye.mulDivRoundingUp(ye.mulDivCeil(i,r,t),Xt,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),st):ye.mulDivFloor(n,t.sub(e),st)}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,Xt,yi):a.shrn(bi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ye.mulDivFloor(n,yi,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,w,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,(w=e.mintB.extensions)==null?void 0:w.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:un(f.expirationTime,y.expirationTime)}}},lo=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?xt.add(Xt):St.sub(Xt)),r){if(f.lt(xt))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(St))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,w=n[p],T=0,h=!r&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(He)&&!g.sqrtPriceX64.eq(f);){T>10;let k={};k.sqrtPriceStartX64=g.sqrtPriceX64;let x=$.nextInitTick(w,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:O}=ke(e,t,A);K=O,w=n[A];try{B=$.firstInitializedTick(w,r)}catch{throw Error("not found next tick info")}}k.tickNext=B.tick,k.initialized=B.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),k.tickNext<kt?k.tickNext=kt:k.tickNext>Bt&&(k.tickNext=Bt),k.sqrtPriceNextX64=le.getSqrtPriceX64FromTick(k.tickNext);let I;if(r&&k.sqrtPriceNextX64.lt(f)||!r&&k.sqrtPriceNextX64.gt(f)?I=f:I=k.sqrtPriceNextX64,[g.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=lo.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(k.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),g.amountCalculated=g.amountCalculated.sub(k.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(k.amountOut),g.amountCalculated=g.amountCalculated.add(k.amountIn.add(k.feeAmount))),g.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let C=B.liquidityNet;r&&(C=C.mul(In)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=k.tickNext!=g.tick&&!r&&w.startTickIndex===k.tickNext,g.tick=r?k.tickNext-1:k.tickNext}else if(g.sqrtPriceX64!=k.sqrtPriceStartX64){let C=le.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&w.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:k,isExist:x}=Te.nextInitializedTickArray(g.tick,l,r,o,i);x&&p!==k&&(g.accounts.push(ke(e,t,k).publicKey),p=k)}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,Nr.sub(new Pe(i.toString())),Nr);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),Nr.sub(new Pe(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var at=60,co=512,$=class{static getTickArrayAddressByTick(e,t,n,o){let i=$.getTickArrayStartIndexByTick(n,o),{publicKey:r}=ke(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>=at)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*at,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*at,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*at:e+t*at}static mergeTickArrayBitmap(e){let t=new Ep(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*at));return[...$.searchLowBitFromStart(e,t,r-1,i,n),...$.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,co,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=$.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=ke(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<kt||e>Bt}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<at;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=at-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<at;){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=po.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=po.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=_([xe(8),E("bump"),Ut("index"),F(""),wt("protocolFeeRate"),wt("tradeFeeRate"),Ut("tickSpacing"),Q(P(),8,"")]),Wp=_([wt("blockTimestamp"),No("tickCumulative"),Q(P(),4)]),el=_([xe(8),Ye("initialized"),P("recentEpoch"),Ut("observationIndex"),F("poolId"),Q(Wp,100,"observations"),Q(P(),4)]),Dp=_([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),se("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),se("rewardGrowthGlobalX64")]),mo=_([xe(8),E("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Ut("tickSpacing"),se("liquidity"),se("sqrtPriceX64"),qe("tickCurrent"),wt(),se("feeGrowthGlobalX64A"),se("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),se("swapInAmountTokenA"),se("swapOutAmountTokenB"),se("swapInAmountTokenB"),se("swapOutAmountTokenA"),E("status"),Q(E(),7,""),Q(Dp,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")]),qp=_([se("growthInsideLastX64"),P("rewardAmountOwed")]),Fo=_([xe(8),E("bump"),F("nftMint"),F("poolId"),qe("tickLower"),qe("tickUpper"),se("liquidity"),se("feeGrowthInsideLastX64A"),se("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(qp,3,"rewardInfos"),Q(P(),8,"")]),UT=_([xe(8),E("bump"),F("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),se("liquidity"),se("feeGrowthInsideLastX64A"),se("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(se(),3,"rewardGrowthInside"),Q(P(),8,"")]),Up=_([qe("tick"),bc("liquidityNet"),se("liquidityGross"),se("feeGrowthOutsideX64A"),se("feeGrowthOutsideX64B"),Q(se(),3,"rewardGrowthsOutsideX64"),Q(wt(),13,"")]),wi=_([xe(8),F("poolId"),qe("startTickIndex"),Q(Up,at,"ticks"),E("initializedTickCount"),Q(E(),115,"")]),tl=_([xe(329),Q(F(),100,"whitelistMints")]),$c=_([xe(8),F("poolId"),Q(Q(P(),8),Pa,"positiveTickArrayBitmap"),Q(Q(P(),8),Pa,"negativeTickArrayBitmap")]),GT=_([P(),E("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(P(),8)]),nl=_([xe(8),E("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),P("recentEpoch"),Q(P(),8)]);el.span;var ol=we("Raydium_Clmm"),Yt={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]},il=[188,37,179,131,82,150,84,73],rl=[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=_([se("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(w=>({pubkey:w,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:He},g);let A=Buffer.from([...Yt.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}=zc(t,r,u,l),{publicKey:d}=Hc(t,m),{publicKey:p}=ya(t,m,u),{publicKey:f}=ya(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,w,T,h,k,x,B,K,I){let C=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),O=[...I?[{pubkey:I,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: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:hi,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...O],N=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:k,amountMaxA:x,amountMaxB:B,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},N);let R=Buffer.from([...Yt.openPosition,...N]);return new yt({keys:L,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h,k,x,B,K){let I=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],O=[{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:hi,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:k,amountMaxB:x,withMetadata:B==="create",baseFlag:!1,optionBaseFlag:0},L);let N=Buffer.from([...Yt.openPositionWithTokenEx,...L]);return new yt({keys:O,programId:e,data:N})}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=Mr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=ke(p,f,b),{publicKey:w}=ke(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:k}=Kt(p,y),{publicKey:x}=ln(p,f,o,i),B=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,w,k,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,w,k,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:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,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=Mr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=ke(p,f,b),{publicKey:w}=ke(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:k}=Kt(p,y),{publicKey:x}=ln(p,f,o,i),B=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,w,k,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,w,k,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:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,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,w,T,h,k,x,B,K,I){let C=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),O=[...I?[{pubkey:I,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: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:hi,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...O],N=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ka(0),amountMaxA:x==="MintA"?B:K,amountMaxB:x==="MintA"?K:B,withMetadata:k==="create",baseFlag:x==="MintA",optionBaseFlag:1},N);let R=Buffer.from([...Yt.openPosition,...N]);return new yt({keys:L,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h,k,x,B,K){let I=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),se("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),E("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],O=[{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:hi,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:new ka(0),amountMaxA:k==="MintA"?x:B,amountMaxB:k==="MintA"?B:x,withMetadata:h==="create",baseFlag:k==="MintA",optionBaseFlag:1},L);let N=Buffer.from([...Yt.openPositionWithTokenEx,...L]);return new yt({keys:O,programId:e,data:N})}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=Mr.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}=ke(f,y,b),{publicKey:w}=ke(f,y,g),{publicKey:T}=m?ee(n.wallet,d,je):ee(n.wallet,d,Oe),{publicKey:h}=Bn(d),{publicKey:k}=Kt(f,d),{publicKey:x}=ln(f,y,o,i),B=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,x,A,w,k,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,w,k,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:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:x},instructions:[B],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=_([]),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([...Yt.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}=Kt(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 w=_([se("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],k=Buffer.alloc(w.span);w.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},k);let x=Buffer.from([...Yt.increaseLiquidity,...k]);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}=ke(u,l,m),{publicKey:f}=ke(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Kt(u,n.nftMint),{publicKey:g}=ln(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}=ke(u,l,m),{publicKey:f}=ke(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Kt(u,n.nftMint),{publicKey:g}=ln(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 w=_([se("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],k=Buffer.alloc(w.span);w.encode({liquidity:new ka(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},k);let x=Buffer.from([...Yt.increaseLiquidity,...k]);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,w){let T=_([se("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...w?[{pubkey:w,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()],k=[{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:sr,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([...Yt.decreaseLiquidity,...x]);return new yt({keys:k,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}=ke(l,m,d),{publicKey:y}=ke(l,m,p),{publicKey:b}=u?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,c),{publicKey:g}=Kt(l,n.nftMint),{publicKey:A}=ln(l,m,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new Y(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new Y(e.rewardDefaultInfos[k].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),w,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=_([P("amount"),P("otherAmountThreshold"),se("sqrtPriceLimitX64"),Ye("isBaseInput")]),w=[...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:sr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let k=Buffer.from([...Yt.swap,...h]);return new yt({keys:T,programId:e,data:k})}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=_([P("openTime"),P("endTime"),se("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([...Yt.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=Yc(i,r,o.mint).publicKey,c=Pi(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=_([E("rewardIndex"),se("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([...Yt.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)&&ol.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Pi(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=_([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:sr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Yt.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)&&ol.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=Mr.generate();u.push(g),l=g.publicKey}let m=a?ee(i,r,je).publicKey:ee(i,r,Oe).publicKey,{publicKey:d}=Kt(n,r),p=vo(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:sn,isSigner:!1,isWritable:!1},{pubkey:hi,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=_([Ye("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let w=Buffer.from([...il,...A]);return new yt({keys:b,programId:e,data:w})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ee(o,i,Oe),{publicKey:a}=Kt(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:ba(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(il)})}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}=ke(t,n,o),{publicKey:a}=ke(t,n,i),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Oe),{publicKey:u}=Kt(t,e.ownerPosition.nftMint),{publicKey:l}=ln(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:ba(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(rl)})}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:w,rewardAccounts:T,exTickArrayBitmap:h}){let k=[...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:w,isSigner:!1,isWritable:!1},...k];return new yt({keys:x,programId:e,data:Buffer.from(rl)})}};var Gp=_([wt("mintAuthorityOption"),F("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),wt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as mI}from"@solana/web3.js";import{MintLayout as pI,TOKEN_PROGRAM_ID as yI}from"@solana/spl-token";var vr=s=>new ze({mint:s.address,decimals:s.decimals,symbol:s.symbol,name:s.name}),Ti=o=>{var i=o,{amount:s,isRaw:e,name:t}=i,n=Ge(i,["amount","isRaw","name"]);return new Re(new ze({mint:gt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var ht=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Ge(i,["address","programId","decimals"]);return V({chainId:101,address:gt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(V({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(V({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(V({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import sl from"bn.js";var ha=new sl(25),Fr=new sl(1e4);import{PublicKey as tt,SystemProgram as zp,SYSVAR_RENT_PUBKEY as MI,TransactionInstruction as Yn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Yp,TOKEN_PROGRAM_ID as fo}from"@solana/spl-token";import Vr from"bn.js";var Ta=_([E("instruction"),P("amountIn"),P("minAmountOut")]),Ia=_([E("instruction"),P("maxAmountIn"),P("amountOut")]),RI=_([E("instruction"),E("nonce")]),Xp=_([E("instruction"),E("nonce"),P("startTime")]),Ii=_([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"),se("swapBaseInAmount"),se("swapQuoteOutAmount"),P("swapBase2QuoteFee"),se("swapQuoteInAmount"),se("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")]),LI=_([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"),se("swapBaseInAmount"),se("swapQuoteOutAmount"),se("swapQuoteInAmount"),se("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")]),Ba=_([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),xa=_([E("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var al=_([P("fee")]);var _r=we("Raydium_liquidity_instruction");function ul(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=no}=s,u=Buffer.alloc(Ba.span);Ba.encode({instruction:3,baseAmountIn:ne(o),quoteAmountIn:ne(i),otherAmountMin:ne(a),fixedSide:r==="base"?vt:Wu},u);let l=[S({pubkey:fo,isWritable:!1}),S({pubkey:new tt(e.id)}),S({pubkey:new tt(t.authority),isWritable:!1}),S({pubkey:new tt(t.openOrders),isWritable:!1}),S({pubkey:new tt(t.targetOrders)}),S({pubkey:new tt(e.lpMint.address)}),S({pubkey:new tt(t.vault.A)}),S({pubkey:new tt(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new tt(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 tt(t.marketEventQueue),isWritable:!1})),new Yn({programId:new tt(e.programId),keys:l,data:u})}function Sa(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=no}=s,c=ft(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(xa.span);xa.encode({instruction:4,lpAmount:ne(o),baseAmountMin:ne(i),quoteAmountMin:ne(r)},l);let m=[S({pubkey:fo,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 Ka({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:w,coinAmount:T,pcAmount:h,ammConfigId:k,feeDestinationId:x}){let B=_([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:fo,isSigner:!1,isWritable:!1},{pubkey:Yp,isSigner:!1,isWritable:!1},{pubkey:zp.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:k,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:w,coinAmount:T,pcAmount:h},I),{instruction:new Yn({keys:K,programId:s,data:I}),instructionType:X.AmmV4CreatePool}}function Hp({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=no},i){let r=ft(s),a=Buffer.alloc(Ta.span);Ta.encode({instruction:9,amountIn:ne(t),minAmountOut:ne(n)},a);let c=[S({pubkey:fo,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 Qp({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=no},i){let r=ft(s),a=Buffer.alloc(Ia.span);Ia.encode({instruction:11,maxAmountIn:ne(t),amountOut:ne(n)},a);let c=[S({pubkey:fo,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 jp(s,e,t,n,o,i,r,a,c,u){let l=_([E("instructionId"),P("amountIn"),P("minAmountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:16,amountIn:c,minAmountOut:u},m);let d=[{pubkey:fo,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=_([E("instructionId"),P("maxAmountIn"),P("amountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:17,maxAmountIn:c,amountOut:u},m);let d=[{pubkey:fo,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 Er(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4){if(r==="in")return jp(new tt(e.programId),new tt(e.id),new tt(e.authority),new tt(e.vault.A),new tt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Vr(o.toString()),new Vr(i.toString()));if(r==="out")return Zp(new tt(e.programId),new tt(e.id),new tt(e.authority),new tt(e.vault.A),new tt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Vr(o.toString()),new Vr(i.toString()));_r.logWithError("invalid params","params",s)}throw _r.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function Wr(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 Hp(q(V({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Qp(q(V({},a),{maxAmountIn:o,amountOut:i}),t);_r.logWithError("invalid params","params",s)}throw _r.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var bo=5e4,$p=_([P("x"),P("y"),P("price")]),Jp=_([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q($p,bo,"DataElement")]);function ef(s,e){return[0,bo-2]}function tf(s){return[0,bo-2]}function nf(s){return[0,bo-2]}function of(s,e,t){let[n,o]=ef(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>=bo-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 Ca(s,e,t){let[n,o,i]=of(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 yo(s,e,t){return e*s.multiplier/t}function cl(s,e,t){return e*t/s.multiplier}function rf(s,e){let[t,n]=tf(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>bo-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 sf(s,e){let[t,n]=nf(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=bo-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 ll(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=rf(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 af(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=sf(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 uf(s,e){let t=ll(s,e,0,!1);return t[3]?t[0]:0}function ml(s,e,t,n){let o=Ca(s,e,t),i=yo(s,e,o),r=yo(s,t,o),a=yo(s,n,o),c=!0,[u,l,m,d]=ll(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return cl(s,p,o)}}function dl(s,e,t,n){let o=Ca(s,e,t),i=yo(s,e,o),r=yo(s,t,o),a=yo(s,n,o),c=!1,[u,l,m,d]=af(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return cl(s,p,o)}}function cf(s){let e=Jp.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 pl(s,e,t,n){let o=uf(s,yo(s,e,Ca(s,e,t)))/s.multiplier;return n?o:1/o}var Bi=class{constructor({connection:e,modelDataPubKey:t=no}){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=cf(e==null?void 0:e.data))}}};import{PublicKey as df}from"@solana/web3.js";import dB from"bn.js";import{TOKEN_PROGRAM_ID as pf}from"@solana/spl-token";import{PublicKey as lf}from"@solana/web3.js";var mf=we("Raydium_liquidity_serum");function fl({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=lf.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw mf.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 Dr({programId:s}){let{publicKey:e}=pe([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function go({name:s,programId:e,marketId:t}){let{publicKey:n}=pe([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function ff({programId:s,marketId:e}){let{publicKey:t}=pe([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function La({programId:s}){return pe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function Na({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=go({name:"amm_associated_seed",programId:a,marketId:t}),l=go({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=La({programId:a}),p=go({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=go({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=go({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=ff({programId:a,marketId:t}),g=go({name:"target_associated_seed",programId:a,marketId:t}),A=go({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=fl({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:w,lookupTableAccount:df.default,configId:Dr({programId:a})}}var Ra={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},qr=s=>{let e={},t=pf.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:ht({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:ht({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:Ra,week:Ra,month:Ra,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Dr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:ht({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 xi}from"@solana/web3.js";import Si from"bn.js";import{TOKEN_PROGRAM_ID as Pl}from"@solana/spl-token";import{SystemProgram as Po,SYSVAR_RENT_PUBKEY as bf,Transaction as yl,TransactionInstruction as gf}from"@solana/web3.js";import{createInitializeAccountInstruction as bl,TOKEN_PROGRAM_ID as gl}from"@solana/spl-token";function yf(s="accountFlags"){let e=new xr(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 Oa=_([xe(5),yf("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=_([E("version"),wt("instruction"),P("baseLotSize"),P("quoteLotSize"),Ut("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:bf,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 gf({keys:n,programId:s,data:o})}async function Ur({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new yl,o=await s.getMinimumBalanceForRentExemption(165);n.add(Po.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:gl}),Po.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:gl}),bl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),bl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Po.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(Oa.span),space:Oa.span,programId:t.programId}));let i=new yl;return i.add(Po.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}),Po.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}),Po.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}),Po.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`}),w=$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`}),k=$e({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-baseVault`}),x=$e({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-quoteVault`}),B=0,K=new Si(100);function I(){let z=new Si(0);for(;;)try{return{vaultOwner:xi.createProgramAddressSync([g.publicKey.toBuffer(),z.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:z}}catch{if(z.iaddn(1),z.gt(new Si(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:O}=I(),L=new Si(Math.round(10**e.decimals*n)),N=new Si(Math.round(n*10**t.decimals*o));if(L.eq(vt))throw Error("lot size is too small");if(N.eq(vt))throw Error("tick size or lot size is too small");let R=await Ur({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:k,quoteVault:x,vaultOwner:C,requestQueue:A,eventQueue:w,bids:T,asks:h,feeRateBps:B,quoteDustThreshold:K,vaultSignerNonce:O,baseLotSize:L,quoteLotSize:N,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:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.publicKey,quoteVault:x.publicKey,baseMint:new xi(e.mint),quoteMint:new xi(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.publicKey,quoteVault:x.publicKey,baseMint:new xi(e.mint),quoteMint:new xi(t.mint)}})}};var Ki=class extends De{constructor(t){super(t);this.stableLayout=new Bi({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=vr(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=vt;r.isZero()||(d=m==="base"?ur(r.mul(u),c):ur(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=ur(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new ct(new Ze(1)).add(o),y=new ct(new Ze(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Re(a,d),w=new Re(a,b),T=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:A,maxAnotherAmount:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[i.token,r.token],w=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!w&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new et(n.lpMint.address)}),k=[g,A],x=[w,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"?(k.reverse(),x.reverse(),B.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,O]=k,[L,N]=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:L,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ce}=J,ae=Ge(J,["tokenAccount"]);H.addInstruction(ae);let Se=await f.handleTokenAccount({side:"in",amount:v,mint:O.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ue}=Se,ge=Ge(Se,["tokenAccount"]);H.addInstruction(ge);let Me=await f.handleTokenAccount({side:"out",amount:0,mint:new et(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:fe}=Me,te=Ge(Me,["tokenAccount"]);return H.addInstruction(te),H.addInstruction({instructions:[ul({poolInfo:n,poolKeys:z,userKeys:{baseTokenAccount:ce,quoteTokenAccount:ue,lpTokenAccount:fe,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 et(n.mintA.address),new et(n.mintB.address),new et(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 w=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:k,checkCreateATAOwner:x}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),O=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:w,bypassAssociatedCheck:k,checkCreateATAOwner:x}),{tokenAccount:B}=O,K=Ge(O,["tokenAccount"]);h.addInstruction(K);let L=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:k,checkCreateATAOwner:x}),{tokenAccount:I}=L,C=Ge(L,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Sa({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 w=A[t.lpMint.address];if(w===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(),k=t.mintB.address===ze.WSOL.mint.toString(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new et(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 et(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,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 et(r.programId),poolId:new et(r.id),owner:this.scope.ownerPubKey,version:z}),ce,ae=await this.scope.connection.getAccountInfo(H);if(ae&&(ce=ui(z).decode(ae.data)),z!==6&&!ce){let{instruction:Me,instructionType:he}=li({id:new et(r.id),programId:new et(r.programId),version:z,ledger:H,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Me],instructionTypes:[he]})}let ue=[];for(let Me of r.rewardInfos){let he=Me.mint.address===ze.WSOL.mint.toString();if(A[Me.mint.address])ue.push(A[Me.mint.address]);else{let{account:bt,instructionParams:Nt}=await this.scope.account.getOrCreateTokenAccount({mint:new et(Me.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});bt||this.logAndCreateError("farm reward account not found:",Me.mint.address),Nt&&g.addInstruction(Nt),ue.push(bt)}}let ge=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],fe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ge,lpAccount:w,rewardAccounts:ue},te=Zt[r.programId],J=te===6?mi(fe):te===5?di(fe):pi(fe),Se={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[J],instructionTypes:[Se[te]]})}let C=await this.getAmmPoolKeys(t.id),O=Sa({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:w,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[O],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[L,N]=t.mintA.address===n.mintA.address?[x,K]:[K,x],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Be.openPositionFromBaseInstructions(q(V({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:L,tokenAccountB:N},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 N;let A=u.feePayer||((N=this.scope.owner)==null?void 0:N.publicKey),w=u.useSOLBalance&&o.mint.equals(Gr),T=u.useSOLBalance&&i.mint.equals(Gr),h=this.createTxBuilder(g),{account:k,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:A,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!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||{}),k===void 0||B===void 0)throw Error("you don't has some token account");let I=Na({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:O,instructionType:L}=Ka(q(V({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:B,userLpVault:ee(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[O],instructionTypes:[L]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=dr,marketProgram:n=ju,feeDestinationId:o=$u,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:w,txTipConfig:T,feePayer:h}){var zi,Yi,To;let k=this.scope.ownerPubKey,x=m.feePayer||((zi=this.scope.owner)==null?void 0:zi.publicKey),B=m.useSOLBalance&&r.mint.equals(Gr),K=m.useSOLBalance&&a.mint.equals(Gr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-market`}),O=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-request`}),L=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-event`}),N=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-bids`}),R=$e({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-asks`}),v=$e({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-baseVault`}),z=$e({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-quoteVault`}),H=0,ce=new Ze(100);function ae(){let It=new Ze(0);for(;;)try{return{vaultOwner:et.createProgramAddressSync([C.publicKey.toBuffer(),It.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:It}}catch{if(It.iaddn(1),It.gt(new Ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:ue,vaultSignerNonce:ge}=ae(),fe=new Ze(Math.round(10**r.decimals*b)),te=new Ze(Math.round(b*10**a.decimals*g));if(fe.eq(vt))throw Error("lot size is too small");if(te.eq(vt))throw Error("tick size or lot size is too small");let J=await Ur({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ue,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:z,requestQueue:O,eventQueue:L,bids:N,asks:R,feeRateBps:H,quoteDustThreshold:ce,vaultSignerNonce:ge,baseLotSize:fe,quoteLotSize:te,lowestFeeMarket:d}}),Se=this.createTxBuilder(h);Se.addInstruction({instructions:J[0].transaction.instructions,signers:J[0].signer});for await(let It of J.slice(1,J.length))Se.addInstruction({instructions:It.transaction.instructions,signers:It.signer,instructionTypes:It.instructionTypes});let{account:Me,instructionParams:he}=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(he||{});let{account:bt,instructionParams:Nt}=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(Nt||{}),Me===void 0)throw Error("you don't has base token account");if(bt===void 0)throw Error("you don't has quote token account");let ot=Na({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Gi={programId:t,ammId:ot.id,ammAuthority:ot.authority,ammOpenOrders:ot.openOrders,lpMint:ot.lpMint,coinMint:ot.baseMint,pcMint:ot.quoteMint,coinVault:ot.baseVault,pcVault:ot.quoteVault,withdrawQueue:ot.withdrawQueue,ammTargetOrders:ot.targetOrders,poolTempLp:ot.lpVault,marketProgramId:ot.marketProgramId,marketId:ot.marketId,ammConfigId:ot.configId,feeDestinationId:o},{instruction:Xi,instructionType:ho}=Ka(q(V({},Gi),{userWallet:this.scope.ownerPubKey,userCoinVault:Me,userPcVault:bt,userLpVault:ee(this.scope.ownerPubKey,ot.lpMint,i).publicKey,nonce:ot.nonce,openTime:l,coinAmount:c,pcAmount:u}));Se.addInstruction({instructions:[Xi],instructionTypes:[ho]});let jt=B||K?[((Yi=he==null?void 0:he.instructions)==null?void 0:Yi[0])||((To=Nt==null?void 0:Nt.instructions)==null?void 0:To[0])].filter(It=>!!It):void 0;return A===0?Se.sizeCheckBuildV0({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:O.publicKey,eventQueue:L.publicKey,bids:N.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new et(r.mint),quoteMint:new et(a.mint)},Gi)}):Se.sizeCheckBuild({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:O.publicKey,eventQueue:L.publicKey,bids:N.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new et(r.mint),quoteMint:new et(a.mint)},Gi)})}async getCreatePoolFee({programId:t}){let n=Dr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return al.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,w;if(A)w=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let L=pl(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?w=new M(1e6).div(L*1e6):w=new M(L*1e6).div(1e6)}let T=n,h=new Ze(0),k=new Ze(0);if(!T.isZero())if(A){k=Wn(T.mul(ha),Fr);let L=T.sub(k),N=f.add(L);h=y.mul(L).div(N)}else{k=T.mul(new Ze(2)).div(new Ze(1e4));let L=T.sub(k);p==="quote"?h=new Ze(ml(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.toNumber())):h=new Ze(dl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.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(k).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new M(h.toString()).div(10**g).div(new M(T.sub(k).toString()).div(10**b)));let C=w.sub(I).div(w).mul(100);return{amountOut:B,minAmountOut:K,currentPrice:w,executionPrice:I,priceImpact:C,fee:k}}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(Fr).div(Fr.sub(ha))}let w=new Ze(new M(g.toString()).mul(1+r).toFixed(0)),T=g,h=w;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 k=null;!g.isZero()&&!A.isZero()&&(k=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 ${k.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(k).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:k,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],w=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new et(g.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:f});p.addInstruction(k||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:w,associatedOnly:f});let{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new et(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?Er({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):Wr({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 _e(this.scope.connection,t.map(l=>({pubkey:new et(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=Ii.decode(m.accountInfo.data);i[String(t[l])]=q(V({},d),{programId:m.accountInfo.owner}),r.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,r.map(l=>({pubkey:new et(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(Af.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(V({},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=qr({[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 Ct from"bn.js";import{AccountLayout as Al,createAssociatedTokenAccountIdempotentInstruction as wl,TOKEN_2022_PROGRAM_ID as Qn,TOKEN_PROGRAM_ID as Ci}from"@solana/spl-token";var Ri=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 Ct(new j(o.address).toBuffer()).gt(new Ct(new j(i.address).toBuffer()))?[i,o,new M(1).div(a)]:[o,i,a],A=le.priceToSqrtPriceX64(g,y.decimals,b.decimals),w=[],T=[];y.programId===Qn.toBase58()&&T.push(ga(t,new j(y.address)).publicKey),b.programId===Qn.toBase58()&&T.push(ga(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((B,K)=>{B&&w.push(T[K])});let k=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:w});return f.addInstruction(k),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(V({},k.address),{observationId:k.address.observationId.toBase58(),exBitmapAccount:k.address.exBitmapAccount.toBase58(),programId:t.toString(),id:k.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:k.address.mintAVault.toString(),B:k.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:V({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.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},qc),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),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),k=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&&(w=K),A.addInstruction(I||{});let{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(O||{}),(!w||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:w==null?void 0:w.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let L=t||await this.getClmmPoolKeys(e.id),N=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:L,ownerInfo:q(V({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(N),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:V({},N.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),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),k=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&&(w=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:k||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(w===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),O=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(O),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:O.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(),w=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:k,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(g=k),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:w,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});w&&(y=w),f.addInstruction(T||{});let{account:h,instructionParams:k}=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(k||{}),!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 L;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,w,{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:k,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});w=k,x&&y.addInstruction(x);let B=[];for(let N of t.rewardDefaultInfos){let R=i.useSOLBalance&&N.mint.address===Z.toString(),v;if(N.mint.address===t.mintA.address)v=A;else if(N.mint.address===t.mintB.address)v=w;else{let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(N.mint.programId),mint:new j(N.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&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(L=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:L.owner.equals(Qn),C=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:w,rewardAccounts:B},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let O=V({},C.address);if(i.closePosition){let N=await Be.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:N.instructions,endInstructionTypes:N.instructionTypes}),O=V(V({},O),N.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:O}})}async lockPosition(e){var f;let{programId:t=ei,authProgramId:n=pr,poolProgramId:o=to,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=ei,authProgramId:n=pr,clmmProgram:o=to,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=Fo.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),w=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:k,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=k,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:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});h=B,K&&y.addInstruction(K);let I={},C=[];for(let ue of f.rewardInfos){let ge=a.useSOLBalance&&ue.mint.address===Z.toString(),fe=I[ue.mint.address];if(!fe){let{account:te,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ue.mint.programId),mint:new j(ue.mint.address),notUseTokenAccount:ge,owner:this.scope.ownerPubKey,skipCloseAccount:!ge,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ge?!1:c});fe=te,J&&y.addInstruction(J)}I[ue.mint.address]=fe,C.push(fe)}let O=vo(t,r.lockNftMint).publicKey,L=ee(this.scope.ownerPubKey,r.lockNftMint,Ci).publicKey,N=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=ke(new j(f.programId),r.poolId,N),{publicKey:z}=ke(new j(f.programId),r.poolId,R),{publicKey:H}=ln(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),ce=[];for(let ue=0;ue<f.rewardInfos.length;ue++)ce.push({poolRewardVault:new j(f.rewardInfos[ue].vault),ownerRewardVault:C[ue],rewardMint:new j(f.rewardInfos[ue].mint.address)});let ae=await Be.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:O,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:L,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:[ae],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 Ct(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 Ct(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),w=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=V(V({},d),w.address),m.addInstruction(w)}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 Ct(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 Ct(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=V(V({},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=V(V({},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(),w=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=g?xt.add(new Ct(1)):St.sub(new Ct(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 k;if(!k){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=B,K&&b.addInstruction(K)}(!h||!k)&&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:k,mintAUseSOLBalance:A,mintBUseSOLBalance:w,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:k},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(),w=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=n.toString()===e.mintB.address?xt.add(new Ct(1)):St.sub(new Ct(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 k;if(!k){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=B,K&&b.addInstruction(K)}(!h||!k)&&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:k,mintAUseSOLBalance:A,mintBUseSOLBalance:w,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:k},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=ei,lockAuth:d=pr,clmmProgram:p=to}){var w,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 _e(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var k,x;g[h.pubkey.toBase58()]=(x=(k=h==null?void 0:h.accountInfo)==null?void 0:k.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(N=>!N.liquidity.isZero()||N.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let k=h,x=o.useSOLBalance&&k.mintA.address===Z.toString(),B=o.useSOLBalance&&k.mintB.address===Z.toString(),K=f[k.mintA.address];if(!K)if(x){let{account:N,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new j(k.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=N,R&&A.addInstruction(R)}else{let N=new j(k.mintA.address);K=this.scope.account.getAssociatedTokenAccount(N,new j(k.mintA.programId)),A.addInstruction({instructions:[wl(this.scope.ownerPubKey,K,this.scope.ownerPubKey,N,new j(k.mintA.programId))]})}let I=f[k.mintB.address];if(!I)if(B){let{account:N,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new j(k.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=N,R&&A.addInstruction(R)}else{let N=new j(k.mintB.address);I=this.scope.account.getAssociatedTokenAccount(N,new j(k.mintB.programId)),A.addInstruction({instructions:[wl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,N,new j(k.mintB.programId))]})}f[k.mintA.address]=K,f[k.mintB.address]=I;let C=[];for(let N of k.rewardDefaultInfos){let R=o.useSOLBalance&&N.mint.address===Z.toString(),v=f[N.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(N.mint.programId),mint:new j(N.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[N.mint.address]=v,C.push(v)}let O=await this.getClmmPoolKeys(k.id),L=[];for(let N=0;N<O.rewardInfos.length;N++)L.push({poolRewardVault:new j(O.rewardInfos[N].vault),ownerRewardVault:C[N],rewardMint:new j(O.rewardInfos[N].mint.address)});for(let N of t[h.id]){let R=(w=n==null?void 0:n[h.id])==null?void 0:w[N.nftMint.toBase58()];if(R){let v=ee(this.scope.ownerPubKey,R.lockNftMint,Ci).publicKey,z=$.getTickArrayStartIndexByTick(N.tickLower,O.config.tickSpacing),H=$.getTickArrayStartIndexByTick(N.tickUpper,O.config.tickSpacing),{publicKey:ce}=ke(new j(O.programId),R.poolId,z),{publicKey:ae}=ke(new j(O.programId),R.poolId,H),{publicKey:ue}=ln(new j(O.programId),R.poolId,N.tickLower,N.tickUpper),ge=vo(m,R.lockNftMint).publicKey,fe=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:ue,vaultA:new j(O.vault.A),vaultB:new j(O.vault.B),tickArrayLower:ce,tickArrayUpper:ae,userVaultA:K,userVaultB:I,mintA:new j(O.mintA.address),mintB:new j(O.mintB.address),rewardAccounts:L,exTickArrayBitmap:Je(p,R.poolId).publicKey});A.addInstruction({instructions:[fe],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:O.lookupTableAccount?[O.lookupTableAccount]:[]})}else{let v=Be.decreaseLiquidityInstructions({poolInfo:k,poolKeys:O,ownerPosition:N,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new Ct(0),amountMinA:new Ct(0),amountMinB:new Ct(0),nft2022:(T=g[N.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(Pi(e).publicKey);return t?tl.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=to}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new Ct(1))).map(r=>Kt(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=Fo.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=ei}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Ct(1))).map(c=>vo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=nl.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=Fo.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 _e(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=mo.decode(r.accountInfo.data),c=le.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(V({},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 _e(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:ht({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ci.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?zn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:ht({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ci.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(V({},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 Io({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 _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Zc(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Al.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Al.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(V({},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:ht({address:m.tokenMint.toBase58(),programId:Ci.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 Of,NATIVE_MINT as Eo,TOKEN_PROGRAM_ID as Rt,createAssociatedTokenAccountIdempotentInstruction as Qr}from"@solana/spl-token";import kl from"bn.js";import Xr from"bn.js";function Ma(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function wf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Ma(s,e).gt(Li)&&(t=t.add(new Xr(1))),[t,e]}var Li=new Xr(0),Ni=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]=wf(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 Ma(e.mul(n),t).gt(Li)&&r.gt(Li)&&(r=r.add(new Xr(1))),Ma(e.mul(o),t).gt(Li)&&a.gt(Li)&&(a=a.add(new Xr(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import kf from"bn.js";var _t=class{static tradingFee(e,t){return jo(e,t,Ft)}static protocolFee(e,t){return cr(e,t,Ft)}static fundFee(e,t){return cr(e,t,Ft)}static creatorFee(e,t){return jo(e,t,Ft)}static splitCreatorFee(e,t,n){return cr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Ft),o=Ft.sub(t);return n.add(o).sub(new kf(1)).div(o)}};var Oi=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 kl(0),l=_t.tradingFee(e,o),m;c?(u=_t.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=_t.protocolFee(l,r),p=_t.protocolFee(l,a),f=Ni.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=_t.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 kl(0),m;if(c)m=e;else{let b=_t.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Ni.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=_t.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=_t.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=_t.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=_t.protocolFee(u,r),y=_t.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:n.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Qe from"bn.js";import{PublicKey as Fi,TransactionInstruction as Cn,Keypair as Rf,SystemProgram as Va}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as zr,TOKEN_2022_PROGRAM_ID as _a,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";var hf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),kS=Buffer.from("amm_config","utf8"),Tf=Buffer.from("pool","utf8"),If=Buffer.from("pool_lp_mint","utf8"),Bf=Buffer.from("pool_vault","utf8"),xf=Buffer.from("observation","utf8"),Sf=Buffer.from("permission","utf8");function _o(s){return pe([hf],s)}function va(s,e,t,n){return pe([Tf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function Kf(s,e){return pe([If,e.toBuffer()],s)}function hl(s,e,t){return pe([Bf,e.toBuffer(),t.toBuffer()],s)}function Mi(s,e){return pe([xf,e.toBuffer()],s)}function Fa({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=_o(e).publicKey,r=s||va(e,t,n,o).publicKey,a=Kf(e,r).publicKey,c=hl(e,r,n).publicKey,u=hl(e,r,o).publicKey,l=Mi(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Cf=Buffer.from("locked_liquidity","utf8");function vi(s,e){return pe([Cf,e.toBuffer()],s)}function Tl(s,e){return pe([Sf,e.toBuffer()],s)}var Lf=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 Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=va(s,t,i,r).publicKey,k=[{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:zr,isSigner:!1,isWritable:!1},{pubkey:Bs,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1}],x=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:w},x),new Cn({keys:k,programId:s,data:Buffer.from([...Rn.initialize,...x])})}function Bl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([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 Lf.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 xl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([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 Yr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([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 Sl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([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 Kl(s){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=s,r=[],[a,c]=[new Fi(t.id),new Fi(t.lpMint.address)],u;if(i)u=new Fi((await i(1))[0]);else{let g=Rf.generate();r.push(g),u=g.publicKey}let{publicKey:l}=ee(o,u,Kn),{publicKey:m}=Bn(u),{publicKey:d}=vi(s.lockProgram,u),{publicKey:p}=ee(e.wallet,c,Kn),{publicKey:f}=ee(s.lockAuthProgram,c,Kn),y=Nf({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 Fi(n.vault.A),poolVaultB:new Fi(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 Nf({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:Va.programId,isSigner:!1,isWritable:!1},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],A=_([P("lpAmount"),Ye("withMetadata")]),w=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},w);let T=Buffer.from([...Rn.lockCpLiquidity,...w]);return new Cn({keys:g,programId:s,data:T})}function Ea({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:oo,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=_([P("lpFeeAmount")]),w=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},w);let T=Buffer.from([...Rn.collectCpFee,...w]);return new Cn({keys:g,programId:s,data:T})}function Wa(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:zr,isSigner:!1,isWritable:!1},{pubkey:Va.programId,isSigner:!1,isWritable:!1}];return new Cn({keys:p,programId:s,data:Rn.collectCreatorFee})}function Cl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h,k){let x=_([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:zr,isSigner:!1,isWritable:!1},{pubkey:Va.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(x.span);return x.encode({amountA:w,amountB:T,openTime:h,feeOn:k},K),new Cn({keys:B,programId:s,data:Buffer.from([...Rn.initializeWithPermission,...K])})}var Rl=_([xe(8),E("bump"),Ye("disableCreatePool"),Ut("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),F("protocolOwner"),F("fundOwner"),P("creatorFeeRate"),Q(P(),15)]),Hr=_([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)]),MS=_([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 _e(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=Hr.decode(d.accountInfo.data);o[String(e[m])]=q(V({},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 _e(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]]=Rl.decode(f.data)}}let c={},u=await _e(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(Of.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(V({},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(V({},n),{[o]:q(V({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:_o(i.programId).publicKey,mintA:ht({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:ht({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 Io({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=ht({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=ht({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=ht({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Rt.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:_o(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:Mi(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,w]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],k=i.useSOLBalance&&A.address===Eo.toBase58(),x=i.useSOLBalance&&w.address===Eo.toBase58(),[B,K]=[new U(A.address),new U(w.address)],I=this.createTxBuilder(d),{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:B,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:b,amount:T}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:r,checkCreateATAOwner:a});I.addInstruction(O||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:new U(w.address),tokenProgram:w.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(N||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let R=Fa({poolId:e,programId:t,configId:new U(u.id),mintA:B,mintB:K});return I.addInstruction({instructions:[Il(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,B,K,R.lpMint,C,L,ee(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((z=A.programId)!=null?z:Rt),new U((H=w.programId)!=null?H:Rt),R.observationId,T,h,o)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(V({},R),{mintA:A,mintB:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:w}=a||this.computePairAmount({poolInfo:q(V({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new ct(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=w.amount,h=t.mintA.address===Eo.toString(),k=t.mintB.address===Eo.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:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(L||{}),!I&&!O&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let N=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:N,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 ct(new Qe(1)).sub(r);return x.addInstruction({instructions:[Bl(new U(t.programId),this.scope.ownerPubKey,new U(z.authority),new U(t.id),R,I,O,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 ct(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,w=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],k=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:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(k&&l),associatedOnly:!k,checkCreateATAOwner:!1});B=I,C&&w.addInstruction(C);let{account:O,instructionParams:L}=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=O,L&&w.addInstruction(L),(!B||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let N=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});N||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return w.addInstruction({instructions:[xl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),N,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]:[]}),w.addCustomComputeBudget(r),w.addTipInstruction(a),w.versionBuild({txVersion:c})}async swap(e){var C,O,L,N,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,w]=[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:k,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:Rt),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:p||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:w,tokenProgram:new U((O=t.mintB.programId)!=null?O:Rt),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:p||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!k||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:B,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?Sl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:B,o?B:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:Rt),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:Rt),o?A:w,o?w:A,Mi(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Yr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:B,o?B:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((L=t[o?"mintA":"mintB"].programId)!=null?L:Rt),new U((N=t[o?"mintB":"mintA"].programId)!=null?N:Rt),o?A:w,o?w:A,Mi(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 Kl({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:fr,lockAuthProgram:(y=e.authProgram)!=null?y:yr,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 O;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=fr,authProgram:r=yr,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,w,{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:k,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});w=k,x&&p.addInstruction(x),(!A||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:w});let B=(O=e.poolKeys)!=null?O:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,o,Rt),{publicKey:I}=vi(i,o),{publicKey:C}=ee(r,new U(t.lpMint.address),Rt);return p.addInstruction({instructions:[Ea({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:w,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=fr,authProgram:o=yr,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)],w=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],k=m[f.mintB.address];if(!h)if(w){let{account:C,instructionParams:O}=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,O&&l.addInstruction(O),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:[Qr(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!k)if(T){let{account:C,instructionParams:O}=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});k=C,O&&l.addInstruction(O),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);k=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Qr(this.scope.ownerPubKey,k,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=k}(!h||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:k});let x=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:B}=ee(u,b,Rt),{publicKey:K}=vi(n,b),{publicKey:I}=ee(o,new U(f.lpMint.address),Rt);l.addInstruction({instructions:[Ea({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:k,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())),[w,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,k]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=i.useSOLBalance&&w.address===Eo.toBase58(),B=i.useSOLBalance&&T.address===Eo.toBase58(),[K,I]=[new U(w.address),new U(T.address)],C=this.createTxBuilder(d),{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:w.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(L||{});let{account:N,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:k}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),O===void 0||N===void 0)throw Error("you don't has some token account");let v=Fa({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[Cl(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,O,N,ee(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((H=w.programId)!=null?H:Rt),new U((ce=T.programId)!=null?ce:Rt),v.observationId,Tl(t,this.scope.ownerPubKey).publicKey,h,k,o,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(V({},v),{mintA:w,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=oo,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:[Qr(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Qr(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Wa(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,poolKeyList:t,programId:n=oo,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=r||this.scope.ownerPubKey,c=this.createTxBuilder(a),u={},l=t!=null?t:[];if(!l.length){let d=e.map(b=>b.id),p=95,f=[];for(let b=0;b<d.length;b+=p)f.push(d.slice(b,b+p));l=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let m=l.reduce((d,p)=>q(V({},d),{[p.id]:p}),{});for(let d of e){let p=m[d.id]||await this.getCpmmPoolKeys(d.id),[f,y,b,g]=[new U(d.mintA.address),new U(d.mintB.address),new U(d.mintA.programId),new U(d.mintB.programId)],A=u[d.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),w=u[d.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);u[d.mintA.address]=A,u[d.mintB.address]=w,c.addInstruction({instructions:[Wa(n,this.scope.ownerPubKey,new U(p.authority),new U(p.id),new U(p.config.id),new U(p.vault.A),new U(p.vault.B),f,y,A,w,b,g)],instructionTypes:[]})}return o===0?c.sizeCheckBuildV0({computeBudgetConfig:i}):c.sizeCheckBuild({computeBudgetConfig:i})}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?Oi.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):Oi.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,k,x,B,K,I,C,O;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:",(k=(h=l.fee)==null?void 0:h.toString())!=null?k: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:vt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let L=Mf(f,t,n,d);this.logDebug("lpAmountData:",{amountA:L.amountA.toString(),amountB:L.amountB.toString()}),y=Le(L[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new ct(new Qe(1)).add(i),g=new ct(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),w=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:",(O=(C=A.fee)==null?void 0:C.toString())!=null?O:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:w,liquidity:f}}};function Mf(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 Jf}from"@solana/web3.js";import{createTransferInstruction as Yl,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as ko,createAssociatedTokenAccountIdempotentInstruction as $a,createSyncNativeInstruction as ey,createTransferCheckedInstruction as ty}from"@solana/spl-token";import nt from"bn.js";var Ll={[Ls.toBase58()]:3},Nl={3:Ls};var Da=_([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)]),Ol={3:Da};import{PublicKey as Ml}from"@solana/web3.js";var jr=we("Serum"),Zr=class{static getProgramId(e){let t=Nl[e];return t||jr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ll[t];return n||jr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ol[e];return t||jr.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=Ml.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return jr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ml.default,nonce:o}}};import{PublicKey as de,SystemProgram as vf,TransactionInstruction as Ff}from"@solana/web3.js";import jn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Vf,TOKEN_2022_PROGRAM_ID as _f,TOKEN_PROGRAM_ID as Ef}from"@solana/spl-token";function Wf(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var k;let y=[],b=[S({pubkey:Ef,isWritable:!1}),S({pubkey:_f,isWritable:!1}),S({pubkey:Vf,isWritable:!1}),S({pubkey:vf.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],w=[i,r,a];for(let x=0;x<g.length;x++){let B=g[x],K=w[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(w[x])})),b.push(S({pubkey:new de(w[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(Df(B.sqrtPriceX64.toString(),K));for(let C of(k=f[x])!=null?k:[])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:Zu,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=_([E("insId"),P("amountIn"),P("amountOut"),Q(se(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new Ff({keys:b,programId:s,data:h})}function Df(s,e){if(s)if(e){let t=new jn(s).div(new jn(25));return t.gt(Rr)?t:Rr}else{let t=new jn(s).mul(new jn(25));return t.lt(Lr)?t:Lr}else return e?Rr:Lr}function vl({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)?xt.add(Xt):St.sub(Xt);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:[Yr(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")?Wr({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"}):Er({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:[Wf(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 $r,TOKEN_2022_PROGRAM_ID as jf,TOKEN_PROGRAM_ID as za}from"@solana/spl-token";import{SystemProgram as Qt,TransactionInstruction as Et}from"@solana/web3.js";import qo from"bn.js";var Zn=_([P(),P("epoch"),E("curveType"),Ut("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)]),qf=_([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),mn=_([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"),qf.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),P("platformVestingShare"),Q(E(),54)]),uC=_([P(),P("epoch"),F("poolId"),F("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),Q(P(),8)]),Fl=_([E("migrateType"),E("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Uf=_([P("epoch"),E("index"),F("configId"),Fl.replicate("bondingCurveParam"),Q(P(),50)]),Ln=_([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"),F("platformVestingWallet"),P("platformVestingScale"),F("platformCpCreator"),Q(E(),108),gc(Uf,"platformCurve")]);var Gf=Buffer.from("vault_auth_seed","utf8"),pC=Buffer.from("global_config","utf8"),Xf=Buffer.from("pool_vesting","utf8"),zf=Buffer.from("platform_config","utf8"),Yf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Hf=Buffer.from("creator_fee_vault_auth_seed","utf8"),Qf=Buffer.from("platform_global_access","utf8");function Ht(s){return pe([Gf],s)}function Wo(s,e,t){return pe([pa,e.toBuffer(),t.toBuffer()],s)}function qa(s,e,t){return pe([fa,e.toBuffer(),t.toBuffer()],s)}function Ao(s){return pe([Buffer.from("__event_authority","utf8")],s)}function Ua(s,e){return pe([zf,e.toBuffer()],s)}function Do(s,e,t){return pe([Xf,e.toBuffer(),t.toBuffer()],s)}function gn(s,e,t){return pe([e.toBuffer(),t.toBuffer()],s)}function Ga(s){return pe([Yf],s)}function Pn(s,e,t){return pe([e.toBuffer(),t.toBuffer()],s)}function Xa(s){return pe([Hf],s)}function Vl(s,e,t){return pe([Qf,e.toBuffer(),t.toBuffer()],s)}var Wt={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]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106])};function _l(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h){let k=_([E("decimals"),Vt("name"),Vt("symbol"),Vt("uri")]),x=_([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn")]),B=_([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),K=_([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),I=[{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:za,isSigner:!1,isWritable:!1},{pubkey:za,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:pt,isSigner:!1,isWritable:!1},{pubkey:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),O=Buffer.alloc(x.span),L=Buffer.alloc(b.type==="ConstantCurve"?K.span:B.span);return k.encode({decimals:d,name:p,symbol:f,uri:y},C),b.type==="ConstantCurve"?K.encode(q(V({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?B.encode(q(V({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&B.encode(q(V({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),x.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:w,cpmmCreatorFeeOn:T},O),new Et({keys:I,programId:s,data:Buffer.from([...Wt.initializeV2,...C,...L,...O])})}function El(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w,T,h){let k=_([E("decimals"),Vt("name"),Vt("symbol"),Vt("uri")]),x=_([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),_([Ut("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),B=_([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),K=_([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),I=[{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:jf,isSigner:!1,isWritable:!1},{pubkey:za,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),O=Buffer.alloc(x.span),L=Buffer.alloc(y.type==="ConstantCurve"?K.span:B.span);return k.encode({decimals:m,name:d,symbol:p,uri:f},C),y.type==="ConstantCurve"?K.encode(q(V({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?B.encode(q(V({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&B.encode(q(V({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),x.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:w,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new qo(0)}},O),new Et({keys:I,programId:s,data:Buffer.from([...Wt.initializeWithToken2022,...C,...L,...O])})}function Jr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new qo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.buyExactIn,...k])})}function Wl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new qo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.buyExactOut,...k])})}function es(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new qo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.sellExactIn,...k])})}function Dl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,w){let T=_([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:Ao(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new qo(0)},k),new Et({keys:h,programId:s,data:Buffer.from([...Wt.sellExactOut,...k])})}function Ya(s,e,t,n,o,i,r,a,c){let u=_([]),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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:$r,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Et({keys:l,programId:s,data:Buffer.from([...Wt.claimVestedToken,...m])})}function Ha(s,e,t,n,o,i){let r=_([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:Qt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Et({keys:a,programId:s,data:Buffer.from([...Wt.createVestingAccount,...c])})}function Qa(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:Qt.programId,isSigner:!1,isWritable:!0},{pubkey:$r,isSigner:!1,isWritable:!0}];return new Et({keys:u,programId:s,data:Wt.claimPlatformFee})}function ql(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Vt("name"),Vt("web"),Vt("img"),P("creatorFeeRate"),P("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+4*3);return y.encode({platformScale:c.platformScale,creatorScale:c.creatorScale,burnScale:c.burnScale,feeRate:u,name:m,web:d,img:p,creatorFeeRate:l,platformVestingScale:f},g),new Et({keys:b,programId:s,data:Buffer.from([...Wt.createPlatformConfig,...g])})}function Ul(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=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=_([E("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);i=Buffer.alloc(r.span),r.encode(V({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=_([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=_([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=_([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=_([E("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Vt("name"),Vt("web"),Vt("img"),F("transferFeeExtensionAuth"),P("creatorFeeRate"),P("platformVestingScale"),F("platformVestingWallet")]);i=Buffer.alloc(1+32+32+32+8*5+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,platformVestingWallet:n.value.platformVestingWallet,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,platformVestingScale:n.value.platformVestingScale},i)}else if(n.type==="updateVestingWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:9,value:n.value},i)}else if(n.type==="updatePlatformVestingScale"){let r=_([E("index"),P("value")]);i=Buffer.alloc(r.span),r.encode({index:10,value:n.value},i)}else if(n.type==="updatePlatformCpCreator"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:11,value:n.value},i)}else throw Error("updateInfo params type error");return new Et({keys:o,programId:s,data:Buffer.from([...Wt.updatePlaformConfig,...i])})}function ja(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:$r,isSigner:!1,isWritable:!1}];return new Et({keys:c,programId:s,data:Wt.claimPlatformFeeFromVault})}function Za(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:$r,isSigner:!1,isWritable:!1}];return new Et({keys:a,programId:s,data:Wt.claimCreatorFee})}var IC=new qo("18446744073709551615");function Gl(s,e,t,n,o,i){let r=[{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:i,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1}];return new Et({keys:r,programId:s,data:Wt.createPlatformVestingAccount})}import ts 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 ns=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 ts(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new ts(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 ts(0))||m.lt(new ts(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 io(o,i)}};import tn from"bn.js";import os from"bn.js";var is=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 os(0)))throw Error("invalid input 1");let a=new os(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new os(0))||t.lt(new os(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 io(o,n)}};import Dt from"bn.js";import Xl from"bn.js";var _i=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 Xl(o.mul(this._Q64).toFixed(0))}};_i._Q64=new M(new Xl(1).shln(64).toString());var rs=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(_i._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 Dt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Dt(3)).sub(i),u=t.mul(new Dt(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new Dt(2)).mul(st).div(l);if(!m.gt(new Dt(0)))throw Error("a need gt 0");if(!yi.gt(m))throw Error("a need lt u64 max");if(m.lt(new Dt(0))||u.lt(new Dt(0)))throw Error("invalid input 0");return{a:m,b:new Dt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Dt(2).mul(n).mul(st).div(e.virtualA);return new Dt(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 io(e.virtualA.mul(o),new Dt(2).mul(st)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=io(e.virtualA.mul(o),new Dt(2).mul(st));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Dt(2).mul(n).mul(st).div(e.virtualA),i=new Dt(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Lt=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(V({},m),{decimalA:c,decimalB:u})),p=o.div(new tn(t-1)),f=new tn(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,w=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(w),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:w,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(k.amountA.amount),w=w.add(k.amountB);let x=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:w},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(Ft).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new tn(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(Ft);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(Ft);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new tn(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new tn(10).pow(new tn(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new tn(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 w=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Ns(b,c,u),amountB:g,splitFee:w}}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=Os(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=Ns(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=Lt.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:Os(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 tn(0):e.mul(n).div(r),c=r.isZero()?new tn(0):e.mul(o).div(r),u=r.isZero()?new tn(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 jo(e,t,Ft)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Ft),o=Ft.sub(t);return n.add(o).sub(new tn(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new tn(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 ns;case 1:return is;case 2:return rs}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as wo,TOKEN_PROGRAM_ID as Ee,createAssociatedTokenAccountIdempotentInstruction as qt,createSyncNativeInstruction as Zf,getTransferFeeConfig as ss,unpackMint as as}from"@solana/spl-token";import ie from"bn.js";import{PublicKey as zl,SystemProgram as $f}from"@solana/web3.js";var us={initPriceX64:new ie("515752397214619"),supply:new ie(1e15),totalSellA:new ie(7931e11),totalFundRaisingB:new ie(85e9),totalFundRaisingBUSD:new ie(125e8),totalLockedAmount:new ie("0"),cliffPeriod:new ie("0"),unlockPeriod:new ie("0"),decimals:6,virtualA:new ie("1073471847374405"),virtualB:new ie("30050573465"),realA:new ie(0),realB:new ie(0),protocolFee:new ie(0),platformId:new zl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ie(0),cliffPeriod:new ie(0),unlockPeriod:new ie(0),startTime:new ie(0),totalAllocatedShare:new ie(0)}},Jn=new ie(1e4);var Ei=class extends De{constructor(e){super(e)}async createLaunchpad(O){var L=O,{programId:e=rt,authProgramId:t,platformId:n=us.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:A,slippage:w,associatedOnly:T=!0,checkCreateATAOwner:h=!1,extraSigners:k,token2022:x,transferFeeExtensionParams:B,creatorFeeOn:K=0,platformConfigAccess:I}=L,C=Ge(L,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","platformConfigAccess"]);var ou,iu,ru,su,au,uu,cu,lu,mu,du,pu;let N=this.createTxBuilder(b);t=t!=null?t:Ht(e).publicKey,x=!!B,x&&(l="cpmm");let R=d;if(!R&&m){let An=await this.scope.connection.getAccountInfo(m);An&&(R=Zn.decode(An.data))}R||this.logAndCreateError("config not found");let v=R.mintB,z=R.curveType,{publicKey:H}=Wo(e,o,v),{publicKey:ce}=qa(e,H,o),{publicKey:ae}=qa(e,H,v),{publicKey:ue}=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 fe=(await this.scope.api.fetchLaunchConfigs()).find(An=>An.key.pubKey===m.toBase58()),te=(ou=C==null?void 0:C.supply)!=null?ou:new ie(fe.defaultParams.supplyInit),J=(iu=C==null?void 0:C.totalSellA)!=null?iu:new ie(fe.defaultParams.totalSellA),Se=(ru=C==null?void 0:C.totalFundRaisingB)!=null?ru:new ie(fe.defaultParams.totalFundRaisingB),Me=(su=C==null?void 0:C.totalLockedAmount)!=null?su:new ie(0),he=await this.scope.connection.getAccountInfo(n);he||this.logAndCreateError("platform id not found:",n.toString());let bt=Ln.decode(he.data),Nt=bt.platformVestingScale,ot=bt.feeRate,Xi=Lt.getCurve(R.curveType).getInitParam({supply:te,totalFundRaising:Se,totalSell:J,totalLockedAmount:Me,migrateFee:R.migrateFee}),ho;try{ho=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let jt={epoch:new ie(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(au=ho==null?void 0:ho.decimals)!=null?au:r,supply:te,totalSellA:J,mintA:new zl(o),mintB:v,virtualA:Xi.a,virtualB:Xi.b,realA:us.realA,realB:us.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:us.protocolFee,platformFee:ot,platformId:n,configId:m,vaultA:ce,vaultB:ae,creator:this.scope.ownerPubKey,totalFundRaisingB:Se,vestingSchedule:{totalLockedAmount:Me,cliffPeriod:new ie(0),unlockPeriod:new ie(0),startTime:new ie(0),totalAllocatedShare:new ie(0)},mintProgramFlag:x?1:0,cpmmCreatorFeeOn:K,platformVestingShare:Nt!=null?Nt:new ie(0)},zi=Lt.getCurve(R.curveType),{c:Yi}=zi.getInitParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalLockedAmount:Me,totalSell:R.curveType===0?jt.totalSellA:new ie(0),migrateFee:R.migrateFee});try{Lt.checkParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalSell:Yi,totalLockedAmount:Me,decimals:jt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(An){this.logAndCreateError(`check create mint params failed, ${An.message}`)}N.addInstruction({instructions:[x?El(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,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,(uu=C==null?void 0:C.cliffPeriod)!=null?uu:new ie(0),(cu=C==null?void 0:C.unlockPeriod)!=null?cu:new ie(0),K,B):_l(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,ae,ue,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,(lu=C==null?void 0:C.cliffPeriod)!=null?lu:new ie(0),(mu=C==null?void 0:C.unlockPeriod)!=null?mu:new ie(0),K,I?Vl(e,n,m).publicKey:void 0)]});let To=x?await this.scope.connection.getEpochInfo():void 0,It=B?{epoch:BigInt((To==null?void 0:To.epoch)||0),maximumFee:BigInt((du=B==null?void 0:B.maxinumFee.toString())!=null?du:0),transferFeeBasisPoints:(pu=B==null?void 0:B.transferFeeBasePoints)!=null?pu:0}:void 0,Go={amountA:{amount:new ie(0),fee:void 0,expirationTime:void 0},amountB:new ie(0),splitFee:{platformFee:new ie(0),shareFee:new ie(0),protocolFee:new ie(0),creatorFee:new ie(0)}},ms;if(k!=null&&k.length&&N.addInstruction({signers:k}),!C.createOnly){let{builder:An,extInfo:$l}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?wo:void 0,mintA:o,mintB:v,poolInfo:jt,buyAmount:g,minMintAAmount:A,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:ot,slippage:w,associatedOnly:T,checkCreateATAOwner:h,skipCheckMintA:!It,transferFeeConfigA:It?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:It,newerTransferFee:It}:void 0,fromCreate:!0});N.addInstruction(V({},An.AllTxData)),Go=V({},$l),ms=(this.scope.cluster==="devnet"||p===1)&&C.shareFeeReceiver?[An.allInstructions[0]]:void 0}return N.addTipInstruction(y),p===0?N.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:Go,splitIns:ms,address:q(V({},jt),{poolId:H})}):N.sizeCheckBuild({computeBudgetConfig:f,swapInfo:Go,splitIns:ms,address:q(V({},jt),{poolId:H})})}async buyToken({programId:e=rt,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 ie(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:w=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:k=!1}){var J,Se,Me;p.lte(new ie(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let x=this.createTxBuilder(d),{publicKey:B}=Wo(e,n,i);t=t!=null?t:Ht(e).publicKey;let K=h;if(!k)if(K)o=wo;else{let he=await this.scope.connection.getAccountInfo(n);if(he&&he.owner.equals(wo)){o=he.owner;let bt=as(n,he,o);K=ss(bt)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),O=T&&C,L=O?this.scope.account.getAssociatedTokenAccount(i,Ee):null,N=C;if(x.addInstruction({instructions:[qt(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...O?[qt(this.scope.ownerPubKey,L,this.scope.ownerPubKey,i,Ee),$f.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L,lamports:BigInt(p.toString())}),Zf(L)]:[]]}),!O){let{account:he,instructionParams:bt}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:N?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!N,notUseTokenAccount:N,associatedOnly:N?!1:A,checkCreateATAOwner:w});he&&(L=he),x.addInstruction(bt||{})}L||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let he=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});he||this.logAndCreateError("cannot found pool:",B.toBase58()),R=mn.decode(he.data)}let v=a,z=await _e(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(he=>({pubkey:he})));if(!v){let he=z.find(bt=>bt.pubkey.equals(R.configId));(!he||!he.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Zn.decode(he.accountInfo.data)}let H=z.find(he=>he.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 ae=Lt.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()}),ue=new M(ae.amountA.amount.toString()).sub((Se=(J=ae.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),fe=f!=null?f:y?new ie(ue.mul(ge).toFixed(0)):ae.amountA.amount.sub((Me=ae.amountA.fee)!=null?Me:new ie(0));ae.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ae.amountA.toString()}, input ${i.toBase58()} amount: ${ae.amountB.toString()}`);let te=g?ee(g,i,Ee).publicKey:void 0;return te&&x.addInstruction({instructions:[qt(this.scope.ownerPubKey,te,g,i)]}),x.addInstruction({instructions:[Jr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,I,L,R.vaultA,R.vaultB,n,i,o,Ee,gn(e,R.platformId,i).publicKey,Pn(e,R.creator,i).publicKey,ae.amountB.lt(p)?ae.amountB:p,fe,b,te)]}),x.addCustomComputeBudget(l),x.addTipInstruction(m),x.versionBuild({txVersion:u,extInfo:q(V({},ae),{decimalOutAmount:ue,minDecimalOutAmount:new M(fe.toString())})})}async buyTokenExactOut({programId:e=rt,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 ie(0),shareFeeReceiver:A,associatedOnly:w=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ie(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let k=this.createTxBuilder(p),{publicKey:x}=Wo(e,n,i);t=t!=null?t:Ht(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=mn.decode(te.data)}let K=a,I=await _e(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 O=Ln.decode(C.accountInfo.data);u=u||O.feeRate;let L=c;if(!h)if(L)o=wo;else{let te=await this.scope.connection.getAccountInfo(n);if(te&&te.owner.equals(wo)){o=te.owner;let J=as(n,te,o);L=ss(J)||void 0}}let N=Lt.buyExactOut({poolInfo:B,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:O.creatorFeeRate,transferFeeConfigA:L,slot:await this.scope.connection.getSlot()}),R=new M(N.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 ie(R.mul(v).toFixed(0)):N.amountB,H=this.scope.account.getAssociatedTokenAccount(n,o),ce=null,ae=i.equals(Nn);k.addInstruction({instructions:[qt(this.scope.ownerPubKey,H,this.scope.ownerPubKey,n,o)]});let{account:ue,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:ae?{payer:this.scope.ownerPubKey,amount:N.amountB}:void 0,skipCloseAccount:!ae,notUseTokenAccount:ae,associatedOnly:ae?!1:w,checkCreateATAOwner:T});ue&&(ce=ue),k.addInstruction(ge||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let fe=A?ee(A,i,Ee).publicKey:void 0;return fe&&k.addInstruction({instructions:[qt(this.scope.ownerPubKey,fe,A,i)]}),k.addInstruction({instructions:[Wl(e,this.scope.ownerPubKey,t,B.configId,B.platformId,x,H,ce,B.vaultA,B.vaultB,n,i,o,Ee,gn(e,B.platformId,i).publicKey,Pn(e,B.creator,i).publicKey,y,z,g,fe)]}),k.addCustomComputeBudget(m),k.addTipInstruction(d),k.versionBuild({txVersion:l,extInfo:{maxSpentAmount:z,outAmount:y}})}async sellToken({programId:e=rt,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 ie(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Ht(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ie(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:k}=Wo(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(wo)){n=J.owner;let Se=as(o,J,n);x=ss(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:w});C&&(B=C),h.addInstruction(O||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:N}=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:w});L&&(K=L),h.addInstruction(N||{}),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(k,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(J.data)}let v=a,z=await _e(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 ae=Lt.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()}),ue=new M(ae.amountB.toString()),ge=y?new M(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new M(1),fe=f!=null?f:y?new ie(ue.mul(ge).toFixed(0)):ae.amountB;fe.lte(new ie(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:[qt(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[es(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,B,K,R.vaultA,R.vaultB,o,i,n,Ee,gn(e,R.platformId,i).publicKey,Pn(e,R.creator,i).publicKey,ae.amountA.amount.lt(p)?ae.amountA.amount:p,fe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:fe}})}async sellTokenExactOut({programId:e=rt,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 ie(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Ht(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ie(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:k}=Wo(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(wo)){n=J.owner;let Se=as(o,J,n);x=ss(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:w});C&&(B=C),h.addInstruction(O||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:N}=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:w});L&&(K=L),h.addInstruction(N||{}),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(k,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(J.data)}let v=a,z=await _e(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 ae=Lt.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()}),ue=new M(ae.amountA.amount.toString()),ge=y?new M(Jn.add(y).toNumber()/Jn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),fe=(f!=null?f:y)?new ie(ue.mul(ge).toFixed(0)):ae.amountA.amount,te=g?ee(g,i,Ee).publicKey:void 0;return te&&h.addInstruction({instructions:[qt(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[Dl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,B,K,R.vaultA,R.vaultB,o,i,n,Ee,gn(e,R.platformId,i).publicKey,Pn(e,R.creator,i).publicKey,p,fe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:fe}})}async createPlatformConfig({programId:e=rt,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:i,cpConfigId:r,migrateCpLockNftScale:a,transferFeeExtensionAuth:c,creatorFeeRate:u,feeRate:l,name:m,web:d,img:p,platformVestingScale:f=new ie(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:A}){let w=this.createTxBuilder(A),{publicKey:T}=Ua(e,t);return w.addInstruction({instructions:[ql(e,t,n,o,i,T,r,c,a,l,u,m,d,p,f)]}),w.addCustomComputeBudget(b),w.addTipInstruction(g),w.versionBuild({txVersion:y,extInfo:{platformId:T}})}async updatePlatformConfig({programId:e=rt,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Ua(e,t).publicKey;return u.addInstruction({instructions:[Ul(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createPlatformVestingAccount({programId:e=rt,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:i,vestingRecord:r,txVersion:a,computeBudgetConfig:c,txTipConfig:u,feePayer:l}){let m=this.createTxBuilder(l),d=r!=null?r:Do(e,i,n).publicKey;return m.addInstruction({instructions:[Gl(e,t,n,o,i,d)]}),m.addCustomComputeBudget(c),m.addTipInstruction(u),m.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=rt,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:Ht(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 w=mn.decode(A.data),T=await this.scope.connection.getAccountInfo(w.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",w.configId.toBase58()),f=Zn.decode(T.data).mintB,y=y!=null?y:w.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:[qt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Qa(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=rt,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:Ht(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:mn.span},{memcmp:{offset:mn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=mn.decode(m.account.data);if(d.platformFee.lte(new ie(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Ee).publicKey;u.addInstruction({instructions:[qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Qa(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=rt,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=Do(e,t,n).publicKey;return u.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=rt,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=Do(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=rt,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=Ht(e).publicKey,m=o||Do(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=mn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Ee).publicKey;return u.addInstruction({instructions:[qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[Ya(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=rt,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=V({},n),l=Ht(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=V(V({},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]||Do(e,d,this.scope.ownerPubKey).publicKey,b=ee(this.scope.ownerPubKey,f.mintA,Ee).publicKey;c.addInstruction({instructions:[qt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[Ya(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=rt,platformId:t,mintB:n,mintBProgram:o=Ee,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=gn(e,t,n).publicKey,d=Ga(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),ja(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=rt,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=Ga(e).publicKey,p=gn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Nn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:w}=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(w||{}),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:[ja(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=rt,mintB:t,mintBProgram:n=Ee,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=Pn(e,this.scope.ownerPubKey,t).publicKey,l=Xa(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[qt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Za(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=rt,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=Pn(e,this.scope.ownerPubKey,c).publicKey,m=Xa(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[qt(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),Za(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 _e(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=mn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(V({},l),{poolId:e[c],programId:u.accountInfo.owner}),i.push(l.configId)}let r=await _e(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(V({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(V({},c),{[u]:q(V({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new nt(0),Wi=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?ko: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?ko:Fe);else{let{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?ko: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,k&&c.addInstruction(k)}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?ko:Fe)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=vl({routeProgram:i,inputMint:p,swapInfo:q(V({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder(),k=u.amount.token.isToken2022?ty(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],ko):Yl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());h.addInstruction({instructions:[k],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:x}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();x.length<2&&c.addInstruction({instructions:[Yl(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 nt(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,w=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:k,remainingAccounts:x},launchPoolInfo:B,launchAuthProgramId:K,launchSwapInfo:I,outAmount:C,minOutAmount:O}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:w,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),L=e.toString()===T.poolInfo.mintA.address,N=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=L?xt.add(new nt(1)):St.sub(new nt(1)):z=le.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let H=this.createTxBuilder(A),[ce,ae]=[new ve(T.poolInfo.mintA.address),new ve(T.poolInfo.mintB.address)],[ue,ge]=[new ve(T.poolInfo.mintA.programId),new ve(T.poolInfo.mintB.programId)],fe=this.scope.account.getAssociatedTokenAccount(ce,ue),te=this.scope.account.getAssociatedTokenAccount(ae,ge);H.addInstruction({instructions:[$a(this.scope.ownerPubKey,fe,this.scope.ownerPubKey,ce,ue),$a(this.scope.ownerPubKey,te,this.scope.ownerPubKey,ae,ge)]}),(L&&N||!L&&R)&&H.addInstruction({instructions:[Jf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L?fe:te,lamports:BigInt(h.toString())}),ey(L?fe:te)]}),v[T.poolInfo.mintA.address]=fe,v[T.poolInfo.mintB.address]=te,(!fe||!te)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:fe,ownerTokenAccountB:te}),H.addInstruction(n?Be.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:te},outputMint:L?ae:ce,amountOut:k,amountInMax:h,sqrtPriceLimitX64:z,remainingAccounts:x}):Be.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:te},inputMint:new ve(e),amountIn:t,amountOutMin:k,sqrtPriceLimitX64:z,remainingAccounts:x}));let J=B.mintProgramFlag===0?Fe:ko,Se=this.scope.account.getAssociatedTokenAccount(B.mintA,J),Me=v[B.mintB.toBase58()];if(H.addInstruction({instructions:[$a(this.scope.ownerPubKey,Se,this.scope.ownerPubKey,B.mintA,J)]}),!Me){let he=B.mintB.equals(Z),{account:bt,instructionParams:Nt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:B.mintB,notUseTokenAccount:he,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:he?{payer:this.scope.ownerPubKey,amount:k}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Me=bt,Nt&&H.addInstruction(Nt)}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,gn(B.programId,B.platformId,B.mintB).publicKey,Pn(B.programId,B.creator,B.mintB).publicKey,I.amountB.lt(k)?I.amountB:k,O,c,u)]}),H.addCustomComputeBudget(b),H.versionBuild({txVersion:g,extInfo:{routes:[{mint:new ve(e),amount:n?h:t,decimal:T.poolInfo[L?"mintA":"mintB"].decimals},{mint:L?ae:ce,amount:k,decimal:T.poolInfo[L?"mintB":"mintA"].decimals},{mint:B.mintA,amount:C,decimal:B.mintDecimalsA}],outAmount:C,minOutAmount:O}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new nt(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var N,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()}),w=l;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(i)})),g.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${w.mintB.toBase58()})`);let T=m;if(!T){let ae=await this.scope.connection.getAccountInfo(w.platformId);T=Ln.decode(ae.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(w.mintA),k=Ht(w.programId).publicKey,x=h.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(N=h.extensions.feeConfig.olderTransferFee.epoch)!=null?N: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=Lt.buyExactIn({poolInfo:w,amountB:B,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:w.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 nt(0)),C=new M(I.toString()),O=new nt(1e4),L=f?new M(O.sub(new nt(f*1e4)).toNumber()/O.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:w,launchAuthProgramId:k,launchMintTransferFeeConfig:x,launchSwapInfo:K,outAmount:K.amountA.amount.sub((ce=K.amountA.fee)!=null?ce:new nt(0)),minOutAmount:new nt(C.mul(L).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new nt(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:w,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),k=this.createTxBuilder(d),x={},B=b.mintProgramFlag===0?Fe:ko,{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:O}=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(O&&k.addInstruction(O),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);x[b.mintB.toBase58()]=C,k.addInstruction({instructions:[es(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,gn(b.programId,b.platformId,b.mintB).publicKey,Pn(b.programId,b.creator,b.mintB).publicKey,A.amountA.amount.lt(e)?A.amountA.amount:e,w,r,a)]});let L=b.mintB.toString()===f.poolInfo.mintA.address,N=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=L?xt.add(new nt(1)):St.sub(new nt(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,ae]=[new ve(f.poolInfo.mintA.programId),new ve(f.poolInfo.mintB.programId)],ue=N?void 0:this.scope.account.getAssociatedTokenAccount(z,ce),ge=R?void 0:this.scope.account.getAssociatedTokenAccount(H,ae);if(!ue){let{account:fe,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:L?e:0},associatedOnly:!1,checkCreateATAOwner:u});ue=fe,te&&k.addInstruction(te)}if(!ge){let{account:fe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ae,mint:H,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:L?0:e},associatedOnly:!1,checkCreateATAOwner:u});ge=fe,te&&k.addInstruction(te)}return x[f.poolInfo.mintA.address]=ue,x[f.poolInfo.mintB.address]=ge,(!ue||!ge)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ue,ownerTokenAccountB:ge}),k.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ue,tokenAccountB:ge},inputMint:new ve(f.poolKeys[L?"mintA":"mintB"].address),amountIn:w,amountOutMin:h,sqrtPriceLimitX64:v,remainingAccounts:y})),k.addCustomComputeBudget(l),k.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:w,decimal:b.mintDecimalsB},{mint:new ve(f.poolKeys[L?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[L?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new nt(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,O,L,N;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=Ht(m.programId).publicKey,w=g.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((O=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((N=(L=g.extensions.feeConfig.newerTransferFee.epoch)!=null?L:i==null?void 0:i.epoch)!=null?N:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=Lt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:w,slot:await this.scope.connection.getSlot()}),h=T.amountB,k=new M(h.toString()),x=new nt(1e4),B=l?new M(x.sub(new nt(l*1e4)).toNumber()/x.toNumber()).clampedTo(0,1):new M(1),K=new nt(k.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:w,launchSwapInfo:T,minLaunchOutAmount:K,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=dr,clmm:n=to,cpmm:o=oo}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ii.offsetOf("baseMint"),length:64}}),r=_([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=_([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:mo.span}],dataSlice:{offset:mo.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:Hr.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=qr(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 Io({connection:this.scope.connection,mints:Array.from(o).map(y=>new ve(y))});a=V(V({},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(V({},y),{[b]:q(V({},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,w,T,h,k,x,B,K;let m=l===void 0?new nt(0):e.raw.mul(new nt(l.feeBps.toNumber())).div(new nt(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(V({},t),{address:gt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(V({},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 O={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},L=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:O,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var ce,ae,ue,ge;let z=R===void 0?On:R.data.amountOut.amount.raw.sub((ae=(ce=R.data.amountOut.fee)==null?void 0:ce.raw)!=null?ae:On),H=v===void 0?On:v.data.amountOut.amount.raw.sub((ge=(ue=v.data.amountOut.fee)==null?void 0:ue.raw)!=null?ge:On);return z.lt(H)?1:-1})[0];if(L===void 0)continue;let N=new Re(vr(O),L.data.amountOut.amount.raw.sub((A=(g=L.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:N});b.push(q(V({},v),{allTrade:!!(L.data.allTrade&&v.allTrade),amountIn:L.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new Mt({baseToken:L.data.amountIn.amount.token,denominator:L.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(w=v.amountOut.fee)==null?void 0:w.raw)!=null?T:On)}).toFixed()),priceImpact:new M(L.data.priceImpact.add(v.priceImpact).toFixed()),fee:[L.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[L.pool,R],remainingAccounts:[L.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Re(L.data.amountOut.amount.token,((x=(k=L.data.amountOut.fee)==null?void 0:k.raw)!=null?x:On).add((K=(B=v.amountOut.fee)==null?void 0:B.raw)!=null?K:On)):void 0,middleToken:L.data.amountOut.amount.token,poolReady:L.data.poolReady&&v.poolReady,poolType:[L.data.poolType,v.poolType],feeConfig:f,expirationTime:un(L.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:w}=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:[w],expirationTime:un(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:Ti(q(V({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ti(q(V({},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:Ti(q(V({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ti(q(V({},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 _e(this.scope.connection,Array.from(r).map(l=>({pubkey:new ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Da.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Zr.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(V({},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=V({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:La({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:_o(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:ht({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:q(V({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 ny,Transaction as Ja,TransactionInstruction as oy}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as iy}from"@solana/spl-token";import Hl from"bn.js";var Tt=class extends De{static getPdaPoolId(e,t){return pe([Tt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return pe([Tt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Hl(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=>Tt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Tt.VERSION_PROJECT.length;l++)a.push(...r.map(m=>Tt.getPdaOwnerId(t,m,o,l).publicKey));let c=await on(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!==Tt.POOL_LAYOUT.span||b.data.length!==Tt.OWNER_LAYOUT.span)continue;let g=Tt.POOL_LAYOUT.decode(y.data),A=Tt.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(B=>B.debtAmount.gt(new Hl(0))).filter(B=>!B).length!==3,k=i>w&&i<T&&g.status===1,x=h&&k;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:Tt.VERSION_PROJECT[m],openTime:w,endTime:T,canClaim:x,canClaimErrorType:h?k?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:[Tt.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:[Tt.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 Rs(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ja().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Ja().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ja().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),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:iy,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 oy({keys:i,programId:e,data:a})}},nn=Tt;nn.CLAIMED_NUM=3,nn.POOL_LAYOUT=_([xe(8),E("bump"),E("status"),P("openTime"),P("endTime"),F("ammId"),Q(_([E("mintDecimals"),F("mintAddress"),F("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),Tt.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),nn.OWNER_LAYOUT=_([xe(8),E("bump"),E("version"),F("poolId"),F("owner"),P("lpAmount"),Q(_([F("mintAddress"),P("debtAmount"),P("claimedAmount")]),Tt.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),nn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ny(e)),nn.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},nn.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as qi}from"@solana/web3.js";import Zl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as sy,TransactionInstruction as Ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as jl}from"@solana/spl-token";var ry=_([E("instruction"),mc("amount")]),Di=_([E("instruction")]);function cs({programId:s},e){let t=[{pubkey:jl,isSigner:!1,isWritable:!1},{pubkey:_u,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Di.span);return Di.encode({instruction:2},n),new Ql({keys:t,programId:s,data:n})}function eu(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(Di.span);Di.encode({instruction:2},r);let a=[{pubkey:jl,isWritable:!1,isSigner:!1},{pubkey:sy,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 Ql({programId:e.programId,keys:a,data:r})}var ay={[ti.IDO_PROGRAM_ID_V1.toString()]:1,[ti.IDO_PROGRAM_ID_V2.toString()]:2,[ti.IDO_PROGRAM_ID_V3.toString()]:3,[ti.IDO_PROGRAM_ID_V4.toString()]:4},Uo=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=ay[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?[cs({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new qi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[cs({programId:new qi(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new qi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[cs({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new qi(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 qi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[eu(q(V({},A),{side:"base"}))]:[],...m?[eu(q(V({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as uy}from"@solana/web3.js";import{MintLayout as cy,TOKEN_2022_PROGRAM_ID as tu,TOKEN_PROGRAM_ID as nu}from"@solana/spl-token";var Ui=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(_n.address,_n),this._mintGroup.official.add(_n.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(V({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?tu.toBase58():nu.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 _n;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(V({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new uy(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=cy.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 ls=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 an(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 fi({scope:this,moduleName:"Raydium_Farm"}),this.account=new si({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ki({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ui({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Ri({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Vi({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new nn({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Vo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Uo({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Ei({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=ly({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new wr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new ls(q(V({},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(kr);return this._owner.publicKey}setOwner(e){return this._owner=e?new an(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(oc);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(kr),new Error(kr)}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(V({},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{ls as Raydium};
2
2
  /*!
3
3
  * decimal.js v10.6.0
4
4
  * An arbitrary-precision Decimal type for JavaScript.