@raydium-io/raydium-sdk-v2 0.2.18-alpha → 0.2.19-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.
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/raydium/account/account.d.ts +2 -2
- package/lib/raydium/clmm/clmm.d.ts +2 -2
- package/lib/raydium/clmm/index.d.ts +2 -2
- package/lib/raydium/clmm/instrument.d.ts +1 -1
- package/lib/raydium/clmm/layout.d.ts +1 -1
- package/lib/raydium/clmm/type.d.ts +1 -1
- package/lib/raydium/clmm/utils/math.d.ts +1 -1
- package/lib/raydium/clmm/utils/pool.d.ts +1 -1
- package/lib/raydium/clmm/utils/position.d.ts +1 -1
- package/lib/raydium/clmm/utils/tick.d.ts +1 -1
- package/lib/raydium/clmm/utils/tickQuery.d.ts +1 -1
- package/lib/raydium/cpmm/cpmm.d.ts +2 -2
- package/lib/raydium/cpmm/cpmm.js +1 -1
- package/lib/raydium/cpmm/cpmm.js.map +1 -1
- package/lib/raydium/cpmm/cpmm.mjs +1 -1
- package/lib/raydium/cpmm/cpmm.mjs.map +1 -1
- package/lib/raydium/cpmm/layout.d.ts +1 -1
- package/lib/raydium/farm/farm.d.ts +2 -2
- package/lib/raydium/ido/ido.d.ts +2 -2
- package/lib/raydium/ido/index.d.ts +2 -2
- package/lib/raydium/index.d.ts +2 -2
- package/lib/raydium/index.js +1 -1
- package/lib/raydium/index.js.map +1 -1
- package/lib/raydium/index.mjs +1 -1
- package/lib/raydium/index.mjs.map +1 -1
- package/lib/raydium/launchpad/index.d.ts +2 -2
- package/lib/raydium/launchpad/launchpad.d.ts +2 -2
- package/lib/raydium/launchpad/layout.d.ts +1 -1
- package/lib/raydium/liquidity/layout.d.ts +2 -2
- package/lib/raydium/liquidity/liquidity.d.ts +2 -2
- package/lib/raydium/marketV2/createMarket.d.ts +2 -2
- package/lib/raydium/marketV2/index.d.ts +2 -2
- package/lib/raydium/moduleBase.d.ts +2 -2
- package/lib/raydium/raydium.d.ts +2 -2
- package/lib/raydium/raydium.js +1 -1
- package/lib/raydium/raydium.js.map +1 -1
- package/lib/raydium/raydium.mjs +1 -1
- package/lib/raydium/raydium.mjs.map +1 -1
- package/lib/raydium/token/token.d.ts +2 -2
- package/lib/raydium/tradeV2/index.d.ts +1 -1
- package/lib/raydium/tradeV2/instrument.d.ts +1 -1
- package/lib/raydium/tradeV2/trade.d.ts +2 -2
- package/lib/raydium/tradeV2/type.d.ts +1 -1
- package/lib/raydium/utils1216/index.d.ts +2 -2
- package/lib/raydium/utils1216/utils1216.d.ts +2 -2
- package/lib/{raydium-3337931c.d.ts → raydium-a0551e10.d.ts} +2 -2
- package/package.json +1 -1
- package/src/raydium/cpmm/cpmm.ts +8 -2
- /package/lib/{type-f8905221.d.ts → type-400dcd9a.d.ts} +0 -0
package/lib/raydium/raydium.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Gl=Object.defineProperty,Xl=Object.defineProperties;var zl=Object.getOwnPropertyDescriptors;var Ho=Object.getOwnPropertySymbols;var ou=Object.prototype.hasOwnProperty,ru=Object.prototype.propertyIsEnumerable;var iu=(r,e,t)=>e in r?Gl(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,_=(r,e)=>{for(var t in e||(e={}))ou.call(e,t)&&iu(r,t,e[t]);if(Ho)for(var t of Ho(e))ru.call(e,t)&&iu(r,t,e[t]);return r},q=(r,e)=>Xl(r,zl(e));var De=(r,e)=>{var t={};for(var n in r)ou.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Ho)for(var n of Ho(r))e.indexOf(n)<0&&ru.call(r,n)&&(t[n]=r[n]);return t};import{merge as jf}from"lodash";import Xu from"axios";import{PublicKey as uu}from"@solana/web3.js";import{get as su,set as Yl}from"lodash";var ss=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}},au={},Ql={};function we(r){let e=su(au,r);if(!e){let t=su(Ql,r);e=new ss({name:r,logLevel:t}),Yl(au,r,e)}return e}import{MINT_SIZE as Hl,TOKEN_PROGRAM_ID as jl,getTransferFeeConfig as Zl,unpackMint as $l}from"@solana/spl-token";var as=we("Raydium_accountInfo_util");async function $t(r,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:o=100}=_({batchRequest:!1},t),s=us(e,o),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=us(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&as.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"&&as.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new uu(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&as.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Oe(r,e,t){let n=await $t(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>q(_({},i),{accountInfo:n[o]}))}async function Ai({connection:r,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await Oe(r,e.map(c=>({pubkey:ft(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Hl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=$l(c.pubkey,c.accountInfo,(o=c.accountInfo)==null?void 0:o.owner);i[c.pubkey.toString()]=q(_({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||jl,feeConfig:(a=Zl(u))!=null?a:void 0})}return i[uu.default.toBase58()]=i[Z.toBase58()],i}import cn from"bn.js";var wi=9e15,Ln=1e9,cs="0123456789abcdef",Zo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",$o="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ls={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wi,maxE:wi,crypto:!1},du,yn,fe=!0,er="[DecimalError] ",Rn=er+"Invalid argument: ",pu=er+"Precision limit exceeded",fu=er+"crypto unavailable",yu="[object Decimal]",yt=Math.floor,Je=Math.pow,Jl=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,em=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,tm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,bu=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,en=1e7,se=7,nm=9007199254740991,im=Zo.length-1,ms=$o.length-1,G={toStringTag:yu};G.absoluteValue=G.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),ne(r)};G.ceil=function(){return ne(new this.constructor(this),this.e+1,2)};G.clampedTo=G.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(Rn+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};G.comparedTo=G.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,c=o.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(o.e!==r.e)return o.e>r.e^c<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};G.cosine=G.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+se,n.rounding=1,t=om(n,ku(n,t)),n.precision=r,n.rounding=e,ne(yn==2||yn==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};G.cubeRoot=G.cbrt=function(){var r,e,t,n,i,o,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(fe=!1,o=l.s*Je(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=lt(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Je(t,1/3),r=yt((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Ne(u.plus(l).times(a),u.plus(c),s+2,1),lt(a.d).slice(0,s)===(t=lt(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(ne(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(ne(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return fe=!0,ne(n,r,m.rounding,e)};G.decimalPlaces=G.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-yt(this.e/se))*se,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};G.dividedBy=G.div=function(r){return Ne(this,new this.constructor(r))};G.dividedToIntegerBy=G.divToInt=function(r){var e=this,t=e.constructor;return ne(Ne(e,new t(r),0,1,1),t.precision,t.rounding)};G.equals=G.eq=function(r){return this.cmp(r)===0};G.floor=function(){return ne(new this.constructor(this),this.e+1,3)};G.greaterThan=G.gt=function(r){return this.cmp(r)>0};G.greaterThanOrEqualTo=G.gte=function(r){var e=this.cmp(r);return e==1||e===0};G.hyperbolicCosine=G.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/nr(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=ki(s,1,o.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=o.times(o),o=a.minus(c.times(l.minus(c.times(l))));return ne(o,s.precision=t,s.rounding=n,!0)};G.hyperbolicSine=G.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=ki(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/nr(5,r)),i=ki(o,2,i,i,!0);for(var s,a=new o(5),c=new o(16),u=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return o.precision=e,o.rounding=t,ne(i,e,t,!0)};G.hyperbolicTangent=G.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,Ne(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?Jt(t,i,o):new t(0):new t(NaN):e.isZero()?Jt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=Jt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};G.inverseHyperbolicCosine=G.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,fe=!1,t=t.times(t).minus(1).sqrt().plus(t),fe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};G.inverseHyperbolicSine=G.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,fe=!1,t=t.times(t).plus(1).sqrt().plus(t),fe=!0,n.precision=r,n.rounding=e,t.ln())};G.inverseHyperbolicTangent=G.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?ne(new o(i),r,e,!0):(o.precision=t=n-i.e,i=Ne(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};G.inverseSine=G.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=Jt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};G.inverseTangent=G.atan=function(){var r,e,t,n,i,o,s,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<=ms)return s=Jt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=ms)return s=Jt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/se+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(fe=!1,e=Math.ceil(a/se),n=1,c=u.times(u),s=new l(u),i=u;r!==-1;)if(i=i.times(c),o=s.minus(i.div(n+=2)),i=i.times(c),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),fe=!0,ne(s,l.precision=m,l.rounding=d,!0)};G.isFinite=function(){return!!this.d};G.isInteger=G.isInt=function(){return!!this.d&&yt(this.e/se)>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(r){return this.cmp(r)<0};G.lessThanOrEqualTo=G.lte=function(r){return this.cmp(r)<1};G.logarithm=G.log=function(r){var e,t,n,i,o,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.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)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(fe=!1,a=m+p,s=Cn(u,a),n=e?Jo(l,a+10):Cn(r,a),c=Ne(s,n,a,1),Xi(c.d,i=m,d))do if(a+=10,s=Cn(u,a),n=e?Jo(l,a+10):Cn(r,a),c=Ne(s,n,a,1),!o){+lt(c.d).slice(i+1,i+15)+1==1e14&&(c=ne(c,m+1,0));break}while(Xi(c.d,i+=10,d));return fe=!0,ne(c,m,d)};G.minus=G.sub=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.constructor;if(r=new f(r),!p.d||!r.d)return!p.s||!r.s?r=new f(NaN):p.d?r.s=-r.s:r=new f(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new f(p);else return new f(c===3?-0:0);return fe?ne(r,a,c):r}if(t=yt(r.e/se),l=yt(p.e/se),u=u.slice(),o=l-t,o){for(m=o<0,m?(e=u,o=-o,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/se),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}o=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>o;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=en-1;--u[i],u[n]+=en}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=tr(u,t),fe?ne(r,a,c):r):new f(c===3?-0:0)};G.modulo=G.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?ne(new n(t),n.precision,n.rounding):(fe=!1,n.modulo==9?(e=Ne(t,r.abs(),0,3,1),e.s*=r.s):e=Ne(t,r,0,n.modulo,1),e=e.times(r),fe=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return ds(this)};G.naturalLogarithm=G.ln=function(){return Cn(this)};G.negated=G.neg=function(){var r=new this.constructor(this);return r.s=-r.s,ne(r)};G.plus=G.add=function(r){var e,t,n,i,o,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),fe?ne(r,a,c):r;if(o=yt(m.e/se),n=yt(r.e/se),u=u.slice(),i=o-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=o,s=u.length),o=Math.ceil(a/se),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/en|0,u[i]%=en;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=tr(u,n),fe?ne(r,a,c):r};G.precision=G.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Rn+r);return t.d?(e=gu(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};G.round=function(){var r=this,e=r.constructor;return ne(new e(r),r.e+1,e.rounding)};G.sine=G.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+se,n.rounding=1,t=sm(n,ku(n,t)),n.precision=r,n.rounding=e,ne(yn>2?t.neg():t,r,e,!0)):new n(NaN)};G.squareRoot=G.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(fe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=lt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=yt((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(o=n,n=o.plus(Ne(s,o,t+2,1)).times(.5),lt(o.d).slice(0,t)===(e=lt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(ne(o,c+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(ne(n,c+1,1),r=!n.times(n).eq(s));break}return fe=!0,ne(n,c,l.rounding,r)};G.tangent=G.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=Ne(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,ne(yn==2||yn==4?t.neg():t,r,e,!0)):new n(NaN)};G.times=G.mul=function(r){var e,t,n,i,o,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=yt(l.e/se)+yt(r.e/se),c=d.length,u=p.length,c<u&&(o=d,d=p,p=o,s=c,c=u,u=s),o=[],s=c+u,n=s;n--;)o.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=o[i]+p[n]*d[i-n-1]+e,o[i--]=a%en|0,e=a/en|0;o[i]=(o[i]+e)%en|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=tr(o,t),fe?ne(r,m.precision,m.rounding):r};G.toBinary=function(r,e){return fs(this,2,r,e)};G.toDecimalPlaces=G.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(Bt(r,0,Ln),e===void 0?e=n.rounding:Bt(e,0,8),ne(t,r+t.e+1,e))};G.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=un(n,!0):(Bt(r,0,Ln),e===void 0?e=i.rounding:Bt(e,0,8),n=ne(new i(n),r+1,e),t=un(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=un(i):(Bt(r,0,Ln),e===void 0?e=o.rounding:Bt(e,0,8),n=ne(new o(i),r+i.e+1,e),t=un(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};G.toFraction=function(r){var e,t,n,i,o,s,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),o=e.e=gu(f)-p.e-1,s=o%se,e.d[0]=Je(10,s<0?se+s:s),r==null)r=o>0?e:u;else{if(a=new y(r),!a.isInt()||a.lt(u))throw Error(Rn+a);r=a.gt(e)?o>0?e:u:a}for(fe=!1,a=new y(lt(f)),l=y.precision,y.precision=o=f.length*se*2;m=Ne(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=Ne(r.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=Ne(u,n,o,1).minus(p).abs().cmp(Ne(c,t,o,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,fe=!0,d};G.toHexadecimal=G.toHex=function(r,e){return fs(this,16,r,e)};G.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:Bt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(fe=!1,t=Ne(t,r,0,e,1).times(r),fe=!0,ne(t)):(r.s=t.s,t=r),t};G.toNumber=function(){return+this};G.toOctal=function(r,e){return fs(this,8,r,e)};G.toPower=G.pow=function(r){var e,t,n,i,o,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Je(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,o=c.rounding,r.eq(1))return ne(a,n,o);if(e=yt(r.e/se),e>=r.d.length-1&&(t=u<0?-u:u)<=nm)return i=Pu(c,a,t,n),r.s<0?new c(1).div(i):ne(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Je(+a,u),e=t==0||!isFinite(t)?yt(u*(Math.log("0."+lt(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(fe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=ds(r.times(Cn(a,n+t)),n),i.d&&(i=ne(i,n+5,1),Xi(i.d,n,o)&&(e=n+10,i=ne(ds(r.times(Cn(a,e+t)),e),e+5,1),+lt(i.d).slice(n+1,n+15)+1==1e14&&(i=ne(i,n+1,0)))),i.s=s,fe=!0,c.rounding=o,ne(i,n,o))};G.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=un(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(Bt(r,1,Ln),e===void 0?e=i.rounding:Bt(e,0,8),n=ne(new i(n),r,e),t=un(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toSignificantDigits=G.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(Bt(r,1,Ln),e===void 0?e=n.rounding:Bt(e,0,8)),ne(new n(t),r,e)};G.toString=function(){var r=this,e=r.constructor,t=un(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};G.truncated=G.trunc=function(){return ne(new this.constructor(this),this.e+1,1)};G.valueOf=G.toJSON=function(){var r=this,e=r.constructor,t=un(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function lt(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=se-n.length,t&&(o+=Kn(t)),o+=n;s=r[e],n=s+"",t=se-n.length,t&&(o+=Kn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function Bt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Rn+r)}function Xi(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=se,i=0):(i=Math.ceil((e+1)/se),e%=se),o=Je(10,se-e),a=r[i]%o|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Je(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Je(10,e-3)-1,s}function jo(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=cs.indexOf(r.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function om(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/nr(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=ki(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Ne=function(){function r(n,i,o){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,c;if(o!=s)c=o>s?1:-1;else for(a=c=0;a<o;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,c){var u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K,I,C,R,N=n.constructor,O=n.s==i.s?1:-1,L=n.d,v=i.d;if(!L||!L[0]||!v||!v[0])return new N(!n.s||!i.s||(L?v&&L[0]==v[0]:!v)?NaN:L&&L[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-i.e):(c=en,p=se,l=yt(n.e/p)-yt(i.e/p)),C=v.length,K=L.length,g=new N(O),A=g.d=[],m=0;v[m]==(L[m]||0);m++);if(v[m]>(L[m]||0)&&l--,o==null?(w=o=N.precision,s=N.rounding):a?w=o+(n.e-i.e)+1:w=o,w<0)A.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,v=v[0],w++;(m<K||d)&&w--;m++)B=d*c+(L[m]||0),A[m]=B/v|0,d=B%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=r(v,d,c),L=r(L,d,c),C=v.length,K=L.length),x=C,k=L.slice(0,C),T=k.length;T<C;)k[T++]=0;R=v.slice(),R.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,k,C,T),u<0?(h=k[0],C!=T&&(h=h*c+(k[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=r(v,d,c),b=y.length,T=k.length,u=e(y,k,b,T),u==1&&(d--,t(y,C<b?R:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(k,y,T,c),u==-1&&(T=k.length,u=e(v,k,C,T),u<1&&(d++,t(k,C<T?R:v,T,c))),T=k.length):u===0&&(d++,k=[0]),A[m++]=d,u&&k[0]?k[T++]=L[x]||0:(k=[L[x]],T=1);while((x++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,du=f;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,ne(g,a?o+g.e+1:o,s,f)}return g}}();function ne(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=se,s=e,l=m[d=0],c=l/Je(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/se),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,o%=se,s=o-se+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=se,s=o-se+i,c=s<0?0:l/Je(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Je(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(o>0?s>0?l/Je(10,i-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Je(10,(se-e%se)%se),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Je(10,se-o),m[d]=s>0?(l/Je(10,i-s)%Je(10,s)|0)*a:0),u)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==en&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=en)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return fe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function un(r,e,t){if(!r.isFinite())return wu(r);var n,i=r.e,o=lt(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Kn(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+Kn(-i-1)+o,t&&(n=t-s)>0&&(o+=Kn(n))):i>=s?(o+=Kn(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+Kn(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=Kn(n))),o}function tr(r,e){var t=r[0];for(e*=se;t>=10;t/=10)e++;return e}function Jo(r,e,t){if(e>im)throw fe=!0,t&&(r.precision=t),Error(pu);return ne(new r(Zo),e,1,!0)}function Jt(r,e,t){if(e>ms)throw Error(pu);return ne(new r($o),e,t,!0)}function gu(r){var e=r.length-1,t=e*se+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Kn(r){for(var e="";r--;)e+="0";return e}function Pu(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/se+4);for(fe=!1;;){if(t%2&&(o=o.times(e),lu(o.d,s)&&(i=!0)),t=yt(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),lu(e.d,s)}return fe=!0,o}function cu(r){return r.d[r.d.length-1]&1}function Au(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function ds(r,e){var t,n,i,o,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,f=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(fe=!1,c=f):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Je(2,m))/Math.LN10*2+5|0,c+=n,t=o=s=new d(1),d.precision=c;;){if(o=ne(o.times(r),c,1),t=t.times(++l),a=s.plus(Ne(o,t,c,1)),lt(a.d).slice(0,c)===lt(s.d).slice(0,c)){for(i=m;i--;)s=ne(s.times(s),c,1);if(e==null)if(u<3&&Xi(s.d,c-n,p,u))d.precision=c+=10,t=o=a=new d(1),l=0,u++;else return ne(s,d.precision=f,p,fe=!0);else return d.precision=f,s}s=a}}function Cn(r,e){var t,n,i,o,s,a,c,u,l,m,d,p=1,f=10,y=r,b=y.d,g=y.constructor,A=g.rounding,k=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(fe=!1,l=k):l=e,g.precision=l+=f,t=lt(b),n=t.charAt(0),Math.abs(o=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(r),t=lt(y.d),n=t.charAt(0),p++;o=y.e,n>1?(y=new g("0."+t),o++):y=new g(n+"."+t.slice(1))}else return u=Jo(g,l+2,k).times(o+""),y=Cn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?ne(y,k,A,fe=!0):y;for(m=y,c=s=y=Ne(y.minus(1),y.plus(1),l,1),d=ne(y.times(y),l,1),i=3;;){if(s=ne(s.times(d),l,1),u=c.plus(Ne(s,new g(i),l,1)),lt(u.d).slice(0,l)===lt(c.d).slice(0,l))if(c=c.times(2),o!==0&&(c=c.plus(Jo(g,l+2,k).times(o+""))),c=Ne(c,new g(p),l,1),e==null)if(Xi(c.d,l-f,A,a))g.precision=l+=f,u=s=y=Ne(m.minus(1),m.plus(1),l,1),d=ne(y.times(y),l,1),i=a=1;else return ne(c,g.precision=k,A,fe=!0);else return g.precision=k,c;c=u,i+=2}}function wu(r){return String(r.s*r.s/0)}function ps(r,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%se,t<0&&(n+=se),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=se;n<i;)r.d.push(+e.slice(n,n+=se));e=e.slice(n),n=se-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),fe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function rm(r,e){var t,n,i,o,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),bu.test(e))return ps(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(em.test(e))t=16,e=e.toLowerCase();else if(Jl.test(e))t=2;else if(tm.test(e))t=8;else throw Error(Rn+e);for(o=e.search(/p/i),o>0?(c=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=Pu(n,new n(t),o,o*2)),u=jo(e,t,en),l=u.length-1,o=l;u[o]===0;--o)u.pop();return o<0?new n(r.s*0):(r.e=tr(u,l),r.d=u,fe=!1,s&&(r=Ne(r,i,a*4)),c&&(r=r.times(Math.abs(c)<54?Je(2,c):zi.pow(2,c))),fe=!0,r)}function sm(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:ki(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/nr(5,t)),e=ki(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function ki(r,e,t,n,i){var o,s,a,c,u=1,l=r.precision,m=Math.ceil(l/se);for(fe=!1,c=t.times(t),a=new r(n);;){if(s=Ne(a.times(c),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Ne(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,u++}return fe=!0,s.d.length=m+1,s}function nr(r,e){for(var t=r;--e;)t*=r;return t}function ku(r,e){var t,n=e.s<0,i=Jt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return yn=n?4:1,e;if(t=e.divToInt(i),t.isZero())yn=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return yn=cu(t)?n?2:3:n?4:1,e;yn=cu(t)?n?1:4:n?3:2}return e.minus(i).abs()}function fs(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor,f=t!==void 0;if(f?(Bt(t,1,Ln),n===void 0?n=p.rounding:Bt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=wu(r);else{for(l=un(r),s=l.indexOf("."),f?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=jo(un(d),10,i),d.e=d.d.length),m=jo(l,10,i),o=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(s<0?o--:(r=new p(r),r.d=m,r.e=o,r=Ne(r,d,t,n,0,i),m=r.d,o=r.e,u=du),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=cs.charAt(m[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=jo(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=cs.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>c)for(o-=c;o--;)l+="0";else o<c&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function lu(r,e){if(r.length>e)return r.length=e,!0}function am(r){return new this(r).abs()}function um(r){return new this(r).acos()}function cm(r){return new this(r).acosh()}function lm(r,e){return new this(r).plus(e)}function mm(r){return new this(r).asin()}function dm(r){return new this(r).asinh()}function pm(r){return new this(r).atan()}function fm(r){return new this(r).atanh()}function ym(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=Jt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?Jt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=Jt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(Ne(r,e,o,1)),e=Jt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Ne(r,e,o,1)),t}function bm(r){return new this(r).cbrt()}function gm(r){return ne(r=new this(r),r.e+1,2)}function Pm(r,e,t){return new this(r).clamp(e,t)}function Am(r){if(!r||typeof r!="object")throw Error(er+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Ln,"rounding",0,8,"toExpNeg",-wi,0,"toExpPos",0,wi,"maxE",0,wi,"minE",-wi,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=ls[t]),(n=r[t])!==void 0)if(yt(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Rn+t+": "+n);if(t="crypto",i&&(this[t]=ls[t]),(n=r[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(fu);else this[t]=!1;else throw Error(Rn+t+": "+n);return this}function wm(r){return new this(r).cos()}function km(r){return new this(r).cosh()}function hu(r){var e,t,n;function i(o){var s,a,c,u=this;if(!(u instanceof i))return new i(o);if(u.constructor=i,mu(o)){u.s=o.s,fe?!o.d||o.e>i.maxE?(u.e=NaN,u.d=null):o.e<i.minE?(u.e=0,u.d=[0]):(u.e=o.e,u.d=o.d.slice()):(u.e=o.e,u.d=o.d?o.d.slice():o.d);return}if(c=typeof o,c==="number"){if(o===0){u.s=1/o<0?-1:1,u.e=0,u.d=[0];return}if(o<0?(o=-o,u.s=-1):u.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;fe?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[o]):(u.e=s,u.d=[o]);return}else if(o*0!==0){o||(u.s=NaN),u.e=NaN,u.d=null;return}return ps(u,o.toString())}else if(c!=="string")throw Error(Rn+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),bu.test(o)?ps(u,o):rm(u,o)}if(i.prototype=G,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Am,i.clone=hu,i.isDecimal=mu,i.abs=am,i.acos=um,i.acosh=cm,i.add=lm,i.asin=mm,i.asinh=dm,i.atan=pm,i.atanh=fm,i.atan2=ym,i.cbrt=bm,i.ceil=gm,i.clamp=Pm,i.cos=wm,i.cosh=km,i.div=hm,i.exp=Tm,i.floor=Im,i.hypot=Bm,i.ln=xm,i.log=Sm,i.log10=Cm,i.log2=Km,i.max=Rm,i.min=Lm,i.mod=Nm,i.mul=Om,i.pow=Mm,i.random=vm,i.round=Fm,i.sign=_m,i.sin=Vm,i.sinh=Em,i.sqrt=Wm,i.sub=Dm,i.sum=qm,i.tan=Um,i.tanh=Gm,i.trunc=Xm,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return i.config(r),i}function hm(r,e){return new this(r).div(e)}function Tm(r){return new this(r).exp()}function Im(r){return ne(r=new this(r),r.e+1,3)}function Bm(){var r,e,t=new this(0);for(fe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return fe=!0,new this(1/0);t=e}return fe=!0,t.sqrt()}function mu(r){return r instanceof zi||r&&r.toStringTag===yu||!1}function xm(r){return new this(r).ln()}function Sm(r,e){return new this(r).log(e)}function Km(r){return new this(r).log(2)}function Cm(r){return new this(r).log(10)}function Rm(){return Au(this,arguments,"lt")}function Lm(){return Au(this,arguments,"gt")}function Nm(r,e){return new this(r).mod(e)}function Om(r,e){return new this(r).mul(e)}function Mm(r,e){return new this(r).pow(e)}function vm(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:Bt(r,1,Ln),n=Math.ceil(r/se),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(fu);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=se,n&&r&&(i=Je(10,se-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=se)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<se&&(t-=se-n)}return s.e=t,s.d=a,s}function Fm(r){return ne(r=new this(r),r.e+1,this.rounding)}function _m(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Vm(r){return new this(r).sin()}function Em(r){return new this(r).sinh()}function Wm(r){return new this(r).sqrt()}function Dm(r,e){return new this(r).sub(e)}function qm(){var r=0,e=arguments,t=new this(e[r]);for(fe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return fe=!0,ne(t,this.precision,this.rounding)}function Um(r){return new this(r).tan()}function Gm(r){return new this(r).tanh()}function Xm(r){return ne(r=new this(r),r.e+1,1)}G[Symbol.for("nodejs.util.inspect.custom")]=G.toString;G[Symbol.toStringTag]="Decimal";var zi=G.constructor=hu(ls);Zo=new zi(Zo);$o=new zi($o);var F=zi;import Jm from"big.js";import rr from"bn.js";import zm from"toformat";var Ym=zm,Yi=Ym;import or from"big.js";import Hm from"bn.js";import jm from"decimal.js-light";import Qi from"bn.js";var Tu=9007199254740991;function ee(r){let e=we("Raydium_parseBigNumberish");if(r instanceof Qi)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new Qi(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Tu||r<=-Tu)&&e.logWithError(`BigNumberish number overflow: ${r}`),new Qi(String(r))):typeof r=="bigint"?new Qi(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new Qi(0))}var ir=we("module/fraction"),ys=Yi(or),Hi=Yi(jm),Zm={[0]:Hi.ROUND_DOWN,[1]:Hi.ROUND_HALF_UP,[2]:Hi.ROUND_UP},$m={[0]:or.roundDown,[1]:or.roundHalfUp,[2]:or.roundUp},xe=class{constructor(e,t=new Hm(1)){this.numerator=ee(e),this.denominator=ee(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new xe(this.denominator,this.numerator)}add(e){let t=e instanceof xe?e:new xe(ee(e));return this.denominator.eq(t.denominator)?new xe(this.numerator.add(t.numerator),this.denominator):new xe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof xe?e:new xe(ee(e));return this.denominator.eq(t.denominator)?new xe(this.numerator.sub(t.numerator),this.denominator):new xe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof xe?e:new xe(ee(e));return new xe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof xe?e:new xe(ee(e));return new xe(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.`),Hi.set({precision:e+1,rounding:Zm[n]});let i=new Hi(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.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.`),ys.DP=e,ys.RM=$m[n]||1,new ys(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ed=we("Raydium_amount"),Iu=Yi(Jm);function td(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):ed.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var Ke=class extends xe{constructor(t,n,i=!0,o){let s=new rr(0),a=bs.pow(new rr(t.decimals));if(i)s=ee(n);else{let c=new rr(0),u=new rr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=td(n.toString(),t.decimals);c=ee(l),u=ee(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=we(o||"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 Ke(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Ke(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Iu.DP=this.token.decimals,new Iu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as nd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bu}from"@solana/spl-token";var Nn={chainId:101,address:nd.default.toBase58(),programId:Bu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},bt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Bu.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 ks}from"@solana/web3.js";import{PublicKey as qe,SystemProgram as xu,SYSVAR_RENT_PUBKEY as id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as od}from"@solana/spl-token";function S({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var gs=[S({pubkey:od,isWritable:!1}),S({pubkey:xu.programId,isWritable:!1}),S({pubkey:id,isWritable:!1})];function Ps({publicKey:r,transformSol:e}){let t=As(r.toString());if(t instanceof qe)return e&&t.equals(it)?Z:t;if(e&&t.toString()===it.toBase58())return Z;if(typeof t=="string"){if(t===qe.default.toBase58())return qe.default;try{return new qe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function As(r){try{return new qe(r)}catch{return r}}var sr=new qe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),On=new qe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new qe("SysvarRent111111111111111111111111111111111"),Su=new qe("SysvarC1ock11111111111111111111111111111111"),qt=new qe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),rd=new qe("Sysvar1nstructions1111111111111111111111111"),ws=xu.programId,Ey=new qe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Wy=new qe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Dy=new qe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),qy=new qe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Uy=new qe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Gy=new qe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Xy=new qe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),zy=new qe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Yy=new qe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Qy=new qe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Hy=new qe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new qe("So11111111111111111111111111111111111111112"),it=qe.default;function ft(r){return Ps({publicKey:r,transformSol:!0})}var hs=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===it.toBase58()||e instanceof ks&&it.equals(e)){this.decimals=bt.decimals,this.symbol=bt.symbol,this.name=bt.name,this.mint=new ks(bt.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=o?ks.default:Ps({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ue=hs;Ue.WSOL=new hs(q(_({},bt),{mint:bt.address}));var Ts=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=Ts;ar.SOL=new Ts(Nn);import sd from"bn.js";var Ku=new xe(new sd(100)),rt=class extends xe{toSignificant(e=5,t,n){return this.mul(Ku).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ku).toFixed(e,t,n)}};var ad=we("Raydium_price"),xt=class extends xe{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new xe(Is(n.decimals),Is(i.decimals))}get raw(){return new xe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new xt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ad.logWithError("mul token not equals");let n=super.mul(t);return new xt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};import{PublicKey as ud}from"@solana/web3.js";import cd from"bn.js";function Cu(r){return typeof r=="object"&&r!==null&&![Ue,Ke,ud,xe,cd,xt,rt].some(e=>typeof e=="object"&&r instanceof e)}function mt(r){return typeof r=="string"?As(r):Array.isArray(r)?r.map(e=>mt(e)):Cu(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,mt(t)])):r}var St=new cn(0),Ru=new cn(1),Gb=new cn(2),Xb=new cn(3),zb=new cn(5),bs=new cn(10),Yb=new cn(100),Qb=new cn(1e3),Hb=new cn(1e4);function Is(r){return bs.pow(ee(r))}function ur(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function ji(r,e,t){return r.mul(e).add(t).sub(new cn(1)).div(t)}function cr(r,e,t){return r.mul(e).div(t)}function us(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var tn=class{constructor(e){this._owner=e}get publicKey(){return tn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return tn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return tn.isKeyPair(this._owner)}get isPublicKey(){return tn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!tn.isKeyPair(e)}};import{PublicKey as yd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";import{ComputeBudgetProgram as Lu,Keypair as Ou,PublicKey as ld,Transaction as Mu,TransactionMessage as md,VersionedTransaction as vu}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 dd}from"@solana/spl-token";var Nu=we("Raydium_txUtil"),Fu=1644;function lr(r){let e=[],t=[];return r.microLamports&&(e.push(Lu.setComputeUnitPrice({microLamports:r.microLamports})),t.push(X.SetComputeUnitPrice)),r.units&&(e.push(Lu.setComputeUnitLimit({units:r.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function hi(r,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:i.blockhash}async function mr(r,e){return r.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);r.onSignature(e,o=>{if(clearTimeout(i),!o.err){t("");return}n(Object.assign(o.err,{txId:e}))},"confirmed")})}function Bs(r,e){r.length<1&&Nu.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Nu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Mu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Fu}catch{return!1}}function ce(r,e){let[t,n]=ld.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function Zi({instructions:r,payer:e,signers:t}){return Bs(r,[e,...t])}function $i({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ou.generate().publicKey.toString()}){let o=new md({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new vu(o).serialize()).toString("base64").length<Fu}catch{return!1}}var pd=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),fd=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof vu&&(e=pd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Yn(r){let e=[];return r.forEach(t=>{t instanceof Mu&&(t.recentBlockhash||(t.recentBlockhash=dd.toBase58()),t.feePayer||(t.feePayer=Ou.generate().publicKey)),e.push(fd(t))}),console.log("simulate tx string:",e),e}function J(r,e,t){return ce([r.toBuffer(),(t!=null?t:bd).toBuffer(),e.toBuffer()],new yd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var _u=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Vu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Eu=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Ji=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),bg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Wu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),xs=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),dr=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),gg=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Du=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Qn=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),eo=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Hn=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Pg=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),qu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),gd=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Pd=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ad=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),wd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),jn=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Uu=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Ag=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),fr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),yr=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),st=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),wg=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),kg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),hg=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Tg=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ig=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),to={IDO_PROGRAM_ID_V1:gd,IDO_PROGRAM_ID_V2:Pd,IDO_PROGRAM_ID_V3:Ad,IDO_PROGRAM_ID_V4:wd};var vt={OPEN_BOOK_PROGRAM:new ie("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ie("Ray1111111111111111111111111111111111111111"),AMM_V4:new ie("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ie("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ie("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ie("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ie("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ie("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ie("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ie("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ie.default,Router:new ie("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ie("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ie("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ie("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ie("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ie("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ie("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ie("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ie("Ray1111111111111111111111111111111111111111")};import Fe from"bn.js";var ln=1e4;function Ce(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=q(_({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Fe(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===ln){let c=new Fe(o.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=Mn(r.mul(new Fe(ln)),new Fe(ln-o.transferFeeBasisPoints)),u=new Fe(o.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=Mn(l.mul(new Fe(o.transferFeeBasisPoints)),new Fe(ln)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Mn(r.mul(new Fe(o.transferFeeBasisPoints)),new Fe(ln)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function nn(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function Mn(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Fe(0))?t.add(new Fe(1)):t}function Zn(r,e){if(r.isZero())return new Fe(0);let t=r.div(e);return t.isZero()?new Fe(1):r.mod(e).gt(new Fe(0))?t.add(new Fe(1)):t}function Ss(r,e,t){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),i=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Fe(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Mn(r.mul(new Fe(i.transferFeeBasisPoints)),new Fe(ln)),c=a.gt(o)?o:a;return{amount:r,fee:c,expirationTime:s}}function Ks(r,e,t){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),i=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Fe(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(i.transferFeeBasisPoints===ln){let a=new Fe(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=Mn(r.mul(new Fe(ln)),new Fe(ln-i.transferFeeBasisPoints)),c=new Fe(i.maximumFee.toString()),u=a.sub(r).gt(c)?r.add(c):a,l=Mn(u.mul(new Fe(i.transferFeeBasisPoints)),new Fe(ln)),m=l.gt(o)?o:l;return{amount:u,fee:m,expirationTime:s}}}import{PublicKey as Cs,AddressLookupTableAccount as Bi}from"@solana/web3.js";async function Rs({connection:r,address:e,cluster:t="mainnet"}){let n=await $t(r,[...new Set(e.map(o=>o.toString()))].map(o=>new Cs(o))),i={};for(let o=0;o<e.length;o++){let s=n[o],a=e[o];if(!s)continue;let c=new Bi({key:a,state:Bi.deserialize(s.data)});i[a.toString()]=c,t==="devnet"?Ii[a.toString()]=c:Ti[a.toString()]=c}return i}var Ti={},Ls=async r=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Ti[e])return Ti;let t=new Cs(e),n=await r.getAccountInfo(t);return n&&(Ti[e]=new Bi({key:t,state:Bi.deserialize(n.data)})),Ti},Ii={},Ns=async r=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ii[e])return Ii;let t=new Cs(e),n=await r.getAccountInfo(t);return n&&(Ii[e]=new Bi({key:t,state:Bi.deserialize(n.data)})),Ii};import{PublicKey as xi,sendAndConfirmTransaction as Os,SystemProgram as kd,Transaction as no,TransactionMessage as io,VersionedTransaction as oo}from"@solana/web3.js";import hd 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 hd.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 xi(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:i=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==xi.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new no;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.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 i=>{var l;let{recentBlockHash:o,skipPreflight:s=!0,sendAndConfirm:a,notSendToRpc:c}=i||{},u=o!=null?o:await hi(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Yn([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Os(this.connection,t,this.signers.find(d=>d.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),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:s}),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:i}=this.build(n),o=t.filter(l=>l.transaction.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.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:s,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 hi(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],k=0;for(let T of s){if(++k,k<=p)continue;let h=await Os(this.connection,T,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(h)}return{txIds:A,signedTxs:s}}return{txIds:await await Promise.all(s.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let A=s.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));Yn(A);let k=await this.signAllTransactions(A);if(m){let T=0,h=[],w=async()=>{if(!k[T])return;let B=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:y});h.push({txId:B,status:"sent",signedTx:k[T]}),d==null||d([...h]),T++;let x=!1,K=null,I=null,C=R=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let N=h.findIndex(O=>O.txId===B);if(N>-1){if(h[N].status==="error"||h[N].status==="success")return;h[N].status=R.err?"error":"success"}d==null||d([...h]),R.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var R;if(x){clearInterval(K);return}try{let N=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(x=!0,clearInterval(K),C({err:((R=N.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",B))}catch(N){x=!0,clearInterval(K),console.error("getTransaction timeout:",N,B)}},br)),I=this.connection.onSignature(B,R=>{if(x){this.connection.removeSignatureListener(I);return}x=!0,C(R)},"confirmed"),this.connection.getSignatureStatus(B)};return await w(),{txIds:h.map(B=>B.txId),signedTxs:k}}else{let T=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});T.push(w)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:o}=f,s=De(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Ns(this.connection):await Ls(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new xi(b));let l=await Rs({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?xi.default.toBase58():o!=null?o:await hi(this.connection,this.blockhashCommitment),d=new io({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 oo(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var T;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(Yn([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 w of h)try{w.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(l=>l.builder.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.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)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Yn(s),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await mr(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],k=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++;let h=!1,w=null,B=null,x=K=>{w!==null&&clearInterval(w),B!==null&&this.connection.removeSignatureListener(B);let I=A.findIndex(C=>C.txId===T);if(I>-1){if(A[I].status==="error"||A[I].status==="success")return;A[I].status=K.err?"error":"success"}d==null||d([...A]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(w),x({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(w),console.error("getTransaction timeout:",I,T)}},br)),B=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(B);return}h=!0,x(K)},"confirmed"),this.connection.getSignatureStatus(T)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,i=De(m,["splitIns","computeBudgetConfig"]),o=n?lr(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>q(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...o.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new xi(A));if(p!==t[l]&&u.length<12&&(Zi({instructions:y,payer:this.feePayer,signers:g})||Zi({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,Zi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new no().add(...o.instructions,...u)):a.push(new no().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>s[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=>s[y]).filter(y=>y!==void 0);Zi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new no().add(...o.instructions,...u)):a.push(new no().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var T;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await hi(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),Yn(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,w=[];for(let B of a){if(++h,h<=b){w.push("tx skipped");continue}let x=await Os(this.connection,B,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});w.push(x)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),w=[...a.slice(0,b),...h];if(f){let B=0,x=[],K=async()=>{if(!w[B])return;B<b&&(x.push({txId:"",status:"success",signedTx:w[B]}),y==null||y([...x]),B++,K());let I=await this.connection.sendRawTransaction(w[B].serialize(),{skipPreflight:A});x.push({txId:I,status:"sent",signedTx:w[B]}),y==null||y([...x]),B++;let C=!1,R=null,N=null,O=L=>{R!==null&&clearInterval(R),N!==null&&this.connection.removeSignatureListener(N);let v=x.findIndex(Y=>Y.txId===I);if(v>-1){if(x[v].status==="error"||x[v].status==="success")return;x[v].status=L.err?"error":"success"}y==null||y([...x]),L.err||K()};this.loopMultiTxStatus&&(R=setInterval(async()=>{var L;if(C){clearInterval(R);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(R),O({err:((L=v.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(R),console.error("getTransaction timeout:",v,I)}},br)),N=this.connection.onSignature(I,L=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(L)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:x.map(I=>I.txId),signedTxs:w}}else{let B=[];for(let x=0;x<w.length;x+=1){let K=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:A});B.push(K)}return{txIds:B,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:o=[]}=A,s=De(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await Ns(this.connection):await Ls(this.connection)),i),c=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let T of c)a[T]===void 0&&u.push(new xi(T));let l=await Rs({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 hi(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(_({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],w=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&($i({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||$i({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 B={};for(let x of[...new Set(c)])a[x]!==void 0&&(B[x]=a[x]);if(t&&$i({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let x=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new oo(x))}else{let x=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new oo(x))}y.push(Array.from(new Set(b.map(x=>x.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(x=>p[x]).filter(x=>x!==void 0)),b=[T]}}),b.length>0){let h=[...new Set(b.map(w=>w.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&$i({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new oo(w))}else{let w=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new oo(w))}y.push(h)}return(k=this.owner)!=null&&k.signer&&y.forEach(T=>{T.some(h=>h.publicKey.equals(this.owner.publicKey))||T.push(this.owner.signer)}),f.forEach((T,h)=>{T.sign(y[h])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async T=>{var I;let{sequentially:h,onTxUpdate:w,skipTxCount:B=0,recentBlockHash:x,skipPreflight:K=!0}=T||{};if(f.map(async(C,R)=>{y[R].length&&C.sign(y[R]),x&&(C.message.recentBlockhash=x)}),Yn(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,R=[];for(let N of f){if(++C,C<=B){console.log("skip tx: ",C),R.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await mr(this.connection,O),R.push(O)}return{txIds:R,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(B,f.length)),R=[...f.slice(0,B),...C];if(h){let N=0,O=[],L=async()=>{if(!R[N])return;if(N<B){O.push({txId:"",status:"success",signedTx:R[N]}),w==null||w([...O]),N++,L();return}let v=await this.connection.sendTransaction(R[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:R[N]}),w==null||w([...O]),N++;let Y=!1,Q=null,pe=null,ke=le=>{Q!==null&&clearInterval(Q),pe!==null&&this.connection.removeSignatureListener(pe);let Pe=O.findIndex(Ae=>Ae.txId===v);if(Pe>-1){if(O[Pe].status==="error"||O[Pe].status==="success")return;O[Pe].status=le.err?"error":"success"}w==null||w([...O]),le.err||L()};this.loopMultiTxStatus&&(Q=setInterval(async()=>{var le;if(Y){clearInterval(Q);return}try{let Pe=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});Pe&&(Y=!0,clearInterval(Q),ke({err:((le=Pe.meta)==null?void 0:le.err)||null}),console.log("tx status from getTransaction:",v))}catch(Pe){Y=!0,clearInterval(Q),console.error("getTransaction timeout:",Pe,v)}},br)),pe=this.connection.onSignature(v,le=>{if(Y){this.connection.removeSignatureListener(pe);return}Y=!0,ke(le)},"confirmed"),this.connection.getSignatureStatus(v)};return L(),{txIds:[],signedTxs:R}}else{let N=[];for(let O=0;O<R.length;O+=1){let L=await this.connection.sendTransaction(R[O],{skipPreflight:K});N.push(L)}return{txIds:N,signedTxs:R}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};import Td from"bn.js";var Kt=new Td(1e6);var at={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/v1/tagged/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"},dP=_({},at);var Gu="ray_tab_hash",Ms="ray_req_hash",Id=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Gu);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Gu,r)),r},Pr=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=De(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(Ms)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(q(_({},t),{time:Date.now(),session:Id()}));try{localStorage.setItem(Ms,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let c=JSON.stringify(t.data).substring(0,100);o[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Ms,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Pr(q(_({},t),{logCount:r,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as Bd,TOKEN_PROGRAM_ID as xd}from"@solana/spl-token";var Ar=we("Raydium_Api"),vs=new Map;var wr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Xu.create({baseURL:this.urlConfigs.BASE_HOST||at.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Ar.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Ar.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{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},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Pr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Ar.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||at.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||at.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||at.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Xu.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||at.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||at.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||at.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||at.JUP_TOKEN_LIST})).map(t=>q(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?Bd.toBase58():xd.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||at.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||at.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||at.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>vs.has(s)?(n.push(vs.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||at.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{vs.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ft(t).toBase58(),n&&n!=="undefined"?ft(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||at.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||at.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||at.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||at.CHECK_AVAILABILITY)).data}};var kr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",zu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Sr,SystemProgram as ip}from"@solana/web3.js";import{AccountLayout as Ci,createAssociatedTokenAccountIdempotentInstruction as zs,TOKEN_PROGRAM_ID as Vn,TOKEN_2022_PROGRAM_ID as op}from"@solana/spl-token";var Fs=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),_e=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(Fs(e))}logInfo(...e){this.logger.info(Fs(e))}logAndCreateError(...e){let t=Fs(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Zd,SystemProgram as $d}from"@solana/web3.js";import Jd from"bn.js";import{createCloseAccountInstruction as ep,createInitializeAccountInstruction as tp,createTransferInstruction as np,TOKEN_PROGRAM_ID as Ki}from"@solana/spl-token";import{Keypair as Yd,PublicKey as ac}from"@solana/web3.js";import Qd from"bn.js";import{TOKEN_PROGRAM_ID as Hd}from"@solana/spl-token";function Sd(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function _s(r,...e){if(!Sd(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Vs(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Yu(r,e){_s(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Tr=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),on=(r,e)=>r<<32-e|r>>>e;var jP=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Kd(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Es(r){return typeof r=="string"&&(r=Kd(r)),_s(r),r}var hr=class{clone(){return this._cloneInto()}},ZP={}.toString;function Qu(r){let e=n=>r().update(Es(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Cd(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Hu=(r,e,t)=>r&e^~r&t,ju=(r,e,t)=>r&e^r&t^e&t,Ir=class extends hr{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Tr(this.buffer)}update(e){Vs(this);let{view:t,buffer:n,blockLen:i}=this;e=Es(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=Tr(e);for(;i<=o-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Vs(this),Yu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Cd(n,i-8,BigInt(this.length*8),o),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],o)}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:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Rd=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]),vn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Fn=new Uint32Array(64),Ws=class extends Ir{constructor(){super(64,32,8,!1),this.A=vn[0]|0,this.B=vn[1]|0,this.C=vn[2]|0,this.D=vn[3]|0,this.E=vn[4]|0,this.F=vn[5]|0,this.G=vn[6]|0,this.H=vn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)Fn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Fn[m-15],p=Fn[m-2],f=on(d,7)^on(d,18)^d>>>3,y=on(p,17)^on(p,19)^p>>>10;Fn[m]=y+Fn[m-7]+f+Fn[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=on(a,6)^on(a,11)^on(a,25),p=l+d+Hu(a,c,u)+Rd[m]+Fn[m]|0,y=(on(n,2)^on(n,13)^on(n,22))+ju(n,i,o)|0;l=u,u=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+y|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+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,i,o,s,a,c,u,l)}roundClean(){Fn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Zu=Qu(()=>new Ws);import{PublicKey as Ud}from"@solana/web3.js";import nc,{isBN as ic}from"bn.js";import{bits as Ld,BitStructure as sA,blob as Nd,Blob as aA,cstr as uA,f32 as cA,f32be as lA,f64 as mA,f64be as dA,greedy as pA,Layout as Od,ns64 as fA,ns64be as yA,nu64 as Md,nu64be as bA,offset as vd,s16 as gA,s16be as PA,s24 as AA,s24be as wA,s32 as Fd,s32be as kA,s40 as hA,s40be as TA,s48 as IA,s48be as BA,s8 as xA,seq as _d,struct as SA,Structure as Vd,u16 as Ed,u16be as KA,u24 as CA,u24be as RA,u32 as Wd,u32be as LA,u40 as NA,u40be as OA,u48 as MA,u48be as vA,u8 as Dd,UInt as qd,union as FA,Union as _A,unionLayoutDiscriminator as VA,utf8 as EA}from"@solana/buffer-layout";var Br=Od,$u=Vd;var Ds=qd;var Ju=Dd,Ft=Ed;var ro=Wd;var ec=Md;var Ve=Fd;var tc=_d;var Be=Nd;var qs=Ld,Us=vd;var Jn=class extends Br{constructor(t,n,i){super(t,i);this.blob=Be(t),this.signed=n}decode(t,n=0){let i=new nc(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new nc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},xr=class extends Br{constructor(t){super(8,t);this._lower=qs(ro(),!1),this._upper=qs(ro(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return _(_({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function E(r){return new Ds(1,r)}function gt(r){return new Ds(4,r)}function P(r){return new Jn(8,!1,r)}function oe(r){return new Jn(16,!1,r)}function oc(r){return new Jn(1,!0,r)}function Si(r){return new Jn(8,!0,r)}function rc(r){return new Jn(16,!0,r)}var ei=class extends Br{constructor(t,n,i,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function M(r){return new ei(Be(32),e=>new Ud(e),e=>e.toBuffer(),r)}function Ge(r){return new ei(Ju(),Gd,Xd,r)}function Gd(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function Xd(r){return r?1:0}function sc(r,e){let t=ro("length"),n=V([t,H(r,Us(t,-t.span),"values")]);return new ei(n,({values:i})=>i,i=>({values:i}),e)}function zd(r){let e=ro("length"),t=V([e,Be(Us(e,-e.span),"data")]);return new ei(t,({data:n})=>n,n=>({data:n}),r)}function dt(r){return new ei(zd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}var Gs=class extends $u{decode(e,t){return super.decode(e,t)}};function V(r,e,t){return new Gs(r,e,t)}function H(r,e,t){let n,i=typeof e=="number"?e:ic(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=ic(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return tc(r,i,t)}var ti=V([M("mint"),M("owner"),P("amount"),gt("delegateOption"),M("delegate"),E("state"),gt("isNativeOption"),P("isNative"),P("delegatedAmount"),gt("closeAuthorityOption"),M("closeAuthority")]);var sw=we("Raydium_Util");function uc({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=ti.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:o,mint:c,amount:u,isAssociated:J(r,c,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:ac.default,amount:new Qd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function He({fromPublicKey:r,programId:e=Hd,assignSeed:t}){let n=t?btoa(t).slice(0,32):Yd.generate().publicKey.toBase58().slice(0,32);return{publicKey:jd(r,n,e),seed:n}}function jd(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Zu(n);return new ac(i)}function Xs(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Ki}=r;return tp(t,e,n,i)}function bn(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Ki}=r;return ep(e,t,i,n,o)}async function _n(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(ti.span,n),c=ee(t).add(new Jd(a)),u=He({fromPublicKey:i,programId:Ki});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[$d.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:ti.span,programId:Ki}),Xs({mint:new Zd(bt.address),tokenAccount:u.publicKey,owner:o,programId:Ki})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:s?[]:[X.CloseAccount],endInstructions:s?[]:[bn({tokenAccount:u.publicKey,payer:i,owner:o})]}}function cc({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Ki}){return np(r,e,t,BigInt(String(n)),i,o)}var so=class extends _e{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i,notSubscribeAccountChange:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._notSubscribeAccountChange=o!=null?o:!0,this._clientOwnedToken=!!(n||i)}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 J(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 i=_(_({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Vn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:op},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=uc({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.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=Vn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Sr(t.tokenProgram||Vn),d=this.getAssociatedTokenAccount(n,new Sr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!o||k.pubkey.equals(d))).sort((k,T)=>k.accountInfo.amount.lt(T.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let k=zs(s,d,s,n,m),T=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&Ci.decode(h.data).mint.equals(n)&&Ci.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else T===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(Z)&&i.amount){let h=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(b=i.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||[]),i.amount&&(f.instructions.push(cc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:Vn})),f.instructionTypes.push(X.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(bn({owner:s,payer:i.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:d,instructionParams:f}}else{let k=He({fromPublicKey:s,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Ci.span),h=ip.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:T+Number((A=(g=i.amount)==null?void 0:g.toString())!=null?A:0),space:Ci.span,programId:m});return f.instructions.push(h,Xs({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),c||(f.endInstructions.push(bn({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Vn,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let o=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let u=this.getAssociatedTokenAccount(t,n),l=await zs(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[X.CreateATA],o=u}return i&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[bn({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=Vn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new Sr(Z).equals(o)){let p=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=zs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(Vn)&&Ci.decode(y.data).mint.equals(o)&&Ci.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.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:i=Vn,amount:o,useSOLBalance:s,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new Sr(Z))&&s){let m=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=m,f=De(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=d,f=De(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Se,SystemProgram as kp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Bc}from"@solana/spl-token";import{PublicKey as Js}from"@solana/web3.js";var Ys=V([E("instruction")]),Qs=V([E("instruction")]),rp=V([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),oe("accRewardPerShare"),M("rewardVault"),M("rewardMint"),M("rewardSender"),P("rewardType"),H(P(),15,"padding")]),sp=V([P("state"),P("nonce"),M("lpVault"),M("rewardVault"),M(),M(),P(),P(),P("totalReward"),oe("perShareReward"),P("lastSlot"),P("perSlotReward")]),ap=V([P("state"),P("nonce"),M("lpVault"),M("rewardVaultA"),P("totalRewardA"),oe("perShareRewardA"),P("perSlotRewardA"),E("option"),M("rewardVaultB"),Be(7),P("totalRewardB"),oe("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),M()]),up=V([P(),P("state"),P("nonce"),P("validRewardTokenNum"),oe("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),M("lpMint"),M("lpVault"),H(rp,5,"rewardInfos"),M("creator"),M(),H(P(),32,"padding")]),cp=new Proxy(sp,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(_({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),lp=new Proxy(ap,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(_({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(r,e,t)}}),Kr=new Proxy(up,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(_({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return q(_({},o),{rewardType:((s=Object.entries(En).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),mp=V([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Hs=V([E("instruction"),P("nonce"),H(mp,5,"rewardTimeInfo")]),js=V([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Zs=V([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Vw=V([P("state"),M("id"),M("owner"),P("deposited"),H(P(),1,"rewardDebts")]),$s=V([P("state"),M("id"),M("owner"),P("deposited"),H(oe(),1,"rewardDebts"),P(""),P("voteLockedBalance"),H(P(),15)]),Ew=V([P("state"),M("id"),M("owner"),P("deposited"),H(P(),2,"rewardDebts")]),lc=V([P("state"),M("id"),M("owner"),P("deposited"),H(oe(),2,"rewardDebts"),H(P(),17)]),mc=V([P(),P("state"),M("id"),M("owner"),P("deposited"),H(oe(),5,"rewardDebts"),H(P(),16)]),_t=V([E("instruction"),P("amount")]),dp=V([M("mint"),M("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),oc("digitShift"),H(E(),7,"reserved1"),H(P(),7,"reserved2")]),pp=V([Be(8),M("governanceProgramId"),M("realm"),M("realmGoverningTokenMint"),M("realmAuthority"),H(E(),32,"reserved1"),H(dp,4,"votingMints"),Si("timeOffset"),E("bump"),H(E(),7,"reserved2"),H(P(),11,"reserved3")]),fp=V([Si("startTime"),Si("endTime"),E("kind"),H(E(),15,"reserved")]),yp=V([H(fp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ge("isUsed"),Ge("allowClawback"),E("votingMintConfigIdx"),H(E(),29,"reserved")]),bp=V([Be(8),M("voterAuthority"),M("registrar"),H(yp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),H(E(),94,"reserved")]);import{NATIVE_MINT as Qw}from"@solana/spl-token";var Hw=we("Raydium_farm_config"),dc=new Js("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),pc=new Js("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var jw=new Js("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var fc={3:$s,5:lc,6:mc},ea=r=>[3,4,5,6].indexOf(r)!==-1,ta=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=o[e])==null?void 0:s.call(o)},En={"Standard SPL":0,"Option tokens":1},Ut={[_u.toString()]:3,[Vu.toString()]:4,[Eu.toString()]:5,[Ji.toString()]:6,[vt.FARM_PROGRAM_ID_V3.toString()]:3,[vt.FARM_PROGRAM_ID_V4.toString()]:4,[vt.FARM_PROGRAM_ID_V5.toString()]:5,[vt.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as ge,SystemProgram as gc,SYSVAR_CLOCK_PUBKEY as co,SYSVAR_RENT_PUBKEY as Ap,TransactionInstruction as Xt}from"@solana/web3.js";import Pc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Kk,createAssociatedTokenAccountIdempotentInstruction as Ck,TOKEN_PROGRAM_ID as gn}from"@solana/spl-token";import gp from"bn.js";var Pp=we("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function Gt({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var yc=({programId:r,poolId:e})=>ce([e.toBuffer()],r);function bc(r){return{isSet:new gp(1),rewardPerSecond:ee(r.perSecond),rewardOpenTime:ee(r.openTime),rewardEndTime:ee(r.endTime),rewardType:ee(En[r.rewardType])}}function na(r){return ee(r.endTime).sub(ee(r.openTime)).mul(ee(r.perSecond))}function uo(r){let e=fc[r];return e||Pp.logWithError("invalid version",r),e}var wp=we("Raydium_farm_instruction"),Wk={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 lo(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||wp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ys.span);Ys.encode({instruction:s},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:o,isWritable:!1}),S({pubkey:gc.programId,isWritable:!1}),S({pubkey:Ap,isWritable:!1})];return{instruction:new Xt({programId:i,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Ac(r){var n;let e=Buffer.alloc(Hs.span);Hs.encode({instruction:0,nonce:new Pc(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...gs,S({pubkey:r.farmId}),S({pubkey:r.farmAuthority,isWritable:!1}),S({pubkey:r.lpVault}),S({pubkey:r.lpMint,isWritable:!1}),S({pubkey:r.lockVault}),S({pubkey:r.lockMint,isWritable:!1}),S({pubkey:(n=r.lockUserAccount)!=null?n:it}),S({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(S({pubkey:i.rewardMint,isWritable:!1}),S({pubkey:i.rewardVault}),S({pubkey:i.userRewardToken}));return{instruction:new Xt({programId:r.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function wc(r){let e=Buffer.alloc(Qs.span);Qs.encode({instruction:5},e);let t=[S({pubkey:gn,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.lpVault,isWritable:!1}),S({pubkey:r.rewardVault}),S({pubkey:r.userRewardToken}),S({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Xt({programId:r.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function ia({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(js.span);js.encode({instruction:3,rewardReopenTime:ee(i.openTime),rewardEndTime:ee(i.endTime),rewardPerSecond:ee(i.perSecond)},o);let s=[S({pubkey:gn,isWritable:!1}),S({pubkey:n.id}),S({pubkey:n.lpVault,isWritable:!1}),S({pubkey:e}),S({pubkey:t}),S({pubkey:r,isWritable:!1,isSigner:!0})];return new Xt({programId:n.programId,keys:s,data:o})}function oa({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Zs.span);Zs.encode({instruction:4,isSet:new Pc(1),rewardPerSecond:ee(i.perSecond),rewardOpenTime:ee(i.openTime),rewardEndTime:ee(i.endTime),rewardType:ee(En[i.rewardType])},o);let s=[...gs,S({pubkey:t.id}),S({pubkey:t.authority,isWritable:!1}),S({pubkey:i.mint,isWritable:!1}),S({pubkey:n}),S({pubkey:e}),S({pubkey:r,isWritable:!1,isSigner:!0})];return new Xt({programId:t.programId,keys:s,data:o})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ge(e.programId),new ge(e.id)],u=Gt({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(_t.span);_t.encode({instruction:2,amount:ee(s)},l);let m=[S({pubkey:gn,isWritable:!1}),S({pubkey:c}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:new ge(t.lpVault)}),S({pubkey:u}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(S({pubkey:i[d]}));return new Xt({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(_t.span);_t.encode({instruction:12,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:i[p]})),d.push(S({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function kc(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=V([E("instruction"),P("amount")]),m=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:a[0]}),S({pubkey:o,isSigner:!0,isWritable:!1}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1}),S({pubkey:i[1]}),S({pubkey:new ge(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Xt({keys:m,programId:c,data:d})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(_t.span);_t.encode({instruction:11,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function hc(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(_t.span);_t.encode({instruction:10,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function Tc(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(_t.span);_t.encode({instruction:11,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:i[p]})),d.push(S({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function Ic(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ge(e.programId),new ge(e.id)],u=Gt({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(_t.span);_t.encode({instruction:1,amount:ee(s)},l);let m=[S({pubkey:gn,isWritable:!1}),S({pubkey:gc.programId,isWritable:!1}),S({pubkey:c}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:new ge(t.lpVault)}),S({pubkey:u}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(S({pubkey:i[d]}));return new Xt({programId:a,keys:m,data:l})}var yo=class extends _e{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(it)){let n=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:na(q(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Ji,txVersion:o,feePayer:s,lockProgram:a}){var B,x;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Se(e.lpMint.address),lockInfo:{lockMint:(B=a==null?void 0:a.mint)!=null?B:dc,lockVault:(x=a==null?void 0:a.vault)!=null?x:pc},version:6,rewardInfos:t,programId:i},l=this.createTxBuilder(s),m=n!=null?n:this.scope.ownerPubKey,d=He({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(Kr.span);l.addInstruction({instructions:[kp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Kr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=yc({programId:new Se(u.programId),poolId:d.publicKey}),b=ao({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(En[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(bc(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 R=K.mint.equals(it)?new Se(bt.address):K.mint;A.push({rewardMint:R,rewardVault:ao({programId:u.programId,poolId:d.publicKey,mint:R,type:"rewardVault"}),userRewardToken:I})}let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Se(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=Ac({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:o,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i,feePayer:o}){var g;let s=Ut[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=mt((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(it)?new Se(bt.address):n.mint,m=c.rewardInfos.findIndex(A=>new Se(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:it,f=this.createTxBuilder(o),{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:[ia({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i,feePayer:o}){var m;let s=Ut[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=mt((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(o);for(let d of n){let p=d.mint.equals(it)?new Se(bt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Se(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:it,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:d,payer:u});A&&l.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ia({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return l.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o,feePayer:s}=e,a=Ut[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=mt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,l=this.createTxBuilder(s),m=i.mint.equals(it)?new Se(bt.address):i.mint,d=ao({programId:new Se(n.programId),poolId:new Se(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=m,l.addInstruction({instructions:[oa({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:i})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o,feePayer:s}=e,a=Ut[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=mt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,l=this.createTxBuilder(s);for(let m of i){let d=m.mint.equals(it)?new Se(bt.address):m.mint,p=ao({programId:new Se(n.programId),poolId:new Se(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=oa({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,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=Ut[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),ea(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Se(n.programId),new Se(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],A=Gt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(o);k.addCustomComputeBudget(l),k.addTipInstruction(m);let T={};for(let O of this.scope.account.tokenAccounts)if(a){let L=J(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&L.equals(O.publicKey)&&(T[O.mint.toString()]=O.publicKey)}else T[O.mint.toString()]=O.publicKey;let h=g.lpMint,w=T[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",T);let B=[];for(let O of d){let L=s&&O.mint.address===Z.toString(),v=T[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Se(O.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:a,checkCreateATAOwner:c});v=Y,Q&&k.addInstruction(Q)}T[O.mint.address]=v,B.push(v)}let x,K=await this.scope.connection.getAccountInfo(A);if(K&&(x=uo(f).decode(K.data)),n.programId!==Ji.toString()&&n.programId!==vt.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:O,instructionType:L}=lo({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[O],instructionTypes:[L]})}let I=ta({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:B});I&&this.logAndCreateError(I);let C={amount:ee(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:B,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Se(O))},R=f===6?Ic(C):f===5?Tc(C):hc(C),N={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[R],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,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=Ut[n.programId];ea(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=J(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=Gt({programId:new Se(n.programId),poolId:new Se(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)uo(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:R,instructionType:N}=lo({id:new Se(y.id),programId:new Se(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[R],instructionTypes:[N]})}}o&&o.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=s&&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 Se(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[A.toString()]=T;let h=[];for(let I of p){let C=s&&I.mint.address===Z.toString(),R=g[I.mint.address];if(!R){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Se(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});R=N,O&&b.addInstruction(O)}g[I.mint.address]=R,h.push(R)}let w=ta({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let B={amount:ee(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Se(I))},x=f===6?mo(B):f===5?po(B):f===4?kc(B):fo(B),K={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:i,txTipConfig:o,feePayer:s}){var y;this.scope.checkOwner();let a=mt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=Ut[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>ft(b.mint.address).equals(ft(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:it,m=this.createTxBuilder(s),d;if(t.equals(it)||t.equals(Se.default)){let b=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:na(q(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new F(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===null?(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Bc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]})):d=b}let{instruction:p,instructionType:f}=wc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(i),m.addTipInstruction(o),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(i),m={};for(let f of this.scope.account.tokenAccounts)if(o){let y=J(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>q(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=Ut[y],T=b.address,h=n&&T===Z.toString(),w=m[T];if(!w){let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Se(T),notUseTokenAccount:h,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:o,checkCreateATAOwner:s});w=R,N&&l.addInstruction(N)}m[T.toString()]=w;let B=[];for(let R of g){let N=n&&R.mint.address===Z.toString(),O=m[R.mint.address];if(!O)if(N){let{account:L,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Se(R.mint.address),notUseTokenAccount:N,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:o,checkCreateATAOwner:s});O=L,v&&l.addInstruction(v)}else{let L=new Se(R.mint.address);O=this.scope.account.getAssociatedTokenAccount(L),l.addInstruction({instructions:[Bc(this.scope.ownerPubKey,O,this.scope.ownerPubKey,L)]})}m[R.mint.address]=O,B.push(O)}let x=p[A],K={amount:St,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:w,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(R=>new Se(R))},I=k===6?mo(K):k===5?po(K):fo(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as $e}from"@solana/web3.js";import{AccountLayout as cf,NATIVE_MINT as Dr,TOKEN_PROGRAM_ID as Dn}from"@solana/spl-token";import{Keypair as Mr,PublicKey as z,SystemProgram as kn,TransactionInstruction as pt}from"@solana/web3.js";import ya from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as To,TOKEN_2022_PROGRAM_ID as Ye,TOKEN_PROGRAM_ID as Re}from"@solana/spl-token";import Lp from"bn.js";import zt from"bn.js";var Xe=new zt(0),Vt=new zt(1),Pn=new zt(-1),et=new zt(1).shln(64),Cr=new zt(1).shln(128),bo=et.sub(Vt),go=64,xc=Cr.subn(1),Pt=-443636,kt=-Pt,Yt=new zt("4295048016"),Qt=new zt("79226673521066979257578248091"),Rr=new zt("4295048017"),Lr=new zt("79226673521066979257578248090"),Sc=16,Kc="59543866431248",Cc="184467440737095516",Rc="15793534762490258745",Nr=new zt(10).pow(new zt(6));var Lc={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:[]},gh=new zt("18446744073700000000");import be from"bn.js";function Or(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function ra(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function sa(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Po(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function Nc(r,e){return Po(r,e)?null:ra(r,e)}function Oc(r,e){return Po(r,e)?null:sa(r,e)}var hh=Buffer.from("amm_config","utf8"),aa=Buffer.from("pool","utf8"),ua=Buffer.from("pool_vault","utf8"),Tp=Buffer.from("pool_reward_vault","utf8"),Mc=Buffer.from("position","utf8"),Ip=Buffer.from("tick_array","utf8"),Bp=Buffer.from("operation","utf8"),xp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Sp=Buffer.from("observation","utf8");function vc(r,e,t,n){return ce([aa,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function ca(r,e,t){return ce([ua,e.toBuffer(),t.toBuffer()],r)}function Fc(r,e,t){return ce([Tp,e.toBuffer(),t.toBuffer()],r)}function he(r,e,t){return ce([Ip,e.toBuffer(),Or(t)],r)}function rn(r,e,t,n){return ce([Mc,e.toBuffer(),Or(t),Or(n)],r)}function ht(r,e){return ce([Mc,e.toBuffer()],r)}function An(r){return ce([Buffer.from("metadata","utf8"),qt.toBuffer(),r.toBuffer()],qt)}function Ao(r){return ce([Bp],r)}function je(r,e){return ce([xp,e.toBuffer()],r)}function _c(r,e){return ce([Sp,e.toBuffer()],r)}var Vc=Buffer.from("locked_position","utf8");function la(r,e){return ce([Vc,e.toBuffer()],r)}function Ri(r,e){return ce([Vc,e.toBuffer()],r)}var Kp=Buffer.from("support_mint","utf8");function ma(r,e){return ce([Kp,e.toBuffer()],r)}import{PublicKey as Et}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Ec}from"@solana/spl-token";import Ee from"bn.js";import mn from"bn.js";var wo=class{static getfeeGrowthInside(e,t,n){let i=new mn(0),o=new mn(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new mn(0),a=new mn(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=de.wrappingSubU128(de.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=de.wrappingSubU128(de.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=de.mulDivFloor(de.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,et),c=t.tokenFeesOwedA.add(a),u=de.mulDivFloor(de.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,et),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=de.mulDivFloor(de.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,et),c=t.tokenFeesOwedA.add(a),u=de.mulDivFloor(de.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,et),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=de.wrappingSubU128(c,u.growthInsideLastX64),m=de.mulDivFloor(l,t.liquidity,et),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=de.wrappingSubU128(c,u.growthInsideLastX64),m=de.mulDivFloor(l,t.liquidity,et),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new mn(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new mn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(de.wrappingSubU128(de.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new mn(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new mn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(de.wrappingSubU128(de.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var b,g,A,k;let a=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),c=ue.getSqrtPriceX64FromTick(t.tickLower),u=ue.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=Ie.getAmountsFromLiquidity(a,c,u,n,o),[d,p]=[Ce(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Ce(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,y]=[Ce(new mn(new F(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),Ce(new mn(new F(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:nn(d.expirationTime,p.expirationTime)}}};var Cp=15,Te=class{static async getTickArrays(e,t,n,i,o,s,a){let c=[],u=$.getTickArrayStartIndexByTick(i,o),l=$.getInitializedTickArrayInRange(s,a,o,u,Math.floor(Cp/2));for(let p=0;p<l.length;p++){let{publicKey:f}=he(t,n,l[p]);c.push(f)}let m=(await $t(e,c)).map(p=>p!==null?ko.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(u=$.getNextTickArrayStartIndex(u,o,s),this.checkIsValidStartIndex(u,o))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,s);[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,i,o){let s=Math.floor(e/Te.tickCount(t)),a=n?$.searchLowBitFromStart(i,o,s-1,1,t):$.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=tt-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a-1}}else{let a=0;for(;a<tt;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a+1}}let{publicKey:s}=he(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=$.getTickArrayStartIndexByTick(i,o),c=Math.floor((i-a)/o),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)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<tt;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if($.checkIsOutOfBoundary(e)){if(e>kt)return!1;let n=$.getTickArrayStartIndexByTick(Pt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return tt*e}};var da=14,wn=class{static maxTickInTickarrayBitmap(e){return e*tt*ni}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!Te.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-Te.tickCount(n):t+Te.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*tt,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=Nc(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(u),m=Oc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-Te.tickCount(n)}}}},ho=class{static getBitmapOffset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=wn.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=wn.maxTickInTickarrayBitmap(e),n=-t;if(kt<=t)throw Error(`extensionTickBoundary check error: ${kt}, ${t}`);if(n<=Pt)throw Error(`extensionTickBoundary check error: ${n}, ${Pt}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:$.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=Te.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=wn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=$.mergeTickArrayBitmap(e).shln(ni-1-a),u=Po(512,c)?null:ra(512,c);if(u!==null){let l=t-u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=Po(512,c)?null:sa(512,c);if(u!==null){let l=t+u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-Te.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%wn.maxTickInTickarrayBitmap(t),i=Math.floor(n/Te.tickCount(t));return e<0&&n!=0&&(i=ni-i),i}};var Me=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o,s=!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}=ii.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,o,s);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(Pn),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let y=this.preInitializedTickArrayStartIndex(e,s);if(y.isExist){let{publicKey:b}=he(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=ii.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Pn),u,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Me.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ho.checkTickArrayIsInit(Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):$.checkTickArrayIsInitialized($.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=he(e.programId,e.id,s);return{isExist:!0,startIndex:s,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)),i=t?$.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):$.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=wn.nextInitializedTickArrayStartIndex($.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=ho.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Pt||t>kt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,c,u;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=q(_({},m),{perSecond:de.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Et(d)});if(p.tokenMint.equals(Et.default))continue;if(n<=p.openTime.toNumber()||i.eq(Xe)){s.push(p);continue}let f=new Ee(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=de.mulDivFloor(y,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),A=de.mulDivFloor(y,p.emissionsPerSecondX64,et),k=p.rewardTotalEmissioned.add(A);s.push(q(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=$.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=wn.maxTickInTickarrayBitmap(e),n=-t;return t>kt&&(t=Te.getArrayStartIndex(kt,e)+Te.tickCount(e)),n<Pt&&(n=Te.getArrayStartIndex(Pt,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)*ni}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Oe(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=Dc.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let c of t){let u=$.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=$.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);o.push({pubkey:d}),i[d.toString()]=c.id}}let s=await Oe(e,o,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ko.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.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 s)u.push(ht(p,d).publicKey);let l=await $t(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Li.decode(d.data),f=p.poolId.toString(),y=e.find(x=>x.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=$._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=$._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:T}=Ie.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:k,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>q(_({},x),{pendingReward:new Ee(0)})),leverage:h,tokenFeeAmountA:new Ee(0),tokenFeeAmountB:new Ee(0)}];let w=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),B=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}if(o){let d=Object.values(m),p=await $t(t,d,{batchRequest:i}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=ko.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,k=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[k].toString()],w=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],B=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await wo.GetPositionFees(y,g,w,B),I=await wo.GetPositionRewards(y,g,w,B);g.tokenFeeAmountA=x.gte(new Ee(0))?x:new Ee(0),g.tokenFeeAmountB=K.gte(new Ee(0))?K:new Ee(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ee(0))?I[C]:new Ee(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new F(0),catchLiquidityInsufficient:c=!1}){var R;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 F(0))?u=l?Yt.add(new Ee(1)):Qt.sub(new Ee(1)):u=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Ce(o,m,i,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=Me.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((R=p.fee)!=null?R:Xe),u,c),k=Ce(y,d,i,!1),T=ue.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new F(1).div(T),w=y.mul(new Ee(Math.floor((1-s)*1e10))).div(new Ee(1e10)),B=Ce(w,d,i,!1),x=l?e.currentPrice:new F(1).div(e.currentPrice),K=new F(h).sub(x).abs(),I=x,C=new rt(new F(K).mul(10**15).toFixed(0),new F(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:B,expirationTime:nn(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ue(q(_({},u),{mint:u.address,isToken2022:u.programId===Ec.toBase58()})),new Ue(q(_({},l),{mint:l.address,isToken2022:l.programId===Ec.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:k,priceImpact:T,fee:h,remainingAccounts:w,executionPriceX64:B}=Me.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Et(u.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),x=q(_({},f),{amount:new Ke(m,f.amount),fee:f.fee===void 0?void 0:new Ke(m,f.fee)}),K=q(_({},y),{amount:new Ke(d,y.amount),fee:y.fee===void 0?void 0:new Ke(d,y.fee)}),I=q(_({},b),{amount:new Ke(d,b.amount),fee:b.fee===void 0?void 0:new Ke(d,b.fee)}),C=new xt({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:A.mul(new F(10**(20+d.decimals))).toFixed(0)}),R=new xt({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:k.mul(new F(10**(20+d.decimals))).toFixed(0)}),N=new Ke(m,h);return{allTrade:p,realAmountIn:x,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:R,priceImpact:T,fee:N,remainingAccounts:w,executionPriceX64:B}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:o,slippage:s,priceLimit:a=new F(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 F(0))?l=c?Qt.sub(new Ee(1)):Yt.add(new Ee(1)):l=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Ce(o,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=Me.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:Xe),l),b=c?e.mintB.address:e.mintA.address,g=Ce(d,u[b],i,!1),A=ue.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?A:new F(1).div(A),T=d.mul(new Ee(Math.floor((1+s)*1e10))).div(new Ee(1e10)),h=Ce(T,u[b],i,!0),w=c?e.currentPrice:new F(1).div(e.currentPrice),B=new F(k).sub(w).abs(),x=w,K=new rt(new F(B).mul(10**15).toFixed(0),new F(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:nn(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,y,b;let o=e[t],s=$.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=$.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-c,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[((f=o.rewardApr[0])!=null?f:0)*p,((y=o.rewardApr[1])!=null?y:0)*p,((b=o.rewardApr[2])!=null?b:0)*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[ft(e.mintA.address).toString()],d=i[ft(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=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),b=ue.getSqrtPriceX64FromTick(s),g=ue.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,o,!1,!1,0),w=new F(A.toString()).div(new F(10).pow(p)).mul(m.value).add(new F(k.toString()).div(new F(10).pow(f)).mul(d.value)),B=new F(T.toString()).div(new F(10).pow(p)).mul(m.value).add(new F(h.toString()).div(new F(10).pow(f)).mul(d.value)),x=new F(1).div(w.add(B)),I=new F(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,R=e.rewardDefaultInfos.map(N=>{var v,Y;let O=N.mint.decimals,L=i[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((Y=N.endTime)!=null?Y:0)||!N.perSecond||!L||O===void 0?0:new F(L.value).mul(new F(N.perSecond).mul(C)).div(new F(10).pow(O)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:R,apr:I+R.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),m=ue.getSqrtPriceX64FromTick(n),d=ue.getSqrtPriceX64FromTick(i),p=Ce(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ee(new F(p.amount.sub((A=p.fee)!=null?A:Xe).toString()).toFixed(0)),y;if(l.lte(m))y=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ee(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?k:T}else y=t?new Ee(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let b=await Me.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:y,slippage:s,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:i,liquidity:o,slippage:s,add:a}){var b,g,A,k;let c=ue.getSqrtPriceX64FromTick(n),u=ue.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=Ie.getAmountsFromLiquidity(ue.priceToSqrtPriceX64(new F(t.price),t.mintA.decimals,t.mintB.decimals),c,u,o,a),[d,p]=[Ce(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Ce(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Ce(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),Ce(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:nn(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new Et(c.id));(await $t(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=oi.decode(c.data))});let s=t.map(c=>je(new Et(c.programId),new Et(c.id)).publicKey),a=await Me.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>q(_({},c),{[u.id]:q(_({},n[u.id]),{id:new Et(u.id),version:6,programId:new Et(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(_({},u.config),{id:new Et(u.config.id),fundOwner:""}),currentPrice:new F(u.price),exBitmapAccount:je(new Et(u.programId),new Et(u.id)).publicKey,exBitmapInfo:a[je(new Et(u.programId),new Et(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var pa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wc(r){return q(_({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:pa,week:pa,month:pa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(_({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var de=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(Xe)||(o=o.add(Vt)),o}static mulDivFloor(e,t,n){if(n.eq(Xe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Xe))throw new Error("division by 0");return e.mul(t).add(n.sub(Vt)).div(n)}static x64ToDecimal(e,t){return new F(e.toString()).div(F.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new be(e.mul(F.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Cr).sub(t).mod(Cr)}};function ut(r,e){return fa(r.mul(e),64,256)}function Rp(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function fa(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ue=class{static sqrtPriceX64ToPrice(e,t,n){return de.x64ToDecimal(e).pow(2).mul(F.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return de.decimalToX64(e.mul(F.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(Xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(Xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(Xe))return e;let o=t.shln(go);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?de.mulDivCeil(s,e,a):de.mulDivRoundingUp(s,Vt,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return de.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(go);if(i)return e.add(o.div(t));{let s=de.mulDivRoundingUp(o,Vt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<Pt||e>kt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new be("18445821805675395072"):new be("18446744073709551616");return(t&2)!=0&&(n=ut(n,new be("18444899583751176192"))),(t&4)!=0&&(n=ut(n,new be("18443055278223355904"))),(t&8)!=0&&(n=ut(n,new be("18439367220385607680"))),(t&16)!=0&&(n=ut(n,new be("18431993317065453568"))),(t&32)!=0&&(n=ut(n,new be("18417254355718170624"))),(t&64)!=0&&(n=ut(n,new be("18387811781193609216"))),(t&128)!=0&&(n=ut(n,new be("18329067761203558400"))),(t&256)!=0&&(n=ut(n,new be("18212142134806163456"))),(t&512)!=0&&(n=ut(n,new be("17980523815641700352"))),(t&1024)!=0&&(n=ut(n,new be("17526086738831433728"))),(t&2048)!=0&&(n=ut(n,new be("16651378430235570176"))),(t&4096)!=0&&(n=ut(n,new be("15030750278694412288"))),(t&8192)!=0&&(n=ut(n,new be("12247334978884435968"))),(t&16384)!=0&&(n=ut(n,new be("8131365268886854656"))),(t&32768)!=0&&(n=ut(n,new be("3584323654725218816"))),(t&65536)!=0&&(n=ut(n,new be("696457651848324352"))),(t&131072)!=0&&(n=ut(n,new be("26294789957507116"))),(t&262144)!=0&&(n=ut(n,new be("37481735321082"))),e>0&&(n=xc.div(n)),n}static getTickFromPrice(e,t,n){return ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Qt)||e.lt(Yt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new be(t-64),i=Rp(n,32,128),o=new be("8000000000000000","hex"),s=0,a=new be(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new be(0))&&s<Sc;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(o.mul(f)),o=o.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new be(Kc)),d=fa(m.sub(new be(Cc)),64,128).toNumber(),p=fa(m.add(new be(Rc)),64,128).toNumber();return d==p?d:ue.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ri=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let o=ri.getTickWithPriceAndTickspacing(e,t,n,i),s=ue.getSqrtPriceX64FromTick(o);return ue.sqrtPriceX64ToPrice(s,n,i)}},Ie=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Xe))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(go),s=t.sub(e);return i?de.mulDivRoundingUp(de.mulDivCeil(o,s,t),Vt,e):de.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Xe))throw new Error("sqrtPriceX64A must greater than 0");return i?de.mulDivCeil(n,t.sub(e),et):de.mulDivFloor(n,t.sub(e),et)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?de.mulDivRoundingUp(a,Vt,bo):a.shrn(go)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),de.mulDivFloor(n,bo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Ie.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=Ie.getLiquidityFromTokenAmountA(e,n,i,!1),a=Ie.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return Ie.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Ie.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new be(0)};if(e.lt(n)){let s=Ie.getTokenAmountAFromLiquidity(e,n,i,o),a=Ie.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new be(0),amountB:Ie.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:c,amountB:u}=Ie.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new be(new F(c.toString()).mul(l).toFixed(0)),d=new be(new F(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:c}){var A,k,T,h;let u=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),l=ue.getSqrtPriceX64FromTick(t),m=ue.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=Ie.getAmountsFromLiquidity(u,l,m,i,s),[f,y]=[Ce(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),Ce(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[b,g]=[Ce(new be(new F(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Ce(new be(new F(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:nn(f.expirationTime,y.expirationTime)}}},ii=class{static swapCompute(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y=!1){if(d.eq(Xe))throw new Error("amountSpecified must not be 0");if(f||(f=s?Yt.add(Vt):Qt.sub(Vt)),s){if(f.lt(Yt))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(Qt))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(Xe),g={amountSpecifiedRemaining:d,amountCalculated:Xe,sqrtPriceX64:m,tick:u>p?Math.min(p+Te.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new be(0)},A=p,k=n[p],T=0,h=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Xe)&&!g.sqrtPriceX64.eq(f);){T>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let B=$.nextInitTick(k,g.tick,l,s,h),x=B||null,K=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=Me.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},A,s);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:R}=he(e,t,A);K=R,k=n[A];try{x=$.firstInitializedTick(k,s)}catch{throw Error("not found next tick info")}}w.tickNext=x.tick,w.initialized=x.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),w.tickNext<Pt?w.tickNext=Pt:w.tickNext>kt&&(w.tickNext=kt),w.sqrtPriceNextX64=ue.getSqrtPriceX64FromTick(w.tickNext);let I;if(s&&w.sqrtPriceNextX64.lt(f)||!s&&w.sqrtPriceNextX64.gt(f)?I=f:I=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=ii.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(w.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(w.amountIn.add(w.feeAmount)),g.amountCalculated=g.amountCalculated.sub(w.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(w.amountOut),g.amountCalculated=g.amountCalculated.add(w.amountIn.add(w.feeAmount))),g.sqrtPriceX64.eq(w.sqrtPriceNextX64)){if(w.initialized){let C=x.liquidityNet;s&&(C=C.mul(Pn)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=w.tickNext!=g.tick&&!s&&k.startTickIndex===w.tickNext,g.tick=s?w.tickNext-1:w.tickNext}else if(g.sqrtPriceX64!=w.sqrtPriceStartX64){let C=ue.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!s&&k.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:w,isExist:B}=Te.nextInitializedTickArray(g.tick,l,s,i,o);B&&p!==w&&(g.accounts.push(he(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Xe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,o,s){let a={sqrtPriceX64Next:new be(0),amountIn:new be(0),amountOut:new be(0),feeAmount:new be(0)},c=i.gte(Xe);if(c){let l=de.mulDivFloor(i,Nr.sub(new be(o.toString())),Nr);a.amountIn=s?Ie.getTokenAmountAFromLiquidity(t,e,n,!0):Ie.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromInput(e,n,l,s)}else a.amountOut=s?Ie.getTokenAmountBFromLiquidity(t,e,n,!1):Ie.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Pn).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromOutput(e,n,i.mul(Pn),s);let u=t.eq(a.sqrtPriceX64Next);return s?(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(i.mul(Pn))&&(a.amountOut=i.mul(Pn)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=i.sub(a.amountIn):a.feeAmount=de.mulDivCeil(a.amountIn,new be(o),Nr.sub(new be(o))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var tt=60,ni=512,$=class{static getTickArrayAddressByTick(e,t,n,i){let o=$.getTickArrayStartIndexByTick(n,i),{publicKey:s}=he(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=$.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=tt)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=Te.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Te.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*tt,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*tt,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*tt:e+t*tt}static mergeTickArrayBitmap(e){let t=new Lp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,o){let s=Math.floor(i/(n*tt));return[...$.searchLowBitFromStart(e,t,s-1,o,n),...$.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,ni,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=$.getAllInitializedTickArrayStartIndex(n,i,o);for(let c of a){let{publicKey:u}=he(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...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(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=Te.tickCount(o);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...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(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=Te.tickCount(o);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Pt||e>kt}static nextInitTick(e,t,n,i,o){if(Te.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<tt;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=tt-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<tt;){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 i=ue.getSqrtPriceX64FromTick(t),o=ue.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=ri.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(o),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ue.getSqrtPriceX64FromTick(t),o=ue.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=ri.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(o),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}};var qc=V([Be(8),E("bump"),Ft("index"),M(""),gt("protocolFeeRate"),gt("tradeFeeRate"),Ft("tickSpacing"),H(P(),8,"")]),Np=V([gt("blockTimestamp"),Si("tickCumulative"),H(P(),4)]),Uc=V([Be(8),Ge("initialized"),P("recentEpoch"),Ft("observationIndex"),M("poolId"),H(Np,100,"observations"),H(P(),4)]),Op=V([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),oe("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),M("tokenMint"),M("tokenVault"),M("creator"),oe("rewardGrowthGlobalX64")]),oi=V([Be(8),E("bump"),M("ammConfig"),M("creator"),M("mintA"),M("mintB"),M("vaultA"),M("vaultB"),M("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Ft("tickSpacing"),oe("liquidity"),oe("sqrtPriceX64"),Ve("tickCurrent"),gt(),oe("feeGrowthGlobalX64A"),oe("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),oe("swapInAmountTokenA"),oe("swapOutAmountTokenB"),oe("swapInAmountTokenB"),oe("swapOutAmountTokenA"),E("status"),H(E(),7,""),H(Op,3,"rewardInfos"),H(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),H(P(),15*4-3,"padding")]),Mp=V([oe("growthInsideLastX64"),P("rewardAmountOwed")]),Li=V([Be(8),E("bump"),M("nftMint"),M("poolId"),Ve("tickLower"),Ve("tickUpper"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),H(Mp,3,"rewardInfos"),H(P(),8,"")]),LT=V([Be(8),E("bump"),M("poolId"),Ve("tickLowerIndex"),Ve("tickUpperIndex"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),H(oe(),3,"rewardGrowthInside"),H(P(),8,"")]),vp=V([Ve("tick"),rc("liquidityNet"),oe("liquidityGross"),oe("feeGrowthOutsideX64A"),oe("feeGrowthOutsideX64B"),H(oe(),3,"rewardGrowthsOutsideX64"),H(gt(),13,"")]),ko=V([Be(8),M("poolId"),Ve("startTickIndex"),H(vp,tt,"ticks"),E("initializedTickCount"),H(E(),115,"")]),Gc=V([Be(329),H(M(),100,"whitelistMints")]),Dc=V([Be(8),M("poolId"),H(H(P(),8),da,"positiveTickArrayBitmap"),H(H(P(),8),da,"negativeTickArrayBitmap")]),NT=V([P(),E("bump"),M("owner"),M("poolId"),M("positionId"),M("nftAccount"),H(P(),8)]),Xc=V([Be(8),E("bump"),M("lockOwner"),M("poolId"),M("positionId"),M("nftAccount"),M("lockNftMint"),P("recentEpoch"),H(P(),8)]);Uc.span;var zc=we("Raydium_Clmm"),Wt={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]},Yc=[188,37,179,131,82,150,84,73],Qc=[16,72,250,198,14,162,212,19],Le=class{static createPoolInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f){let y=V([oe("sqrtPriceX64"),P("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:Xe},g);let A=Buffer.from([...Wt.createPool,...g]);return new pt({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:o,ammConfigId:s,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new z(i.address),new z(o.address)],{publicKey:m}=vc(t,s,u,l),{publicKey:d}=_c(t,m),{publicKey:p}=ca(t,m,u),{publicKey:f}=ca(t,m,l),y=je(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,s,d,u,p,new z(i.programId||Re),l,f,new z(o.programId||Re),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,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K,I){let C=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),R=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...R],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:B,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let L=Buffer.from([...Wt.openPosition,...O]);return new pt({keys:N,programId:e,data:L})}static openPositionFromLiquidityInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K){let I=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:w,amountMaxB:B,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...Wt.openPositionWithTokenEx,...N]);return new pt({keys:R,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new z(e.programId),new z(e.id)],y;if(l)y=new z((await l(1))[0]);else{let K=Mr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?J(n.wallet,y,Ye):J(n.wallet,y,Re),{publicKey:h}=An(y),{publicKey:w}=ht(p,y),{publicKey:B}=rn(p,f,i,o),x=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0);return{signers:d,instructions:[x],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:B}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new z(e.programId),new z(e.id)],y;if(l)y=new z((await l(1))[0]);else{let K=Mr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?J(n.wallet,y,Ye):J(n.wallet,y,Re),{publicKey:h}=An(y),{publicKey:w}=ht(p,y),{publicKey:B}=rn(p,f,i,o),x=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:B},instructions:[x],signers:d,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K,I){let C=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),R=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...R],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ya(0),amountMaxA:B==="MintA"?x:K,amountMaxB:B==="MintA"?K:x,withMetadata:w==="create",baseFlag:B==="MintA",optionBaseFlag:1},O);let L=Buffer.from([...Wt.openPosition,...O]);return new pt({keys:N,programId:e,data:L})}static openPositionFromBaseInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K){let I=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new ya(0),amountMaxA:w==="MintA"?B:x,amountMaxB:w==="MintA"?x:B,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...Wt.openPositionWithTokenEx,...N]);return new pt({keys:R,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new z((await l(1))[0]);else{let K=Mr.generate();p.push(K),d=K.publicKey}let[f,y]=[new z(e.programId),new z(e.id)],b=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:A}=he(f,y,b),{publicKey:k}=he(f,y,g),{publicKey:T}=m?J(n.wallet,d,Ye):J(n.wallet,d,Re),{publicKey:h}=An(d),{publicKey:w}=ht(f,d),{publicKey:B}=rn(f,y,i,o),x=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(t.mintA.address),new z(t.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(t.mintA.address),new z(t.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:B},instructions:[x],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o,s){let a=V([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:s?Ye:Re,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Wt.closePosition,...u]);return new pt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:o}){let s=new z(e.programId),a=o?J(n.wallet,i.nftMint,Ye).publicKey:J(n.wallet,i.nftMint,Re).publicKey,{publicKey:c}=ht(s,i.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,i.nftMint,a,c,o)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A){let k=V([oe("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ge("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let B=Buffer.from([...Wt.increaseLiquidity,...w]);return new pt({keys:h,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new z(e.programId),new z(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?J(i.wallet,n.nftMint,Ye):J(i.wallet,n.nftMint,Re),{publicKey:b}=ht(u,n.nftMint),{publicKey:g}=rn(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,b,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),o,s,a,Me.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:i,base:o,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new z(e.programId),new z(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?J(i.wallet,n.nftMint,Ye):J(i.wallet,n.nftMint,Re),{publicKey:b}=ht(u,n.nftMint),{publicKey:g}=rn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,b,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),o,s,a,Me.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,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A){let k=V([oe("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ge("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:new ya(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},w);let B=Buffer.from([...Wt.increaseLiquidity,...w]);return new pt({keys:h,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([oe("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],w=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:A},B);let x=Buffer.from([...Wt.decreaseLiquidity,...B]);return new pt({keys:w,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new z(e.programId),new z(e.id)],d=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=he(l,m,d),{publicKey:y}=he(l,m,p),{publicKey:b}=u?J(i.wallet,n.nftMint,Ye):J(i.wallet,n.nftMint,c),{publicKey:g}=ht(l,n.nftMint),{publicKey:A}=rn(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new z(t.rewardInfos[w].vault),ownerRewardVault:i.rewardAccounts[w],rewardMint:new z(e.rewardDefaultInfos[w].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,i.wallet,b,g,m,A,f,y,i.tokenAccountA,i.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),k,o,s,a,Me.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,i,o,s,a,c,u,l,m,d,p,f,y,b,g){let A=V([P("amount"),P("otherAmountThreshold"),oe("sqrtPriceLimitX64"),Ge("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let w=Buffer.from([...Wt.swap,...h]);return new pt({keys:T,programId:e,data:w})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new z(e.programId),new z(e.id)],[d,p]=[new z(t.vault.A),new z(t.vault.B)],[f,y]=[new z(e.mintA.address),new z(e.mintB.address)],b=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new z(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,s,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:i,outputMint:o,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new z(e.programId),new z(e.id)],[d,p]=[new z(t.vault.A),new z(t.vault.B)],[f,y]=[new z(e.mintA.address),new z(e.mintB.address)],b=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new z(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,s,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,i,o,s,a,c,u,l,m,d){let p=V([P("openTime"),P("endTime"),oe("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:ee(l),endTime:ee(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...Wt.initReward,...y]);return new pt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new z(e.programId),new z(e.id)],a=Fc(o,s,i.mint).publicKey,c=Ao(o).publicKey,u=[this.initRewardInstruction(o,n.wallet,s,c,new z(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=V([E("rewardIndex"),oe("emissionsPerSecondX64"),P("openTime"),P("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:ee(l),endTime:ee(m)},y);let b=Buffer.from([...Wt.setRewardEmissions,...y]);return new pt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new z(e.programId),new z(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new z(t.rewardInfos[d].vault),u=new z(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Ao(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new z(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let c=V([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Wt.collectReward,...l]);return new pt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new z(e.programId),new z(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new z(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,c,i,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:i,wallet:o,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new z((await c(1))[0]);else{let g=Mr.generate();u.push(g),l=g.publicKey}let m=a?J(o,s,Ye).publicKey:J(o,s,Re).publicKey,{publicKey:d}=ht(n,s),p=Ri(e,l).publicKey,f=J(o,l,Re).publicKey,y=An(l).publicKey,b=Le.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:o,lockOwner:o,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:J(t,s,a?Ye:Re).publicKey,positionNftProgram:a?Ye:Re});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:i,lockOwner:o,positionNftAccount:s,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:i,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:qt,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}],g=V([Ge("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...Yc,...A]);return new pt({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:o}){let{publicKey:s}=J(i,o,Re),{publicKey:a}=ht(n,o),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:la(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}];return new pt({keys:c,programId:e,data:Buffer.from(Yc)})}static harvestLockPositionInstruction(e){let[t,n]=[new z(e.poolKeys.programId),new z(e.poolKeys.id)],i=$.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),o=$.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=he(t,n,i),{publicKey:a}=he(t,n,o),{publicKey:c}=J(e.owner,e.ownerPosition.nftMint,Re),{publicKey:u}=ht(t,e.ownerPosition.nftMint),{publicKey:l}=rn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new z(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new z(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:la(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 z(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new z(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:On,isSigner:!1,isWritable:!1},{pubkey:new z(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new z(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new pt({keys:p,programId:e.programId,data:Buffer.from(Qc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:o,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:T,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],B=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:On,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new pt({keys:B,programId:e,data:Buffer.from(Qc)})}};var Fp=V([gt("mintAuthorityOption"),M("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),gt("freezeAuthorityOption"),M("freezeAuthority")]);import{PublicKey as JT}from"@solana/web3.js";import{MintLayout as tI,TOKEN_PROGRAM_ID as iI}from"@solana/spl-token";var vr=r=>new Ue({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),Io=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=De(o,["amount","isRaw","name"]);return new Ke(new Ue({mint:ft(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};var At=i=>{var o=i,{address:r,programId:e,decimals:t}=o,n=De(o,["address","programId","decimals"]);return _({chainId:101,address:ft(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Wn=r=>r?q(_({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:q(_({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(_({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import Hc from"bn.js";var ba=new Hc(25),Fr=new Hc(1e4);import{PublicKey as dn,SystemProgram as Vp,SYSVAR_RENT_PUBKEY as hI,TransactionInstruction as Ni}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ep,TOKEN_PROGRAM_ID as xo}from"@solana/spl-token";var ga=V([E("instruction"),P("amountIn"),P("minAmountOut")]),Pa=V([E("instruction"),P("maxAmountIn"),P("amountOut")]),PI=V([E("instruction"),E("nonce")]),_p=V([E("instruction"),E("nonce"),P("startTime")]),Bo=V([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),P("swapBase2QuoteFee"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),P("swapQuote2BaseFee"),M("baseVault"),M("quoteVault"),M("baseMint"),M("quoteMint"),M("lpMint"),M("openOrders"),M("marketId"),M("marketProgramId"),M("targetOrders"),M("withdrawQueue"),M("lpVault"),M("owner"),P("lpReserve"),H(P(),3,"padding")]),AI=V([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),M("baseVault"),M("quoteVault"),M("baseMint"),M("quoteMint"),M("lpMint"),M("modelDataAccount"),M("openOrders"),M("marketId"),M("marketProgramId"),M("targetOrders"),M("owner"),H(P(),64,"padding")]),Aa=V([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),wa=V([E("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var jc=V([P("fee")]);var Zc=we("Raydium_liquidity_instruction");function $c(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s,otherAmountMin:a,modelDataPubKey:c=Hn}=r,u=Buffer.alloc(Aa.span);Aa.encode({instruction:3,baseAmountIn:ee(i),quoteAmountIn:ee(o),otherAmountMin:ee(a),fixedSide:s==="base"?St:Ru},u);let l=[S({pubkey:xo,isWritable:!1}),S({pubkey:new dn(e.id)}),S({pubkey:new dn(t.authority),isWritable:!1}),S({pubkey:new dn(t.openOrders),isWritable:!1}),S({pubkey:new dn(t.targetOrders)}),S({pubkey:new dn(e.lpMint.address)}),S({pubkey:new dn(t.vault.A)}),S({pubkey:new dn(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new dn(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 dn(t.marketEventQueue),isWritable:!1})),new Ni({programId:new dn(e.programId),keys:l,data:u})}function ka(r){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:o,quoteAmountMin:s,modelDataPubKey:a=Hn}=r,c=mt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(wa.span);wa.encode({instruction:4,lpAmount:ee(i),baseAmountMin:ee(o),quoteAmountMin:ee(s)},l);let m=[S({pubkey:xo,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 Ni({programId:c.programId,keys:m,data:l})}return new Ni({programId:c.programId,keys:[]})}function ha({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:T,pcAmount:h,ammConfigId:w,feeDestinationId:B}){let x=V([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:xo,isSigner:!1,isWritable:!1},{pubkey:Ep,isSigner:!1,isWritable:!1},{pubkey:Vp.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:B,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(x.span);return x.encode({instruction:1,nonce:A,openTime:k,coinAmount:T,pcAmount:h},I),{instruction:new Ni({keys:K,programId:r,data:I}),instructionType:X.AmmV4CreatePool}}function Wp({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:i=Hn},o){let s=mt(r),a=Buffer.alloc(ga.span);ga.encode({instruction:9,amountIn:ee(t),minAmountOut:ee(n)},a);let c=[S({pubkey:xo,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.openOrders})];return o===4&&c.push(S({pubkey:s.targetOrders})),c.push(S({pubkey:s.vault.A}),S({pubkey:s.vault.B})),o===5&&c.push(S({pubkey:i})),c.push(S({pubkey:s.marketProgramId,isWritable:!1}),S({pubkey:s.marketId}),S({pubkey:s.marketBids}),S({pubkey:s.marketAsks}),S({pubkey:s.marketEventQueue}),S({pubkey:s.marketBaseVault}),S({pubkey:s.marketQuoteVault}),S({pubkey:s.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Ni({programId:s.programId,keys:c,data:a})}function Dp({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:i=Hn},o){let s=mt(r),a=Buffer.alloc(Pa.span);Pa.encode({instruction:11,maxAmountIn:ee(t),amountOut:ee(n)},a);let c=[S({pubkey:xo,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.openOrders}),S({pubkey:s.targetOrders}),S({pubkey:s.vault.A}),S({pubkey:s.vault.B})];return o===5&&c.push(S({pubkey:i})),c.push(S({pubkey:s.marketProgramId,isWritable:!1}),S({pubkey:s.marketId}),S({pubkey:s.marketBids}),S({pubkey:s.marketAsks}),S({pubkey:s.marketEventQueue}),S({pubkey:s.marketBaseVault}),S({pubkey:s.marketQuoteVault}),S({pubkey:s.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Ni({programId:s.programId,keys:c,data:a})}function _r(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Wp(q(_({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Dp(q(_({},a),{maxAmountIn:i,amountOut:o}),t);Zc.logWithError("invalid params","params",r)}throw Zc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var ai=5e4,qp=V([P("x"),P("y"),P("price")]),Up=V([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),H(qp,ai,"DataElement")]);function Gp(r,e){return[0,ai-2]}function Xp(r){return[0,ai-2]}function zp(r){return[0,ai-2]}function Yp(r,e,t){let[n,i]=Gp(e,t),o=n,s=i,a=0,c=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=ai-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.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)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Ta(r,e,t){let[n,i,o]=Yp(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[i].x,u=r.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function si(r,e,t){return e*r.multiplier/t}function Jc(r,e,t){return e*t/r.multiplier}function Qp(r,e){let[t,n]=Xp(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ai-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)o=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function Hp(r,e){let[t,n]=zp(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ai-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function el(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Qp(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].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-(i-c)*r.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-i)*r.multiplier/l),[f,y,!1,a]}}}function jp(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Hp(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].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-i)/r.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(i-p)/r.multiplier),[f,y,!1,a]}}}function Zp(r,e){let t=el(r,e,0,!1);return t[3]?t[0]:0}function tl(r,e,t,n){let i=Ta(r,e,t),o=si(r,e,i),s=si(r,t,i),a=si(r,n,i),c=!0,[u,l,m,d]=el(r,o,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return Jc(r,p,i)}}function nl(r,e,t,n){let i=Ta(r,e,t),o=si(r,e,i),s=si(r,t,i),a=si(r,n,i),c=!1,[u,l,m,d]=jp(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=o-l;return Jc(r,p,i)}}function $p(r){let e=Up.decode(r);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 il(r,e,t,n){let i=Zp(r,si(r,e,Ta(r,e,t)))/r.multiplier;return n?i:1/i}var So=class{constructor({connection:e,modelDataPubKey:t=Hn}){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=$p(e==null?void 0:e.data))}}};import{PublicKey as tf}from"@solana/web3.js";import $I from"bn.js";import{TOKEN_PROGRAM_ID as nf}from"@solana/spl-token";import{PublicKey as Jp}from"@solana/web3.js";var ef=we("Raydium_liquidity_serum");function ol({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=Jp.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw ef.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}function Vr({programId:r}){let{publicKey:e}=ce([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function ui({name:r,programId:e,marketId:t}){let{publicKey:n}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function of({programId:r,marketId:e}){let{publicKey:t}=ce([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function Ba({programId:r}){return ce([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function xa({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:c}){let u=ui({name:"amm_associated_seed",programId:a,marketId:t}),l=ui({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Ba({programId:a}),p=ui({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=ui({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=ui({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=of({programId:a,marketId:t}),g=ui({name:"target_associated_seed",programId:a,marketId:t}),A=ui({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=ol({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:tf.default,configId:Vr({programId:a})}}var Ia={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Er=r=>{let e={},t=nf.toBase58();return Object.keys(r).map(n=>{let i=r[n],[o,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:At({address:o,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:At({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new F(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new F(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new F(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:Ia,week:Ia,month:Ia,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Vr({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:new F(i.lpReserve.toString()).div(10**Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())).toNumber(),lpMint:At({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Qe from"bn.js";import{PublicKey as Ko}from"@solana/web3.js";import Co from"bn.js";import{TOKEN_PROGRAM_ID as ul}from"@solana/spl-token";import{SystemProgram as ci,SYSVAR_RENT_PUBKEY as sf,Transaction as rl,TransactionInstruction as af}from"@solana/web3.js";import{createInitializeAccountInstruction as sl,TOKEN_PROGRAM_ID as al}from"@solana/spl-token";function rf(r="accountFlags"){let e=new xr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Sa=V([Be(5),rf("accountFlags"),M("ownAddress"),P("vaultSignerNonce"),M("baseMint"),M("quoteMint"),M("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),M("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),M("requestQueue"),M("eventQueue"),M("bids"),M("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Be(7)]);function uf({programId:r,marketInfo:e}){let t=V([E("version"),gt("instruction"),P("baseLotSize"),P("quoteLotSize"),Ft("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:sf,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}:[]),i=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},i),new af({keys:n,programId:r,data:i})}async function Wr({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new rl,i=await r.getMinimumBalanceForRentExemption(165);n.add(ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:al}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:al}),sl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),sl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(Sa.span),space:Sa.span,programId:t.programId}));let o=new rl;return o.add(ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),uf({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:o,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var Oi=class extends _e{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,requestQueueSpace:s,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=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-market`}),A=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-request`}),k=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-event`}),T=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-bids`}),h=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-asks`}),w=He({fromPublicKey:y,programId:ul,assignSeed:b&&`${b}-baseVault`}),B=He({fromPublicKey:y,programId:ul,assignSeed:b&&`${b}-quoteVault`}),x=0,K=new Co(100);function I(){let Y=new Co(0);for(;;)try{return{vaultOwner:Ko.createProgramAddressSync([g.publicKey.toBuffer(),Y.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:Y}}catch{if(Y.iaddn(1),Y.gt(new Co(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:R}=I(),N=new Co(Math.round(10**e.decimals*n)),O=new Co(Math.round(n*10**t.decimals*i));if(N.eq(St))throw Error("lot size is too small");if(O.eq(St))throw Error("tick size or lot size is too small");let L=await Wr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:B,vaultOwner:C,requestQueue:A,eventQueue:k,bids:T,asks:h,feeRateBps:x,quoteDustThreshold:K,vaultSignerNonce:R,baseLotSize:N,quoteLotSize:O,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:L[0].transaction.instructions,signers:L[0].signer});for await(let Y of L.slice(1,L.length))v.addInstruction({instructions:Y.transaction.instructions,signers:Y.signer,instructionTypes:Y.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:B.publicKey,baseMint:new Ko(e.mint),quoteMint:new Ko(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:B.publicKey,baseMint:new Ko(e.mint),quoteMint:new Ko(t.mint)}})}};var Ro=class extends _e{constructor(t){super(t);this.stableLayout=new So({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:vt.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new Qe(new F(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=vr(t[o?"mintB":"mintA"]),[c,u]=[new Qe(new F(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Qe(new F(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Qe(new F(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=St;s.isZero()||(d=m==="base"?ur(s.mul(u),c):ur(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=ur(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new rt(new Qe(1)).add(i),y=new rt(new Qe(1)).sub(i),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Ke(a,d),k=new Ke(a,b),T=new Ke(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:T,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:o,amountInB:s,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:",o,"amountInB:",s),(o.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:o.toFixed(),amountInB:s.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[o.token,s.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new $e(n.lpMint.address)}),w=[g,A],B=[k,T],x=[o.raw,s.raw],K=o.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),B.reverse(),x.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,R]=w,[N,O]=B,[L,v]=x,Y=i!=null?i:await this.getAmmPoolKeys(n.id),Q=this.createTxBuilder(p),te=await f.handleTokenAccount({side:"in",amount:L,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:pe}=te,ke=De(te,["tokenAccount"]);Q.addInstruction(ke);let me=await f.handleTokenAccount({side:"in",amount:v,mint:R.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:le}=me,Pe=De(me,["tokenAccount"]);Q.addInstruction(Pe);let We=await f.handleTokenAccount({side:"out",amount:0,mint:new $e(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:Ae}=We,ye=De(We,["tokenAccount"]);return Q.addInstruction(ye),Q.addInstruction({instructions:[$c({poolInfo:n,poolKeys:Y,userKeys:{baseTokenAccount:pe,quoteTokenAccount:le,lpTokenAccount:Ae,owner:this.scope.ownerPubKey},baseAmountIn:L,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),Q.addCustomComputeBudget(m),Q.addTipInstruction(d),l===0?await Q.buildV0():Q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:o,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=i!=null?i:await this.getAmmPoolKeys(n.id),[f,y,b]=[new $e(n.mintA.address),new $e(n.mintB.address),new $e(n.lpMint.address)];this.logDebug("lpAmount:",o),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),o.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",o.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:B}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),R=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:B}),{tokenAccount:x}=R,K=De(R,["tokenAccount"]);h.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:w,checkCreateATAOwner:B}),{tokenAccount:I}=N,C=De(N,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[ka({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:x,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:o,baseAmountMin:s,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:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Dn,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 Y of this.scope.account.tokenAccountRawInfos)(A[Y.accountInfo.mint.toString()]===void 0||J(this.scope.ownerPubKey,Y.accountInfo.mint,Dn).publicKey.equals(Y.pubkey))&&(A[Y.accountInfo.mint.toString()]=Y.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let T=i.add(a!=null?a:new Qe(0)),h=t.mintA.address===Ue.WSOL.mint.toString(),w=t.mintB.address===Ue.WSOL.mint.toString(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(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(x||{}),B===void 0)throw new Error("base token account not found");let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),K===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=B,A[t.mintB.address]=K,s!==void 0&&!(a!=null&&a.isZero())){let Y=Ut[s.programId],Q=Gt({programId:new $e(s.programId),poolId:new $e(s.id),owner:this.scope.ownerPubKey,version:Y}),pe,ke=await this.scope.connection.getAccountInfo(Q);if(ke&&(pe=uo(Y).decode(ke.data)),Y!==6&&!pe){let{instruction:We,instructionType:fn}=lo({id:new $e(s.id),programId:new $e(s.programId),version:Y,ledger:Q,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[We],instructionTypes:[fn]})}let le=[];for(let We of s.rewardInfos){let fn=We.mint.address===Ue.WSOL.mint.toString();if(A[We.mint.address])le.push(A[We.mint.address]);else{let{account:Sn,instructionParams:ct}=await this.scope.account.getOrCreateTokenAccount({mint:new $e(We.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!fn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Sn||this.logAndCreateError("farm reward account not found:",We.mint.address),ct&&g.addInstruction(ct),le.push(Sn)}}let Pe=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ae={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Pe,lpAccount:k,rewardAccounts:le},ye=Ut[s.programId],te=ye===6?mo(Ae):ye===5?po(Ae):fo(Ae),me={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[te],instructionTypes:[me[ye]]})}let C=await this.getAmmPoolKeys(t.id),R=ka({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:B,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[B,K]:[K,B],L=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Le.openPositionFromBaseInstructions(q(_({poolInfo:n,poolKeys:L,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},o),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let A=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),k=u.useSOLBalance&&i.mint.equals(Dr),T=u.useSOLBalance&&o.mint.equals(Dr),h=this.createTxBuilder(g),{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:s}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(B||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:A,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||x===void 0)throw Error("you don't has some token account");let I=xa({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.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:R,instructionType:N}=ha(q(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:x,userLpVault:J(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:s,pcAmount:a}));return h.addInstruction({instructions:[R],instructionTypes:[N]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=dr,marketProgram:n=Wu,feeDestinationId:i=qu,tokenProgram:o,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:T,feePayer:h}){var Pi,Ui,Gi;let w=this.scope.ownerPubKey,B=m.feePayer||((Pi=this.scope.owner)==null?void 0:Pi.publicKey),x=m.useSOLBalance&&s.mint.equals(Dr),K=m.useSOLBalance&&a.mint.equals(Dr),I=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-market`}),R=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-request`}),N=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-event`}),O=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-bids`}),L=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-asks`}),v=He({fromPublicKey:w,programId:Dn,assignSeed:I&&`${I}-baseVault`}),Y=He({fromPublicKey:w,programId:Dn,assignSeed:I&&`${I}-quoteVault`}),Q=0,pe=new Qe(100);function ke(){let Mt=new Qe(0);for(;;)try{return{vaultOwner:$e.createProgramAddressSync([C.publicKey.toBuffer(),Mt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Mt}}catch{if(Mt.iaddn(1),Mt.gt(new Qe(25555)))throw Error("find vault owner error")}}let{vaultOwner:le,vaultSignerNonce:Pe}=ke(),Ae=new Qe(Math.round(10**s.decimals*b)),ye=new Qe(Math.round(b*10**a.decimals*g));if(Ae.eq(St))throw Error("lot size is too small");if(ye.eq(St))throw Error("tick size or lot size is too small");let te=await Wr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:le,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:Y,requestQueue:R,eventQueue:N,bids:O,asks:L,feeRateBps:Q,quoteDustThreshold:pe,vaultSignerNonce:Pe,baseLotSize:Ae,quoteLotSize:ye,lowestFeeMarket:d}}),me=this.createTxBuilder(h);me.addInstruction({instructions:te[0].transaction.instructions,signers:te[0].signer});for await(let Mt of te.slice(1,te.length))me.addInstruction({instructions:Mt.transaction.instructions,signers:Mt.signer,instructionTypes:Mt.instructionTypes});let{account:We,instructionParams:fn}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:B,amount:c}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&I?`${I}-wsol`:void 0});me.addInstruction(fn||{});let{account:Sn,instructionParams:ct}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:B,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&I?`${I}-wsol`:void 0});if(me.addInstruction(ct||{}),We===void 0)throw Error("you don't has base token account");if(Sn===void 0)throw Error("you don't has quote token account");let nt=xa({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Di={programId:t,ammId:nt.id,ammAuthority:nt.authority,ammOpenOrders:nt.openOrders,lpMint:nt.lpMint,coinMint:nt.baseMint,pcMint:nt.quoteMint,coinVault:nt.baseVault,pcVault:nt.quoteVault,withdrawQueue:nt.withdrawQueue,ammTargetOrders:nt.targetOrders,poolTempLp:nt.lpVault,marketProgramId:nt.marketProgramId,marketId:nt.marketId,ammConfigId:nt.configId,feeDestinationId:i},{instruction:qi,instructionType:bi}=ha(q(_({},Di),{userWallet:this.scope.ownerPubKey,userCoinVault:We,userPcVault:Sn,userLpVault:J(this.scope.ownerPubKey,nt.lpMint,o).publicKey,nonce:nt.nonce,openTime:l,coinAmount:c,pcAmount:u}));me.addInstruction({instructions:[qi],instructionTypes:[bi]});let gi=x||K?[((Ui=fn==null?void 0:fn.instructions)==null?void 0:Ui[0])||((Gi=ct==null?void 0:ct.instructions)==null?void 0:Gi[0])].filter(Mt=>!!Mt):void 0;return A===0?me.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:gi,address:_({requestQueue:R.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:L.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new $e(s.mint),quoteMint:new $e(a.mint)},Di)}):me.sizeCheckBuild({computeBudgetConfig:k,splitIns:gi,address:_({requestQueue:R.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:L.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new $e(s.mint),quoteMint:new $e(a.mint)},Di)})}async getCreatePoolFee({programId:t}){let n=Vr({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return jc.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){let[a,c]=[i.toString(),o.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,A=t.version===4,k;if(A)k=new F(y.toString()).div(10**g).div(new F(f.toString()).div(10**b));else{let N=il(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new F(1e6).div(N*1e6):k=new F(N*1e6).div(1e6)}let T=n,h=new Qe(0),w=new Qe(0);if(!T.isZero())if(A){w=Mn(T.mul(ba),Fr);let N=T.sub(w),O=f.add(N);h=y.mul(N).div(O)}else{w=T.mul(new Qe(2)).div(new Qe(1e4));let N=T.sub(w);p==="quote"?h=new Qe(tl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):h=new Qe(nl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let B=new Qe(new F(h.toString()).mul(1-s).toFixed(0)),x=h,K=B,I=new F(h.toString()).div(new F(T.sub(w).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new F(h.toString()).div(10**g).div(new F(T.sub(w).toString()).div(10**b)));let C=k.sub(I).div(k).mul(100);return{amountOut:x,minAmountOut:K,currentPrice:k,executionPrice:I,priceImpact:C,fee:w}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:o,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.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 F(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new F(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new F(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 F(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Qe(0),A=n;if(!A.isZero()){A.gt(y)&&(A=y.sub(new Qe(1)));let K=y.sub(A);g=f.mul(A).div(K).mul(Fr).div(Fr.sub(ba))}let k=new Qe(new F(g.toString()).mul(1+s).toFixed(0)),T=g,h=k;this.logDebug("amountIn:",new F(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new F(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!A.isZero()&&(w=new F(A.toString()).div(10**m.decimals).div(new F(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${w.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new F(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let B=b.mul(T.toString()),x=B.sub(n.toString()).abs().div(B);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:w,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:o,inputMint:s,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]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(w||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:k,associatedOnly:f});let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(x||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:B,outputTokenUseSolBalance:T,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[_r({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:i,amountOut:o,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 i=await Oe(this.scope.connection,t.map(l=>({pubkey:new $e(l)})),n),o={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Bo.decode(m.accountInfo.data);o[String(t[l])]=q(_({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await Oe(this.scope.connection,s.map(l=>({pubkey:new $e(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Qe(cf.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(o)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=q(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new F(p.toString()).div(new F(10).pow(m.quoteDecimal.toString())).div(new F(d.toString()).div(new F(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Er({[t]:n}),o=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:o,poolKeys:s[0]}}};import{PublicKey as j}from"@solana/web3.js";import Tt from"bn.js";import{AccountLayout as cl,createAssociatedTokenAccountIdempotentInstruction as ll,TOKEN_2022_PROGRAM_ID as qn,TOKEN_PROGRAM_ID as Lo}from"@solana/spl-token";var No=class extends _e{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var B;let{programId:t,owner:n=((B=this.scope.owner)==null?void 0:B.publicKey)||j.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new Tt(new j(i.address).toBuffer()).gt(new Tt(new j(o.address).toBuffer()))?[o,i,new F(1).div(a)]:[i,o,a],A=ue.priceToSqrtPriceX64(g,y.decimals,b.decimals),k=[],T=[];y.programId===qn.toBase58()&&T.push(ma(t,new j(y.address)).publicKey),b.programId===qn.toBase58()&&T.push(ma(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((x,K)=>{x&&k.push(T[K])});let w=await Le.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:s.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:k});return f.addInstruction(w),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(_({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:b,feeRate:s.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Lc),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),w=n.useSOLBalance&&e.mintB.address===Z.toString(),[B,x]=s==="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||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),A.addInstruction(I||{});let{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(R||{}),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Le.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:q(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(O),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),w=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(k=B),A.addInstruction(x||{});let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(k===void 0||T===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),R=await Le.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(R),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:o,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=c.useSOLBalance&&t.mintA.address===Z.toString(),k=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:l});w&&(g=w),y.addInstruction(B||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),K=Le.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:o,amountMaxB:s,nft2022:(I=await this.scope.connection.getAccountInfo(i.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:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===Z.toString(),A=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(i==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k&&(y=k),f.addInstruction(T||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(w||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),x=Le.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:i,baseAmount:o,otherAmountMax:s,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(qn)});return f.addInstruction(x),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:x.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:o,amountMinA:s,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=o.useSOLBalance&&t.mintA.address===Z.toString(),g=o.useSOLBalance&&t.mintB.address===Z.toString(),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=T,h&&y.addInstruction(h);let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,B&&y.addInstruction(B);let x=[];for(let O of t.rewardDefaultInfos){let L=o.useSOLBalance&&O.mint.address===Z.toString(),v;if(O.mint.address===t.mintA.address)v=A;else if(O.mint.address===t.mintB.address)v=k;else{let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});v=Y,Q&&y.addInstruction(Q)}x.push(v)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(N=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:N.owner.equals(qn),C=await Le.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:x},liquidity:c,amountMinA:s,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let R=_({},C.address);if(o.closePosition){let O=await Le.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:I});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),R=_(_({},R),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:R}})}async lockPosition(e){var f;let{programId:t=eo,authProgramId:n=pr,poolProgramId:i=Qn,ownerPosition:o,payer:s,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Le.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:o.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(o.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=eo,authProgramId:n=pr,clmmProgram:i=Qn,poolKeys:o,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=o||await this.getClmmPoolKeys(s.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(s.positionId);b||this.logger.logWithError("position not found",s.positionId);let g=Li.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),k=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});T=w,B&&y.addInstruction(B);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:u});h=x,K&&y.addInstruction(K);let I={},C=[];for(let le of f.rewardInfos){let Pe=a.useSOLBalance&&le.mint.address===Z.toString(),Ae=I[le.mint.address];if(!Ae){let{account:ye,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(le.mint.programId),mint:new j(le.mint.address),notUseTokenAccount:Pe,owner:this.scope.ownerPubKey,skipCloseAccount:!Pe,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Pe?!1:c});Ae=ye,te&&y.addInstruction(te)}I[le.mint.address]=Ae,C.push(Ae)}let R=Ri(t,s.lockNftMint).publicKey,N=J(this.scope.ownerPubKey,s.lockNftMint,Lo).publicKey,O=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),L=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=he(new j(f.programId),s.poolId,O),{publicKey:Y}=he(new j(f.programId),s.poolId,L),{publicKey:Q}=rn(new j(f.programId),s.poolId,g.tickLower,g.tickUpper),pe=[];for(let le=0;le<f.rewardInfos.length;le++)pe.push({poolRewardVault:new j(f.rewardInfos[le].vault),ownerRewardVault:C[le],rewardMint:new j(f.rewardInfos[le].mint.address)});let ke=await Le.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:R,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:N,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:Q,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:v,tickArrayUpper:Y,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:pe,exTickArrayBitmap:je(i,s.poolId).publicKey});return y.addInstruction({instructions:[ke],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i,computeBudgetConfig:o,txTipConfig:s,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=Le.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(o),c.addTipInstruction(s),c.addInstruction(l).versionBuild({txVersion:i,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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 Tt(new F(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:i,checkCreateATAOwner:o});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Le.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:de.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of i)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of i){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 Tt(new F(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:o,checkCreateATAOwner:s});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=Le.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:de.decimalToX64(p.perSecond)}});d=_(_({},d),k.address),m.addInstruction(k)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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 Tt(new F(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:i,checkCreateATAOwner:o});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Le.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:de.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of i){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 Tt(new F(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:o,checkCreateATAOwner:s});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=Le.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:de.decimalToX64(p.perSecond)}});m.addInstruction(A),d=_(_({},d),A.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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:i,checkCreateATAOwner:o});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Le.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(s),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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:i,checkCreateATAOwner:o});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Le.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(s),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!s||s.equals(new F(0))?T=g?Yt.add(new Tt(1)):Qt.sub(new Tt(1)):T=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,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=x,K&&b.addInstruction(K)}let w;if(!w){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=x,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Le.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new j(n),amountIn:i,amountOutMin:o,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!s||s.equals(new F(0))?T=n.toString()===e.mintB.address?Yt.add(new Tt(1)):Qt.sub(new Tt(1)):T=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,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=x,K&&b.addInstruction(K)}let w;if(!w){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=x,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Le.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new j(n),amountOut:i,amountInMax:o,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=eo,lockAuth:d=pr,clmmProgram:p=Qn}){var k,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)o?J(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 Oe(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var w,B;g[h.pubkey.toBase58()]=(B=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?B:null});let A=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(L=>!L.rewardAmountOwed.isZero())))continue;let w=h,B=i.useSOLBalance&&w.mintA.address===Z.toString(),x=i.useSOLBalance&&w.mintB.address===Z.toString(),K=f[w.mintA.address];if(!K)if(B){let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new j(w.mintA.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:o,checkCreateATAOwner:s});K=O,L&&A.addInstruction(L)}else{let O=new j(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintA.programId)),A.addInstruction({instructions:[ll(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new j(w.mintA.programId))]})}let I=f[w.mintB.address];if(!I)if(x){let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new j(w.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:o,checkCreateATAOwner:s});I=O,L&&A.addInstruction(L)}else{let O=new j(w.mintB.address);I=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintB.programId)),A.addInstruction({instructions:[ll(this.scope.ownerPubKey,I,this.scope.ownerPubKey,O,new j(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=I;let C=[];for(let O of w.rewardDefaultInfos){let L=i.useSOLBalance&&O.mint.address===Z.toString(),v=f[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:L?!1:o});v=Y,Q&&A.addInstruction(Q)}f[O.mint.address]=v,C.push(v)}let R=await this.getClmmPoolKeys(w.id),N=[];for(let O=0;O<R.rewardInfos.length;O++)N.push({poolRewardVault:new j(R.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new j(R.rewardInfos[O].mint.address)});for(let O of t[h.id]){let L=(k=n==null?void 0:n[h.id])==null?void 0:k[O.nftMint.toBase58()];if(L){let v=J(this.scope.ownerPubKey,L.lockNftMint,Lo).publicKey,Y=$.getTickArrayStartIndexByTick(O.tickLower,R.config.tickSpacing),Q=$.getTickArrayStartIndexByTick(O.tickUpper,R.config.tickSpacing),{publicKey:pe}=he(new j(R.programId),L.poolId,Y),{publicKey:ke}=he(new j(R.programId),L.poolId,Q),{publicKey:le}=rn(new j(R.programId),L.poolId,O.tickLower,O.tickUpper),Pe=Ri(m,L.lockNftMint).publicKey,Ae=Le.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:Pe,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:L.lockNftMint,lockNftAccount:v,positionNftAccount:L.nftAccount,positionId:L.positionId,poolId:L.poolId,protocolPosition:le,vaultA:new j(R.vault.A),vaultB:new j(R.vault.B),tickArrayLower:pe,tickArrayUpper:ke,userVaultA:K,userVaultB:I,mintA:new j(R.mintA.address),mintB:new j(R.mintB.address),rewardAccounts:N,exTickArrayBitmap:je(p,L.poolId).publicKey});A.addInstruction({instructions:[Ae],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]})}else{let v=Le.decreaseLiquidityInstructions({poolInfo:w,poolKeys:R,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new Tt(0),amountMinA:new Tt(0),amountMinB:new Tt(0),nft2022:(T=g[O.nftMint.toBase58()])==null?void 0:T.equals(qn)});A.addInstruction(v)}}}return c===0?A.sizeCheckBuildV0({computeBudgetConfig:u}):A.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ao(e).publicKey);return t?Gc.decode(t.data).whitelistMints.filter(i=>!i.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=Qn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new Tt(1))).map(s=>ht(new j(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=Li.decode(s.data);o.push(a)}),o}async getOwnerLockedPositionInfo({programId:e=eo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Tt(1))).map(c=>Ri(new j(e),c.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];i.forEach(c=>{if(!c)return;let u=Xc.decode(c.data);o.push(u)});let s=await this.scope.connection.getMultipleAccountsInfo(o.map(c=>c.positionId)),a=[];return s.forEach(c=>{if(!c)return;let u=Li.decode(c.data);a.push(u)}),o.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 Oe(this.scope.connection,e.map(o=>({pubkey:new j(o)})),t),i={};for(let o=0;o<e.length;o++){let s=n[o];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[o]));let a=oi.decode(s.accountInfo.data),c=ue.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[o])]=q(_({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await Oe(this.scope.connection,Array.from(n).map(c=>({pubkey:new j(c)}))),o={};i.forEach(c=>{!c.accountInfo||(o[c.pubkey.toBase58()]=qc.decode(c.accountInfo.data))});let s=await Me.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:At({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Lo.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?Wn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:At({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Lo.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Wn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:q(_({},o[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Me.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await Ai({connection:this.scope.connection,mints:Array.from(n).map(m=>new j(m))}),{computeClmmPoolInfo:o,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await Oe(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Wc(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(cl.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(cl.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(_({},o[e]),{exBitmapAccount:o[e].exBitmapAccount.toBase58(),observationId:o[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:o[e].rewardInfos.filter(m=>!m.tokenVault.equals(j.default)).map(m=>({mint:At({address:m.tokenMint.toBase58(),programId:Lo.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:o[e],tickData:s}}};import{PublicKey as U}from"@solana/web3.js";import{AccountLayout as Tf,NATIVE_MINT as vi,TOKEN_PROGRAM_ID as It,createAssociatedTokenAccountIdempotentInstruction as Fi}from"@solana/spl-token";import ml from"bn.js";import qr from"bn.js";function Ka(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function lf(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);return Ka(r,e).gt(Oo)&&(t=t.add(new qr(1))),[t,e]}var Oo=new qr(0),Mo=class{static swapBaseInputWithoutFees(e,t,n){let i=e.mul(n),o=t.add(e);return i.div(o)}static swapBaseOutputWithoutFees(e,t,n){let i=t.mul(e),o=n.sub(e),[s]=lf(i,o);return s}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return Ka(e.mul(n),t).gt(Oo)&&s.gt(Oo)&&(s=s.add(new qr(1))),Ka(e.mul(i),t).gt(Oo)&&a.gt(Oo)&&(a=a.add(new qr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import mf from"bn.js";var Ct=class{static tradingFee(e,t){return ji(e,t,Kt)}static protocolFee(e,t){return cr(e,t,Kt)}static fundFee(e,t){return cr(e,t,Kt)}static creatorFee(e,t){return ji(e,t,Kt)}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(Kt),i=Kt.sub(t);return n.add(i).sub(new mf(1)).div(i)}};var vo=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,i,o,s,a,c){let u=new ml(0),l=Ct.tradingFee(e,i),m;c?(u=Ct.creatorFee(e,o),m=e.sub(l).sub(u)):m=e.sub(l);let d=Ct.protocolFee(l,s),p=Ct.protocolFee(l,a),f=Mo.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Ct.creatorFee(f,o),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,i,o,s,a,c){let u,l=new ml(0),m;if(c)m=e;else{let b=Ct.calculatePreFeeAmount(e,o);l=b.sub(e),m=b}let d=Mo.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Ct.calculatePreFeeAmount(d,i.add(o)),g=b.sub(d);l=Ct.splitCreatorFee(g,i,o),u=g.sub(l),p=b}else{let b=Ct.calculatePreFeeAmount(d,i);u=b.sub(d),p=b}let f=Ct.protocolFee(u,s),y=Ct.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import ze from"bn.js";import{PublicKey as Vo,TransactionInstruction as Tn,Keypair as wf,SystemProgram as La}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ur,TOKEN_2022_PROGRAM_ID as Na,TOKEN_PROGRAM_ID as hn}from"@solana/spl-token";var df=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),sS=Buffer.from("amm_config","utf8"),pf=Buffer.from("pool","utf8"),ff=Buffer.from("pool_lp_mint","utf8"),yf=Buffer.from("pool_vault","utf8"),bf=Buffer.from("observation","utf8"),gf=Buffer.from("permission","utf8");function Mi(r){return ce([df],r)}function Ca(r,e,t,n){return ce([pf,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Pf(r,e){return ce([ff,e.toBuffer()],r)}function dl(r,e,t){return ce([yf,e.toBuffer(),t.toBuffer()],r)}function Fo(r,e){return ce([bf,e.toBuffer()],r)}function Ra({poolId:r,programId:e,configId:t,mintA:n,mintB:i}){let o=Mi(e).publicKey,s=r||Ca(e,t,n,i).publicKey,a=Pf(e,s).publicKey,c=dl(e,s,n).publicKey,u=dl(e,s,i).publicKey,l=Fo(e,s).publicKey;return{poolId:s,configId:t,authority:o,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Af=Buffer.from("locked_liquidity","utf8");function _o(r,e){return ce([Af,e.toBuffer()],r)}function pl(r,e){return ce([gf,e.toBuffer()],r)}var kf=we("Raydium_cpmm"),In={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 fl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=Ca(r,t,o,s).publicKey,w=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(h),isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:hn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:ws,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],B=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:k},B),new Tn({keys:w,programId:r,data:Buffer.from([...In.initialize,...B])})}function yl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let y=V([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Na,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 kf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Tn({keys:b,programId:r,data:Buffer.from([...In.deposit,...g])})}function bl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let y=V([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Na,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:On,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Tn({keys:b,programId:r,data:Buffer.from([...In.withdraw,...g])})}function Gr(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y){let b=V([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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 Tn({keys:g,programId:r,data:Buffer.from([...In.swapBaseInput,...A])})}function gl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y){let b=V([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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 Tn({keys:g,programId:r,data:Buffer.from([...In.swapBaseOutput,...A])})}async function Pl(r){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:i,getEphemeralSigners:o}=r,s=[],[a,c]=[new Vo(t.id),new Vo(t.lpMint.address)],u;if(o)u=new Vo((await o(1))[0]);else{let g=wf.generate();s.push(g),u=g.publicKey}let{publicKey:l}=J(i,u,hn),{publicKey:m}=An(u),{publicKey:d}=_o(r.lockProgram,u),{publicKey:p}=J(e.wallet,c,hn),{publicKey:f}=J(r.lockAuthProgram,c,hn),y=hf({programId:r.lockProgram,auth:r.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:i,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new Vo(n.vault.A),poolVaultB:new Vo(n.vault.B),metadataAccount:m,lpAmount:r.lpAmount,withMetadata:(b=r.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:s,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function hf({programId:r,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:o,nftAccount:s,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:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:La.programId,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1}],A=V([P("lpAmount"),Ge("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let T=Buffer.from([...In.lockCpLiquidity,...k]);return new Tn({keys:g,programId:r,data:T})}function Oa({programId:r,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:o,mintLp:s,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:i,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:jn,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Uu,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:hn,isSigner:!1,isWritable:!1},{pubkey:Na,isSigner:!1,isWritable:!1},{pubkey:On,isSigner:!1,isWritable:!1}],A=V([P("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let T=Buffer.from([...In.collectCpFee,...k]);return new Tn({keys:g,programId:r,data:T})}function Ma(r,e,t,n,i,o,s,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:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Ur,isSigner:!1,isWritable:!1},{pubkey:La.programId,isSigner:!1,isWritable:!1}];return new Tn({keys:p,programId:r,data:In.collectCreatorFee})}function Al(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w){let B=V([P("amountA"),P("amountB"),P("openTime"),E("feeOn")]),x=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:hn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:La.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(B.span);return B.encode({amountA:k,amountB:T,openTime:h,feeOn:w},K),new Tn({keys:x,programId:r,data:Buffer.from([...In.initializeWithPermission,...K])})}var wl=V([Be(8),E("bump"),Ge("disableCreatePool"),Ft("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),M("protocolOwner"),M("fundOwner"),P("creatorFeeRate"),H(P(),15)]),Xr=V([Be(8),M("configId"),M("poolCreator"),M("vaultA"),M("vaultB"),M("mintLp"),M("mintA"),M("mintB"),M("mintProgramA"),M("mintProgramB"),M("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"),Ge("enableCreatorFee"),H(E(),6),P("creatorFeesMintA"),P("creatorFeesMintB"),H(P(),28)]),AS=V([Be(8),M("configId"),H(P(),30)]);var Eo=class extends _e{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 Oe(this.scope.connection,e.map(m=>({pubkey:new U(m)}))),i={},o=new Set,s=[];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=Xr.decode(d.accountInfo.data);i[String(e[m])]=q(_({},p),{programId:d.accountInfo.owner}),o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await Oe(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]]=wl.decode(f.data)}}let c={},u=await Oe(this.scope.connection,s.map(m=>({pubkey:new U(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new ze(Tf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=q(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new F(f.toString()).div(new F(10).pow(d.mintDecimalB)).div(new F(p.toString()).div(new F(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let o=e[i],[s,a]=[o.mintA.toBase58(),o.mintB.toBase58()];return q(_({},n),{[i]:q(_({},o),{id:new U(i),configInfo:o.configInfo,version:7,authority:Mi(o.programId).publicKey,mintA:At({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?Wn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:At({address:a,decimals:o.mintDecimalB,programId:o.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Wn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Ai({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=At({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Wn(n[t.mintA.toBase58()].feeConfig):void 0}}),o=At({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Wn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=At({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:It.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:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:o,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new F(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new F(t.vaultBAmount.toString()).div(10**o.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:i,mintB:o,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Mi(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:Fo(t.programId,new U(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:o,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=De(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,Y,Q;let b=o.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new ze(new U(p.mintA.address).toBuffer()).lte(new ze(new U(p.mintB.address).toBuffer())),[A,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=o.useSOLBalance&&A.address===vi.toBase58(),B=o.useSOLBalance&&k.address===vi.toBase58(),[x,K]=[new U(A.address),new U(k.address)],I=this.createTxBuilder(d),{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:x,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:T}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:a});I.addInstruction(R||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new U(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:b,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let L=Ra({poolId:e,programId:t,configId:new U(u.id),mintA:x,mintB:K});return I.addInstruction({instructions:[fl(t,this.scope.ownerPubKey,new U(u.id),L.authority,L.poolId,x,K,L.lpMint,C,N,J(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,n,new U((Y=A.programId)!=null?Y:It),new U((Q=k.programId)!=null?Q:It),L.observationId,T,h,i)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(_({},L),{mintA:A,mintB:k,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:o,slippage:s,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"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(_({},t),{lpAmount:new F(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new rt(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new F(i.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),T=k.amount,h=t.mintA.address===vi.toString(),w=t.mintB.address===vi.toString(),B=this.createTxBuilder(d),[x,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||(o?i:T).isZero()?{payer:this.scope.ownerPubKey,amount:o?i:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:y});B.addInstruction(C||{});let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(o?T:i).isZero()?{payer:this.scope.ownerPubKey,amount:o?T:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:y});B.addInstruction(N||{}),!I&&!R&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),pe=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:L}=pe,v=De(pe,["tokenAccount"]);B.addInstruction(v);let Y=n!=null?n:await this.getCpmmPoolKeys(t.id),Q=new rt(new ze(1)).sub(s);return B.addInstruction({instructions:[yl(new U(t.programId),this.scope.ownerPubKey,new U(Y.authority),new U(t.id),L,I,R,new U(Y.vault.A),new U(Y.vault.B),x,K,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:Q.mul(g).quotient,o?A.amount:T,o?T:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.addTipInstruction(u),B.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,Y;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:o,computeBudgetConfig:s,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 rt(new ze(1)).sub(o),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(i.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(i.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Ce(p,t.mintA.extensions.feeConfig,y,!1),Ce(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],w=T.equals(Z),B=h.equals(Z),x,K,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});x=I,C&&k.addInstruction(C);let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(B&&l),associatedOnly:!B,checkCreateATAOwner:!1});K=R,N&&k.addInstruction(N),(!x||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let O=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let L=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[bl(new U(t.programId),this.scope.ownerPubKey,new U(L.authority),new U(t.id),O,x,K,new U(L.vault.A),new U(L.vault.B),T,h,new U(t.lpMint.address),i,p.sub((v=b.fee)!=null?v:new ze(0)),f.sub((Y=g.fee)!=null?Y:new ze(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),k.addCustomComputeBudget(s),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,R,N,O,L,v;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:o,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,k]=[new U(t.mintA.address),new U(t.mintB.address)];o?a.inputAmount=a.inputAmount.mul(new ze((1+c)*1e4)).div(new ze(1e4)):a.outputAmount=a.outputAmount.mul(new ze((1-c)*1e4)).div(new ze(1e4));let T=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:It),owner:this.scope.ownerPubKey,createInfo:T||!i?{payer:this.scope.ownerPubKey,amount:i?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});B&&g.addInstruction(B);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new U((R=t.mintB.programId)!=null?R:It),owner:this.scope.ownerPubKey,createInfo:h||i?{payer:this.scope.ownerPubKey,amount:i?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!w||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:w,mintBTokenAcc:x,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[o?gl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),i?w:x,i?x:w,new U(I.vault[i?"A":"B"]),new U(I.vault[i?"B":"A"]),new U((L=t[i?"mintA":"mintB"].programId)!=null?L:It),new U((v=t[i?"mintB":"mintA"].programId)!=null?v:It),i?A:k,i?k:A,Fo(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Gr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),i?w:x,i?x:w,new U(I.vault[i?"A":"B"]),new U(I.vault[i?"B":"A"]),new U((N=t[i?"mintA":"mintB"].programId)!=null?N:It),new U((O=t[i?"mintB":"mintA"].programId)!=null?O:It),i?A:k,i?k:A,Fo(new U(t.programId),new U(t.id)).publicKey,s,a.outputAmount)],instructionTypes:[o?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:i,txTipConfig:o,txVersion:s,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 Pl({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(i),u.addTipInstruction(o),u.versionBuild({txVersion:s,extInfo:m.address})}async harvestLockLp(e){var R;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:o=fr,authProgram:s=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,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});A=T,h&&p.addInstruction(h);let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,B&&p.addInstruction(B),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let x=(R=e.poolKeys)!=null?R:await this.getCpmmPoolKeys(t.id),{publicKey:K}=J(d,i,It),{publicKey:I}=_o(o,i),{publicKey:C}=J(s,new U(t.lpMint.address),It);return p.addInstruction({instructions:[Oa({programId:o,nftOwner:this.scope.ownerPubKey,auth:s,nftMint:i,nftAccount:K,lockPda:I,poolId:new U(t.id),mintLp:new U(x.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.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:i=yr,cpmmProgram:o,computeBudgetConfig:s,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,A]=[new U(f.mintA.address),new U(f.mintB.address)],k=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],w=m[f.mintB.address];if(!h)if(k){let{account:C,instructionParams:R}=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,R&&l.addInstruction(R),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:[Fi(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!w)if(T){let{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new U(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});w=C,R&&l.addInstruction(R),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);w=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Fi(this.scope.ownerPubKey,w,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=w}(!h||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:w});let B=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:x}=J(u,b,It),{publicKey:K}=_o(n,b),{publicKey:I}=J(i,new U(f.lpMint.address),It);l.addInstruction({instructions:[Oa({programId:n,nftOwner:this.scope.ownerPubKey,auth:i,nftMint:b,nftAccount:x,lockPda:K,poolId:new U(f.id),mintLp:new U(B.mintLp.address),userVaultA:h,userVaultB:w,poolVaultA:new U(B.vault.A),poolVaultB:new U(B.vault.B),mintA:g,mintB:A,lockLpVault:I,lpFeeAmount:y,cpmmProgram:o==null?void 0:o.programId,cpmmAuthProgram:o==null?void 0:o.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:s}):l.sizeCheckBuild({computeBudgetConfig:s})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:o,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=De(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var Y,Q,pe;console.log("***this method only available for wallet with permissions***");let g=o.feePayer||((Y=this.scope.owner)==null?void 0:Y.publicKey),A=new ze(new U(f.mintA.address).toBuffer()).lte(new ze(new U(f.mintB.address).toBuffer())),[k,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,w]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],B=o.useSOLBalance&&k.address===vi.toBase58(),x=o.useSOLBalance&&T.address===vi.toBase58(),[K,I]=[new U(k.address),new U(T.address)],C=this.createTxBuilder(d),{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:w}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:s,checkCreateATAOwner:a});if(C.addInstruction(L||{}),R===void 0||O===void 0)throw Error("you don't has some token account");let v=Ra({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[Al(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,R,O,J(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((Q=k.programId)!=null?Q:It),new U((pe=T.programId)!=null?pe:It),v.observationId,pl(t,this.scope.ownerPubKey).publicKey,h,w,i,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(_({},v),{mintA:k,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=jn,txVersion:i,computeBudgetConfig:o,txTipConfig:s,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:[Fi(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Fi(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Ma(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(o),u.addTipInstruction(s),u.versionBuild({txVersion:i})}async collectMultiCreatorFees({poolInfoList:e,programId:t=jn,txVersion:n,computeBudgetConfig:i,feePayer:o}){let s=o||this.scope.ownerPubKey,a=this.createTxBuilder(s),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(A=>A.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new U(l.mintA.address),new U(l.mintB.address),new U(l.mintA.programId),new U(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[Fi(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[Fi(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Ma(t,this.scope.ownerPubKey,new U(m.authority),new U(m.id),new U(m.config.id),new U(m.vault.A),new U(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let o=n.toString()===e.mintB.address,s=e.feeOn===0||e.feeOn===2,a=o?vo.swapBaseInput(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s):vo.swapBaseOutput(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s),c=new F(a.outputAmount.toString()).div(a.inputAmount.toString()),u=a.outputAmount.mul(new ze((1-i)*1e4)).div(new ze(1e4));return{allTrade:a.inputAmount.eq(t),amountIn:t,amountOut:a.outputAmount,minAmountOut:u,executionPrice:c,fee:a.tradeFee,priceImpact:e.poolPrice.sub(c).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var T,h,w,B,x,K,I,C,R;let c=1-Number(o.toSignificant())/100,u=new ze(new F(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Ce(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((T=l.fee)!=null?T:new ze(0)),d=new ze(new F(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(w=(h=l.fee)==null?void 0:h.toString())!=null?w:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:St,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=If(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Ce(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new rt(new ze(1)).add(o),g=new rt(new ze(1)).sub(o),A=Ce(b.mul(y.amount.sub((B=y.fee)!=null?B:new ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=Ce(g.mul(y.amount.sub((x=y.fee)!=null?x:new ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!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:",(R=(C=A.fee)==null?void 0:C.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}};function If(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new ze(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new ze(1))),{amountA:i,amountB:o}}import{PublicKey as mi}from"@solana/web3.js";import{createTransferInstruction as xl,TOKEN_PROGRAM_ID as Ze,TOKEN_2022_PROGRAM_ID as Qr}from"@solana/spl-token";import Hr from"bn.js";var kl={[xs.toBase58()]:3},hl={3:xs};var va=V([Be(5),Be(8),M("ownAddress"),P("vaultSignerNonce"),M("baseMint"),M("quoteMint"),M("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),M("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),M("requestQueue"),M("eventQueue"),M("bids"),M("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Be(7)]),Tl={3:va};import{PublicKey as Il}from"@solana/web3.js";var zr=we("Serum"),Yr=class{static getProgramId(e){let t=hl[e];return t||zr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=kl[t];return n||zr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Tl[e];return t||zr.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()],i=0,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=Il.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return zr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Il.default,nonce:i}}};import{PublicKey as ae,SystemProgram as Bf,TransactionInstruction as xf}from"@solana/web3.js";import li from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Sf,TOKEN_2022_PROGRAM_ID as Kf,TOKEN_PROGRAM_ID as Cf}from"@solana/spl-token";function Rf(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){var w;let y=[],b=[S({pubkey:Cf,isWritable:!1}),S({pubkey:Kf,isWritable:!1}),S({pubkey:Sf,isWritable:!1}),S({pubkey:Bf.programId,isWritable:!1}),S({pubkey:e,isSigner:!0})];b.push(S({pubkey:t})),b.push(S({pubkey:i}));let g=[c,u],A=[l,m],k=[o,s,a];for(let B=0;B<g.length;B++){let x=g[B],K=k[B]===x.mintA.address;if(b.push(S({pubkey:new ae(x.programId),isWritable:!1})),B===g.length-1?b.push(S({pubkey:i})):b.push(S({pubkey:n})),b.push(S({pubkey:new ae(k[B])})),b.push(S({pubkey:new ae(k[B+1])})),x.version===6){let I=A[B];b.push(S({pubkey:new ae(I.config.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new ae(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new ae(x.observationId)})),b.push(S({pubkey:On})),b.push(S({pubkey:je(new ae(x.programId),new ae(x.id)).publicKey})),y.push(Lf(x.sqrtPriceX64.toString(),K));for(let C of(w=f[B])!=null?w:[])b.push(S({pubkey:new ae(C)}))}else if(x.version===5){let I=A[B];b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.authority),isWritable:!1})),b.push(S({pubkey:new ae(I.marketProgramId)})),b.push(S({pubkey:new ae(I.marketAuthority)})),b.push(S({pubkey:Du,isWritable:!1})),b.push(S({pubkey:new ae(I.openOrders)})),b.push(S({pubkey:new ae(I.vault.A)})),b.push(S({pubkey:new ae(I.vault.B)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.marketId)})),b.push(S({pubkey:new ae(I.marketBids)})),b.push(S({pubkey:new ae(I.marketAsks)})),b.push(S({pubkey:new ae(I.marketEventQueue)})),b.push(S({pubkey:new ae(I.marketBaseVault)})),b.push(S({pubkey:new ae(I.marketQuoteVault)}))}else if(x.version===4){let I=A[B],C=x.status!==1;b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.authority),isWritable:!1})),b.push(S({pubkey:new ae(C?I.id:I.marketProgramId)})),b.push(S({pubkey:new ae(C?I.id:I.marketAuthority)})),b.push(S({pubkey:new ae(C?I.id:I.openOrders)})),b.push(S({pubkey:new ae(I.vault.A)})),b.push(S({pubkey:new ae(I.vault.B)})),b.push(S({pubkey:new ae(C?I.id:I.marketId)})),b.push(S({pubkey:new ae(C?I.id:I.marketBids)})),b.push(S({pubkey:new ae(C?I.id:I.marketAsks)})),b.push(S({pubkey:new ae(C?I.id:I.marketEventQueue)})),b.push(S({pubkey:new ae(C?I.id:I.marketBaseVault)})),b.push(S({pubkey:new ae(C?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=A[B];b.push(S({pubkey:new ae(I.authority)})),b.push(S({pubkey:new ae(I.config.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new ae(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new ae(x.observationId)}))}else throw Error("pool type error")}let T=V([E("insId"),P("amountIn"),P("amountOut"),H(oe(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new xf({keys:b,programId:r,data:h})}function Lf(r,e){if(r)if(e){let t=new li(r).div(new li(25));return t.gt(Rr)?t:Rr}else{let t=new li(r).mul(new li(25));return t.lt(Lr)?t:Lr}else return e?Rr:Lr}function Bl({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=mt(m),p=t.equals(d.mintA.address)?Yt.add(Vt):Qt.sub(Vt);return Le.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new li(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Gr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new ae(m[d?"mintA":"mintB"].address),new ae(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[_r({poolKeys:m,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 li(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Rf(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new li(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}var Bn=new Hr(0),Wo=class extends _e{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:i=1,feePayer:o}=e,s=await this.getWSolAccounts(),a=this.createTxBuilder(o);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ee(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(a.addInstruction({instructions:[bn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):a.addInstruction({instructions:[bn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:i})}async wrapWSol(e,t,n,i){let o=this.createTxBuilder(i),s=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return o.addInstruction(s),o.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:o,txVersion:s,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?Qr:Ze,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?Qr:Ze);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?Qr:Ze,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=h,w&&c.addInstruction(w)}d&&c.addInstruction({endInstructions:[bn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Ze})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let h=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?Qr:Ze)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Bl({routeProgram:o,inputMint:p,swapInfo:q(_({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[xl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:w}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[xl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return c.addInstruction(T),s===0?c.sizeCheckBuildV0({computeBudgetConfig:i,address:T.address}):c.sizeCheckBuild({computeBudgetConfig:i,address:T.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=dr,clmm:n=Qn,cpmm:i=jn}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Bo.offsetOf("baseMint"),length:64}}),s=V([M("baseMint"),M("quoteMint")]),a=o.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=V([M("mintA"),M("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:oi.span}],dataSlice:{offset:oi.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(i,{dataSlice:{offset:Xr.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:i,cpmmPools:o}){e=e.toString()===mi.default.toString()?Z:e,t=t.toString()===mi.default.toString()?Z:t;let s={},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:Ze,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:Ze,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:Ze,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:Ze,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ze,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:Ze,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:Ze,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:Ze,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of o)(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:Ze,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:Ze,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:Ze,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:Ze,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)&&s[f.id.toString()]===void 0&&(s[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)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=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 o=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),s=Er(o),a={};Object.values(s).forEach(y=>{i.delete(y.mintA.address),a[y.mintA.address]={address:new mi(y.mintA.address),programId:Ze,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(y.mintB.address),a[y.mintB.address]={address:new mi(y.mintB.address),programId:Ze,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(Ze)?(i.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}):i.add(b),y.mintProgramB.equals(Ze)?(i.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}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Ai({connection:this.scope.connection,mints:Array.from(i).map(y=>new mi(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>q(_({},y),{[b]:q(_({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:o,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:o,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,k,T,h,w,B,x,K;let m=l===void 0?new Hr(0):e.raw.mul(new Hr(l.feeBps.toNumber())).div(new Hr(1e4)),d=e.raw.sub(m),p=new Ke(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(_({},t),{address:ft(t.address).toString()}),b=[];for(let I of n)try{b.push(q(_({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:o,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(i)){let R={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(L=>{try{return{pool:L,data:this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:R,amountIn:p})}}catch(v){this.logDebug("route in error",L.version,L.id.toString(),v.message);return}}).sort((L,v)=>{var pe,ke,le,Pe;let Y=L===void 0?Bn:L.data.amountOut.amount.raw.sub((ke=(pe=L.data.amountOut.fee)==null?void 0:pe.raw)!=null?ke:Bn),Q=v===void 0?Bn:v.data.amountOut.amount.raw.sub((Pe=(le=v.data.amountOut.fee)==null?void 0:le.raw)!=null?Pe:Bn);return Y.lt(Q)?1:-1})[0];if(N===void 0)continue;let O=new Ke(vr(R),N.data.amountOut.amount.raw.sub((A=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?A:Bn));for(let L of C.out)try{let v=this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(q(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new F(new xt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(k=v.amountOut.fee)==null?void 0:k.raw)!=null?T:Bn)}).toFixed()),priceImpact:new F(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,L],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Ke(N.data.amountOut.amount.token,((B=(w=N.data.amountOut.fee)==null?void 0:w.raw)!=null?B:Bn).add((K=(x=v.amountOut.fee)==null?void 0:x.raw)!=null?K:Bn)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:nn(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",L.version,L.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(Bn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:o,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:k}=Me.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:o,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new F(f.toFixed()),executionPrice:new F(y.toFixed()),priceImpact:new F(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:nn(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:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Io(q(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Io(q(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Ke(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,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:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Io(q(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Io(q(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Ke(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let o=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await Oe(this.scope.connection,Array.from(s).map(l=>({pubkey:new mi(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=va.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Yr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:q(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Ba({programId:new mi(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:Mi(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:At({address:u.mintLp.toBase58(),programId:Ze.toBase58(),decimals:u.lpDecimals}),config:q(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Nf,Transaction as Fa,TransactionInstruction as Of}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mf}from"@solana/spl-token";import Sl from"bn.js";var wt=class extends _e{static getPdaPoolId(e,t){return ce([wt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return ce([wt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Sl(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>wt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<wt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>wt.getPdaOwnerId(t,m,i,l).publicKey));let c=await $t(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==wt.POOL_LAYOUT.span||b.data.length!==wt.OWNER_LAYOUT.span)continue;let g=wt.POOL_LAYOUT.decode(y.data),A=wt.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(x=>x.debtAmount.gt(new Sl(0))).filter(x=>!x).length!==3,w=o>k&&o<T&&g.status===1,B=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:wt.VERSION_PROJECT[m],openTime:k,endTime:T,canClaim:B,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.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 i=this.createTxBuilder(n),o=t.wallet||this.scope.ownerPubKey,s=[];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(Ue.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!u.mintAddress.equals(Ue.WSOL.mint),associatedOnly:u.mintAddress.equals(Ue.WSOL.mint)?!1:t.associatedOnly});m&&i.addInstruction(m),s.push(l)}i.addInstruction({instructions:[wt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:s}})]});let{transaction:a,signers:c}=i.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let i=this.createTxBuilder(n),o=t.wallet||this.scope.ownerPubKey,s={};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(Ue.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!d.mintAddress.equals(Ue.WSOL.mint),associatedOnly:d.mintAddress.equals(Ue.WSOL.mint)?!1:t.associatedOnly});f&&i.addInstruction(f),p&&(s[d.mintAddress.toString()]=p,m.push(p))}i.addInstruction({instructions:[wt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:o,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=i.build(),u=i.allInstructions;return Bs(u,[o,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Fa().add(...u.slice(0,i.AllTxData.instructions.length-1)),signer:c},{transaction:new Fa().add(...u.slice(i.AllTxData.instructions.length-1)),signer:[]},{transaction:new Fa().add(...i.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=V([]),o=[{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:Mf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Of({keys:o,programId:e,data:a})}},Ht=wt;Ht.CLAIMED_NUM=3,Ht.POOL_LAYOUT=V([Be(8),E("bump"),E("status"),P("openTime"),P("endTime"),M("ammId"),H(V([E("mintDecimals"),M("mintAddress"),M("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),wt.CLAIMED_NUM,"tokenInfo"),H(P(),10,"padding")]),Ht.OWNER_LAYOUT=V([Be(8),E("bump"),E("version"),M("poolId"),M("owner"),P("lpAmount"),H(V([M("mintAddress"),P("debtAmount"),P("claimedAmount")]),wt.CLAIMED_NUM,"tokenInfo"),H(P(),4,"padding")]),Ht.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Nf(e)),Ht.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Ht.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as qo}from"@solana/web3.js";import Rl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Ff,TransactionInstruction as Kl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Cl}from"@solana/spl-token";var vf=V([E("instruction"),ec("amount")]),Do=V([E("instruction")]);function jr({programId:r},e){let t=[{pubkey:Cl,isSigner:!1,isWritable:!1},{pubkey:Su,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Do.span);return Do.encode({instruction:2},n),new Kl({keys:t,programId:r,data:n})}function _a(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Do.span);Do.encode({instruction:2},s);let a=[{pubkey:Cl,isWritable:!1,isSigner:!1},{pubkey:Ff,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Kl({programId:e.programId,keys:a,data:s})}var _f={[to.IDO_PROGRAM_ID_V1.toString()]:1,[to.IDO_PROGRAM_ID_V2.toString()]:2,[to.IDO_PROGRAM_ID_V3.toString()]:3,[to.IDO_PROGRAM_ID_V4.toString()]:4},_i=class extends _e{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o,feePayer:s}){let a=this.createTxBuilder(s),c=_f[t.programId];c||this.logAndCreateError("invalid version",c);let u=mt(t),[l,m]=[!new Rl(e.coin).isZero(),!new Rl(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:i});!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:i});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?[jr({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new qo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[jr({programId:new qo(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new qo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[jr({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new qo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});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 qo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[_a(q(_({},A),{side:"base"}))]:[],...m?[_a(q(_({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};var Vf=Buffer.from("vault_auth_seed","utf8"),n0=Buffer.from("global_config","utf8"),Ef=Buffer.from("pool_vesting","utf8"),Wf=Buffer.from("platform_config","utf8"),Df=Buffer.from("platform_fee_vault_auth_seed","utf8"),qf=Buffer.from("creator_fee_vault_auth_seed","utf8");function pn(r){return ce([Vf],r)}function Vi(r,e,t){return ce([aa,e.toBuffer(),t.toBuffer()],r)}function Va(r,e,t){return ce([ua,e.toBuffer(),t.toBuffer()],r)}function Un(r){return ce([Buffer.from("__event_authority","utf8")],r)}function Ea(r,e){return ce([Wf,e.toBuffer()],r)}function Uo(r,e,t){return ce([Ef,e.toBuffer(),t.toBuffer()],r)}function di(r,e,t){return ce([e.toBuffer(),t.toBuffer()],r)}function Wa(r){return ce([Df],r)}function pi(r,e,t){return ce([e.toBuffer(),t.toBuffer()],r)}function Da(r){return ce([qf],r)}import{ASSOCIATED_TOKEN_PROGRAM_ID as Zr,TOKEN_2022_PROGRAM_ID as Xf,TOKEN_PROGRAM_ID as Go}from"@solana/spl-token";import{SystemProgram as Dt,TransactionInstruction as Rt}from"@solana/web3.js";import Wi from"bn.js";var Gn=V([P(),P("epoch"),E("curveType"),Ft("index"),P("migrateFee"),P("tradeFeeRate"),P("maxShareFeeRate"),P("minSupplyA"),P("maxLockRate"),P("minSellRateA"),P("minMigrateRateA"),P("minFundRaisingB"),M("mintB"),M("protocolFeeOwner"),M("migrateFeeOwner"),M("migrateToAmmWallet"),M("migrateToCpmmWallet"),H(P(),16)]),Uf=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),sn=V([P(),P("epoch"),E("bump"),E("status"),E("mintDecimalsA"),E("mintDecimalsB"),E("migrateType"),P("supply"),P("totalSellA"),P("virtualA"),P("virtualB"),P("realA"),P("realB"),P("totalFundRaisingB"),P("protocolFee"),P("platformFee"),P("migrateFee"),Uf.replicate("vestingSchedule"),M("configId"),M("platformId"),M("mintA"),M("mintB"),M("vaultA"),M("vaultB"),M("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),H(E(),62)]),r0=V([P(),P("epoch"),M("poolId"),M("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),H(P(),8)]),Ll=V([E("migrateType"),E("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Gf=V([P("epoch"),E("index"),M("configId"),Ll.replicate("bondingCurveParam"),H(P(),50)]),Ei=V([P(),P("epoch"),M("platformClaimFeeWallet"),M("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),H(E(),64,"name"),H(E(),256,"web"),H(E(),256,"img"),M("cpConfigId"),P("creatorFeeRate"),M("transferFeeExtensionAuth"),H(E(),180),sc(Gf,"platformCurve")]);var Lt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145])};function Nl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){r.equals(vt.LAUNCHPAD_PROGRAM)&&console.log("*** launchlab initialize has been deprecated, please use initializeV2 instead! ***");let T=V([E("decimals"),dt("name"),dt("symbol"),dt("uri")]),h=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),w=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),B=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),x=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:Go,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],K=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),I=Buffer.alloc(h.span),C=Buffer.alloc(b.type==="ConstantCurve"?B.span:w.span);return T.encode({decimals:d,name:p,symbol:f,uri:y},K),b.type==="ConstantCurve"?B.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="FixedCurve"?w.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="LinearCurve"&&w.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),C),h.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k},I),new Rt({keys:x,programId:r,data:Buffer.from([...Lt.initialize,...K,...C,...I])})}function Ol(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=V([E("decimals"),dt("name"),dt("symbol"),dt("uri")]),w=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn")]),B=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),x=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:Go,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),R=Buffer.alloc(b.type==="ConstantCurve"?x.span:B.span);return h.encode({decimals:d,name:p,symbol:f,uri:y},I),b.type==="ConstantCurve"?x.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),R):b.type==="FixedCurve"?B.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),R):b.type==="LinearCurve"&&B.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),R),w.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:T},C),new Rt({keys:K,programId:r,data:Buffer.from([...Lt.initializeV2,...I,...R,...C])})}function Ml(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=V([E("decimals"),dt("name"),dt("symbol"),dt("uri")]),w=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),V([Ft("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),B=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),x=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:Xf,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),R=Buffer.alloc(y.type==="ConstantCurve"?x.span:B.span);return h.encode({decimals:m,name:d,symbol:p,uri:f},I),y.type==="ConstantCurve"?x.encode(q(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),R):y.type==="FixedCurve"?B.encode(q(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),R):y.type==="LinearCurve"&&B.encode(q(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),R),w.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:k,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new Wi(0)}},C),new Rt({keys:K,programId:r,data:Buffer.from([...Lt.initializeWithToken2022,...I,...R,...C])})}function vl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountB"),P("minAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.buyExactIn,...w])})}function Fl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountA"),P("maxAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.buyExactOut,...w])})}function _l(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountA"),P("minAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.sellExactIn,...w])})}function Vl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountB"),P("maxAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.sellExactOut,...w])})}function qa(r,e,t,n,i,o,s,a,c){let u=V([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Zr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Rt({keys:l,programId:r,data:Buffer.from([...Lt.claimVestedToken,...m])})}function Ua(r,e,t,n,i,o){let s=V([P("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Dt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({shareAmount:o},c),new Rt({keys:a,programId:r,data:Buffer.from([...Lt.createVestingAccount,...c])})}function Ga(r,e,t,n,i,o,s,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Dt.programId,isSigner:!1,isWritable:!0},{pubkey:Zr,isSigner:!1,isWritable:!0}];return new Rt({keys:u,programId:r,data:Lt.claimPlatformFee})}function El(r,e,t,n,i,o,s,a,c,u,l,m,d){let p=V([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),dt("name"),dt("web"),dt("img"),P("creatorFeeRate")]),f=[{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:o,isSigner:!1,isWritable:!0},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Rt({keys:f,programId:r,data:Buffer.from([...Lt.createPlatformConfig,...y])})}function Wl(r,e,t,n){let i=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],o;if(n.type==="updateClaimFeeWallet"){let s=V([E("index"),M("value")]);o=Buffer.alloc(s.span),s.encode({index:0,value:n.value},o)}else if(n.type==="updateLockNftWallet"){let s=V([E("index"),M("value")]);o=Buffer.alloc(s.span),s.encode({index:1,value:n.value},o)}else if(n.type==="migrateCpLockNftScale"){let s=V([E("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);o=Buffer.alloc(s.span),s.encode(_({index:2},n.value),o)}else if(n.type==="updateFeeRate"){let s=V([E("index"),P("value")]);o=Buffer.alloc(s.span),s.encode({index:3,value:n.value},o)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let s=V([E("index"),dt("value")]);o=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?s.encode({index:4,value:n.value},o):n.type==="updateWeb"?s.encode({index:5,value:n.value},o):n.type==="updateImg"&&s.encode({index:6,value:n.value},o)}else if(n.type==="updateCpConfigId"){i.push({pubkey:n.value,isSigner:!1,isWritable:!1});let s=V([E("index")]);o=Buffer.alloc(s.span),s.encode({index:7},o)}else if(n.type==="updateAll"){i.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let s=V([E("index"),M("platformClaimFeeWallet"),M("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),dt("name"),dt("web"),dt("img"),M("transferFeeExtensionAuth"),P("creatorFeeRate")]);o=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),s.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},o)}else throw Error("updateInfo params type error");return new Rt({keys:i,programId:r,data:Buffer.from([...Lt.updatePlaformConfig,...o])})}function Xa(r,e,t,n,i,o,s,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Zr,isSigner:!1,isWritable:!1}];return new Rt({keys:c,programId:r,data:Lt.claimPlatformFeeFromVault})}function za(r,e,t,n,i,o,s){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Zr,isSigner:!1,isWritable:!1}];return new Rt({keys:a,programId:r,data:Lt.claimCreatorFee})}var b0=new Wi("18446744073709551615");import{NATIVE_MINT as xn,TOKEN_2022_PROGRAM_ID as fi,TOKEN_PROGRAM_ID as ve,createAssociatedTokenAccountIdempotentInstruction as Ot,createSyncNativeInstruction as zf,getTransferFeeConfig as is,unpackMint as os}from"@solana/spl-token";import re from"bn.js";import{PublicKey as ql,SystemProgram as Yf}from"@solana/web3.js";import jt from"bn.js";import $r from"bn.js";var Xn=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var Jr=class extends Xn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new F(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new F(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:i,migrateFee:o,decimalA:s,decimalB:a}){return new F(i.sub(o).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let i=e.totalSellA.sub(e.realA),o=e.totalFundRaisingB.sub(e.realB);return new F(e.virtualB.add(e.realB.add(o)).toString()).div(e.virtualA.sub(e.realA.add(i)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){if(e.lte(n))throw Error("supply need gt total sell");let s=e.sub(n).sub(i);if(s.lte(new $r(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(o);if(a.lte(new $r(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(s),u=a.mul(n).div(s).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new $r(0))||m.lt(new $r(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let i=e.mul(n),o=t.add(e);return i.div(o)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let i=t.mul(e),o=n.sub(e);return Zn(i,o)}};import es from"bn.js";var ts=class extends Xn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new F(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){return new F(i.sub(o).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let i=e.totalSellA.sub(e.realA),o=e.totalFundRaisingB.sub(e.realB);return new F(e.virtualB.add(e.realB).add(o).toString()).div(e.virtualA.sub(e.realA).add(i).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){let s=e.sub(i);if(s.lte(new es(0)))throw Error("invalid input 1");let a=new es(2).mul(t).sub(o),u=t.mul(s).div(a);if(u.lt(new es(0))||t.lt(new es(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let i=t.mul(e);return Zn(i,n)}};import Nt from"bn.js";import Dl from"bn.js";var Xo=class{static _multipler(e){return new F(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new F(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let i=e.mul(this._multipler(n)).div(this._multipler(t));return new Dl(i.mul(this._Q64).toFixed(0))}};Xo._Q64=new F(new Dl(1).shln(64).toString());var ns=class extends Xn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new F(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new F(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualA.mul(e.realA).toString()).div(Xo._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){return new F(i.sub(o).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let i=e.totalSellA.sub(e.realA),o=e.totalFundRaisingB.sub(e.realB);return new F(e.virtualB.add(e.realB).add(o).toString()).div(e.virtualA.sub(e.realA).add(i).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){let s=e.sub(i);if(s.lte(new Nt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Nt(3)).sub(o),u=t.mul(new Nt(2)).mul(s).div(a),l=u.mul(u),m=t.mul(new Nt(2)).mul(et).div(l);if(!m.gt(new Nt(0)))throw Error("a need gt 0");if(!bo.gt(m))throw Error("a need lt u64 max");if(m.lt(new Nt(0))||u.lt(new Nt(0)))throw Error("invalid input 0");return{a:m,b:new Nt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),i=new Nt(2).mul(n).mul(et).div(e.virtualA);return new Nt(new F(i.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),i=n.mul(n);return Zn(e.virtualA.mul(i),new Nt(2).mul(et)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),i=n.mul(n),o=Zn(e.virtualA.mul(i),new Nt(2).mul(et));return e.realB.sub(o)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),i=new Nt(2).mul(n).mul(et).div(e.virtualA),o=new Nt(new F(i.toString()).sqrt().toFixed(0));return e.realA.sub(o)}};var Zt=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:i,totalSell:o,totalLockedAmount:s,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:i,totalSell:o,totalLockedAmount:s,migrateFee:a}),d=l.getPoolInitPriceByInit(q(_({},m),{decimalA:c,decimalB:u})),p=i.div(new jt(t-1)),f=new jt(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,k=f;for(let T=1;T<t;T++){let h=T!==t-1?p:i.sub(k),w=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:i,totalSellA:o},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(w.amountA.amount),k=k.add(w.amountB);let B=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:c,decimalB:u,curveType:e});y.push({price:B,totalSellSupply:new F(A.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:i}){return this.getCurve(i).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i,curveType:o}){return this.getCurve(o).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:i}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:i})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:i}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:i})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:i}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:i})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,decimals:o,config:s,migrateType:a}){if(Number(o)!==6)throw Error("decimals = 6");if(e.mul(s.maxLockRate).div(Kt).lt(i))throw Error("total lock amount gte max lock amount");if(e.lt(s.minSupplyA.mul(new jt(10**o))))throw Error("supply lt min supply");let u=e.mul(s.minSellRateA).div(Kt);if(n.lt(u))throw Error("invalid input");if(t.lt(s.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(i),m=e.mul(s.minMigrateRateA).div(Kt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(i),p=new jt(new F(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new jt(10).pow(new jt(o));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new jt(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:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(o),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,A;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),A=g.sub(T)}else b=f,g=t,A=m;let k=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:Ss(b,c,u),amountB:g,splitFee:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=Ks(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(o).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),A=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:A}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(o),m=Ss(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:i,shareFeeRate:s,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Zt.getCurve(o).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:Ks(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:i,creatorFeeRate:o}){let s=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:i,creatorFeeRate:o}),a=s.isZero()?new jt(0):e.mul(n).div(s),c=s.isZero()?new jt(0):e.mul(i).div(s),u=s.isZero()?new jt(0):e.mul(o).div(s),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return ji(e,t,Kt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Kt),i=Kt.sub(t);return n.add(i).sub(new jt(1)).div(i)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:i}){if(e.add(t).add(n).add(i).gt(new jt(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(i)}static getCurve(e){switch(e){case 0:return Jr;case 1:return ts;case 2:return ns}throw Error("find curve error")}};var yi={initPriceX64:new re("515752397214619"),supply:new re(1e15),totalSellA:new re(7931e11),totalFundRaisingB:new re(85e9),totalLockedAmount:new re("0"),cliffPeriod:new re("0"),unlockPeriod:new re("0"),decimals:6,virtualA:new re("1073471847374405"),virtualB:new re("30050573465"),realA:new re(0),realB:new re(0),protocolFee:new re(0),platformId:new ql("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new re(0),cliffPeriod:new re(0),unlockPeriod:new re(0),startTime:new re(0),totalAllocatedShare:new re(0)}},zn=new re(1e4),zo=class extends _e{constructor(e){super(e)}async createLaunchpad(N){var O=N,{programId:e=st,authProgramId:t,platformId:n=yi.platformId,mintA:i,decimals:o=6,mintBDecimals:s=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:A,minMintAAmount:k,slippage:T,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:B,token2022:x,transferFeeExtensionParams:K,creatorFeeOn:I=0,initV2:C}=O,R=De(O,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","initV2"]);var Ui,Gi,Mt,Qo,Ha,ja,Za,$a,Ja,eu,tu,nu;let L=this.createTxBuilder(g);t=t!=null?t:pn(e).publicKey,C=!!(C!=null?C:e.equals(vt.LAUNCHPAD_PROGRAM)),x=!!K,x&&(l="cpmm");let v=d;if(!v&&m){let an=await this.scope.connection.getAccountInfo(m);an&&(v=Gn.decode(an.data))}v||this.logAndCreateError("config not found");let Y=v.mintB,Q=v.curveType,{publicKey:pe}=Vi(e,i,Y),{publicKey:ke}=Va(e,pe,i),{publicKey:le}=Va(e,pe,Y),{publicKey:Pe}=An(i);this.logDebug(`create token: ${i.toBase58()}, mintB: ${Y.toBase58()}, decimals A:${o}/B:${s}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let Ae=(Ui=R==null?void 0:R.supply)!=null?Ui:yi.supply,ye=(Gi=R==null?void 0:R.totalSellA)!=null?Gi:yi.totalSellA,te=(Mt=R==null?void 0:R.totalFundRaisingB)!=null?Mt:yi.totalFundRaisingB,me=(Qo=R==null?void 0:R.totalLockedAmount)!=null?Qo:new re(0),We=p;if(!p){let an=await this.scope.connection.getAccountInfo(n);an||this.logAndCreateError("platform id not found:",n.toString()),We=Ei.decode(an.data).feeRate}let Sn=Zt.getCurve(v.curveType).getInitParam({supply:Ae,totalFundRaising:te,totalSell:ye,totalLockedAmount:me,migrateFee:v.migrateFee}),ct={epoch:new re(896),bump:254,status:0,mintDecimalsA:o,mintDecimalsB:s,supply:Ae,totalSellA:ye,mintA:new ql(i),mintB:Y,virtualA:Sn.a,virtualB:Sn.b,realA:yi.realA,realB:yi.realB,migrateFee:v.migrateFee,migrateType:l==="amm"?0:1,protocolFee:yi.protocolFee,platformFee:We,platformId:n,configId:m,vaultA:ke,vaultB:le,creator:this.scope.ownerPubKey,totalFundRaisingB:te,vestingSchedule:{totalLockedAmount:me,cliffPeriod:new re(0),unlockPeriod:new re(0),startTime:new re(0),totalAllocatedShare:new re(0)},mintProgramFlag:x?1:0,cpmmCreatorFeeOn:I},nt=Zt.getCurve(v.curveType),{c:Di}=nt.getInitParam({supply:ct.supply,totalFundRaising:ct.totalFundRaisingB,totalLockedAmount:me,totalSell:v.curveType===0?ct.totalSellA:new re(0),migrateFee:v.migrateFee});try{Zt.checkParam({supply:ct.supply,totalFundRaising:ct.totalFundRaisingB,totalSell:Di,totalLockedAmount:me,decimals:ct.mintDecimalsA,config:v,migrateType:l}),this.logDebug("check init params success")}catch(an){this.logAndCreateError(`check create mint params failed, ${an.message}`)}L.addInstruction({instructions:[x?Ml(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,pe,i,Y,ke,le,o,a,c,u||"https://",{type:Q===0?"ConstantCurve":Q===1?"FixedCurve":Q===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:Ae,totalFundRaisingB:te},me,(Ha=R==null?void 0:R.cliffPeriod)!=null?Ha:new re(0),(ja=R==null?void 0:R.unlockPeriod)!=null?ja:new re(0),I,K):C?Ol(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,pe,i,Y,ke,le,Pe,o,a,c,u||"https://",{type:Q===0?"ConstantCurve":Q===1?"FixedCurve":Q===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:Ae,totalFundRaisingB:te},me,(Za=R==null?void 0:R.cliffPeriod)!=null?Za:new re(0),($a=R==null?void 0:R.unlockPeriod)!=null?$a:new re(0),I):Nl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,pe,i,Y,ke,le,Pe,o,a,c,u||"https://",{type:Q===0?"ConstantCurve":Q===1?"FixedCurve":Q===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:Ae,totalFundRaisingB:te},me,(Ja=R==null?void 0:R.cliffPeriod)!=null?Ja:new re(0),(eu=R==null?void 0:R.unlockPeriod)!=null?eu:new re(0))]});let qi=x?await this.scope.connection.getEpochInfo():void 0,bi=K?{epoch:BigInt((qi==null?void 0:qi.epoch)||0),maximumFee:BigInt((tu=K==null?void 0:K.maxinumFee.toString())!=null?tu:0),transferFeeBasisPoints:(nu=K==null?void 0:K.transferFeeBasePoints)!=null?nu:0}:void 0,gi={amountA:{amount:new re(0),fee:void 0,expirationTime:void 0},amountB:new re(0),splitFee:{platformFee:new re(0),shareFee:new re(0),protocolFee:new re(0),creatorFee:new re(0)}},Pi;if(B!=null&&B.length&&L.addInstruction({signers:B}),!R.createOnly){let{builder:an,extInfo:Ul}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?fi:void 0,mintA:i,mintB:Y,poolInfo:ct,buyAmount:A,minMintAAmount:k,shareFeeRate:R.shareFeeRate,shareFeeReceiver:R.shareFeeReceiver,configInfo:v,platformFeeRate:We,slippage:T,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!bi,transferFeeConfigA:bi?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:bi,newerTransferFee:bi}:void 0,fromCreate:!0});L.addInstruction(_({},an.AllTxData)),gi=_({},Ul),Pi=(this.scope.cluster==="devnet"||f===1)&&R.shareFeeReceiver?[an.allInstructions[0]]:void 0}return L.addTipInstruction(b),f===0?L.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:gi,splitIns:Pi,address:q(_({},ct),{poolId:pe})}):L.sizeCheckBuild({computeBudgetConfig:y,swapInfo:gi,splitIns:Pi,address:q(_({},ct),{poolId:pe})})}async buyToken({programId:e=st,authProgramId:t,mintA:n,mintAProgram:i=ve,mintB:o=xn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new re(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:w=!1}){var Ae,ye,te;p.lte(new re(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let B=this.createTxBuilder(d),{publicKey:x}=Vi(e,n,o);t=t!=null?t:pn(e).publicKey;let K=h;if(!w)if(K)i=fi;else{let me=await this.scope.connection.getAccountInfo(n);if(me&&me.owner.equals(fi)){i=me.owner;let We=os(n,me,i);K=is(We)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,i),C=T?this.scope.account.getAssociatedTokenAccount(o,ve):null,R=o.equals(xn);if(B.addInstruction({instructions:[Ot(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,i),...T?[Ot(this.scope.ownerPubKey,C,this.scope.ownerPubKey,o,ve),Yf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:C,lamports:BigInt(p.toString())}),zf(C)]:[]]}),!T){let{account:me,instructionParams:We}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:R?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!R,notUseTokenAccount:R,associatedOnly:R?!1:A,checkCreateATAOwner:k});me&&(C=me),B.addInstruction(We||{})}C===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let N=s;if(!N){let me=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});me||this.logAndCreateError("cannot found pool:",x.toBase58()),N=sn.decode(me.data)}let O=a,L=await Oe(this.scope.connection,[O?void 0:N.configId,N.platformId].filter(Boolean).map(me=>({pubkey:me})));if(!O){let me=L.find(We=>We.pubkey.equals(N.configId));(!me||!me.accountInfo)&&this.logAndCreateError("config not found: ",N.configId.toBase58()),O=Gn.decode(me.accountInfo.data)}let v=L.find(me=>me.pubkey.equals(N.platformId));(!v||!v.accountInfo)&&this.logAndCreateError("platform info not found: ",N.configId.toBase58());let Y=Ei.decode(v.accountInfo.data);c=c||Y.feeRate;let Q=Zt.buyExactIn({poolInfo:N,amountB:p,protocolFeeRate:O.tradeFeeRate,platformFeeRate:c,curveType:O.curveType,shareFeeRate:b,creatorFeeRate:Y.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),pe=new F(Q.amountA.amount.toString()).sub((ye=(Ae=Q.amountA.fee)==null?void 0:Ae.toString())!=null?ye:0),ke=y?new F(zn.sub(y).toNumber()/zn.toNumber()).clampedTo(0,1):new F(1),le=f!=null?f:y?new re(pe.mul(ke).toFixed(0)):Q.amountA.amount.sub((te=Q.amountA.fee)!=null?te:new re(0));Q.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${Q.amountA.toString()}, input ${o.toBase58()} amount: ${Q.amountB.toString()}`);let Pe=g?J(g,o,ve).publicKey:void 0;return Pe&&B.addInstruction({instructions:[Ot(this.scope.ownerPubKey,Pe,g,o)]}),B.addInstruction({instructions:[vl(e,this.scope.ownerPubKey,t,N.configId,N.platformId,x,I,C,N.vaultA,N.vaultB,n,o,i,ve,di(e,N.platformId,o).publicKey,pi(e,N.creator,o).publicKey,Q.amountB.lt(p)?Q.amountB:p,le,b,Pe)]}),B.addCustomComputeBudget(l),B.addTipInstruction(m),B.versionBuild({txVersion:u,extInfo:q(_({},Q),{decimalOutAmount:pe,minDecimalOutAmount:new F(le.toString())})})}async buyTokenExactOut({programId:e=st,authProgramId:t,mintA:n,mintAProgram:i=ve,mintB:o=xn,poolInfo:s,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new re(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new re(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let w=this.createTxBuilder(p),{publicKey:B}=Vi(e,n,o);t=t!=null?t:pn(e).publicKey;let x=s;if(!x){let ye=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});ye||this.logAndCreateError("cannot found pool:",B.toBase58()),x=sn.decode(ye.data)}let K=a,I=await Oe(this.scope.connection,[K?void 0:x.configId,x.platformId].filter(Boolean).map(ye=>({pubkey:ye})));if(!K){let ye=I.find(te=>te.pubkey.equals(x.configId));(!ye||!ye.accountInfo)&&this.logAndCreateError("config not found: ",x.configId.toBase58()),K=Gn.decode(ye.accountInfo.data)}let C=I.find(ye=>ye.pubkey.equals(x.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",x.configId.toBase58());let R=Ei.decode(C.accountInfo.data);u=u||R.feeRate;let N=c;if(!h)if(N)i=fi;else{let ye=await this.scope.connection.getAccountInfo(n);if(ye&&ye.owner.equals(fi)){i=ye.owner;let te=os(n,ye,i);N=is(te)||void 0}}let O=Zt.buyExactOut({poolInfo:x,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:R.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),L=new F(O.amountB.toString()),v=b?new F(zn.add(b).toNumber()/zn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new F(1),Y=(f!=null?f:b)?new re(L.mul(v).toFixed(0)):O.amountB,Q=this.scope.account.getAssociatedTokenAccount(n,i),pe=null,ke=o.equals(xn);w.addInstruction({instructions:[Ot(this.scope.ownerPubKey,Q,this.scope.ownerPubKey,n,i)]});let{account:le,instructionParams:Pe}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:ke?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!ke,notUseTokenAccount:ke,associatedOnly:ke?!1:k,checkCreateATAOwner:T});le&&(pe=le),w.addInstruction(Pe||{}),pe===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Ae=A?J(A,o,ve).publicKey:void 0;return Ae&&w.addInstruction({instructions:[Ot(this.scope.ownerPubKey,Ae,A,o)]}),w.addInstruction({instructions:[Fl(e,this.scope.ownerPubKey,t,x.configId,x.platformId,B,Q,pe,x.vaultA,x.vaultB,n,o,i,ve,di(e,x.platformId,o).publicKey,pi(e,x.creator,o).publicKey,y,Y,g,Ae)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:Y,outAmount:y}})}async sellToken({programId:e=st,authProgramId:t,mintAProgram:n=ve,mintA:i,mintB:o=xn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new re(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:pn(e).publicKey;let h=this.createTxBuilder(d);p.lte(new re(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=Vi(e,i,o),B;if(!T){let te=await this.scope.connection.getAccountInfo(i);if(te&&te.owner.equals(fi)){n=te.owner;let me=os(i,te,n);B=is(me)||void 0}}let x=null,K=null,I=o.equals(xn),{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(x=C),h.addInstruction(R||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let te=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",w.toBase58()),L=sn.decode(te.data)}let v=a,Y=await Oe(this.scope.connection,[v?void 0:L.configId,L.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!v){let te=Y.find(me=>me.pubkey.equals(L.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),v=Gn.decode(te.accountInfo.data)}let Q=Y.find(te=>te.pubkey.equals(L.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let pe=Ei.decode(Q.accountInfo.data);c=c||pe.feeRate;let ke=Zt.sellExactIn({poolInfo:L,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),le=new F(ke.amountB.toString()),Pe=y?new F(zn.sub(y).toNumber()/zn.toNumber()).clampedTo(0,1):new F(1),Ae=f!=null?f:y?new re(le.mul(Pe).toFixed(0)):ke.amountB;Ae.lte(new re(0))&&this.logAndCreateError(`out ${o.toBase58()} amount should be gt 0`);let ye=g?J(g,o,ve).publicKey:void 0;return ye&&h.addInstruction({instructions:[Ot(this.scope.ownerPubKey,ye,g,o)]}),h.addInstruction({instructions:[_l(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,x,K,L.vaultA,L.vaultB,i,o,n,ve,di(e,L.platformId,o).publicKey,pi(e,L.creator,o).publicKey,ke.amountA.amount.lt(p)?ke.amountA.amount:p,Ae,b,ye)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:Ae}})}async sellTokenExactOut({programId:e=st,authProgramId:t,mintAProgram:n=ve,mintA:i,mintB:o=xn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new re(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:pn(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new re(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=Vi(e,i,o),B;if(!T){let te=await this.scope.connection.getAccountInfo(i);if(te&&te.owner.equals(fi)){n=te.owner;let me=os(i,te,n);B=is(me)||void 0}}let x=null,K=null,I=o.equals(xn),{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(x=C),h.addInstruction(R||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let te=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",w.toBase58()),L=sn.decode(te.data)}let v=a,Y=await Oe(this.scope.connection,[v?void 0:L.configId,L.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!v){let te=Y.find(me=>me.pubkey.equals(L.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),v=Gn.decode(te.accountInfo.data)}let Q=Y.find(te=>te.pubkey.equals(L.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let pe=Ei.decode(Q.accountInfo.data);c=c||pe.feeRate;let ke=Zt.sellExactOut({poolInfo:L,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),le=new F(ke.amountA.amount.toString()),Pe=y?new F(zn.add(y).toNumber()/zn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new F(1),Ae=(f!=null?f:y)?new re(le.mul(Pe).toFixed(0)):ke.amountA.amount,ye=g?J(g,o,ve).publicKey:void 0;return ye&&h.addInstruction({instructions:[Ot(this.scope.ownerPubKey,ye,g,o)]}),h.addInstruction({instructions:[Vl(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,x,K,L.vaultA,L.vaultB,i,o,n,ve,di(e,L.platformId,o).publicKey,pi(e,L.creator,o).publicKey,p,Ae,b,ye)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:Ae}})}async createPlatformConfig({programId:e=st,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:i,cpConfigId:o,migrateCpLockNftScale:s,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:A}=Ea(e,t);return g.addInstruction({instructions:[El(e,t,n,i,A,o,a,s,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:A}})}async updatePlatformConfig({programId:e=st,platformAdmin:t,platformId:n,updateInfo:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Ea(e,t).publicKey;return u.addInstruction({instructions:[Wl(e,t,l,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimPlatformFee({programId:e=st,authProgramId:t,platformId:n,poolId:i,platformClaimFeeWallet:o,mintB:s,vaultB:a,mintBProgram:c=ve,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:pn(e).publicKey;let f=s,y=a;if(!f){let A=await this.scope.connection.getAccountInfo(i,{commitment:"processed"});A||this.logAndCreateError("cannot found pool:",i.toBase58());let k=sn.decode(A.data),T=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Gn.decode(T.data).mintB,y=y!=null?y:k.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=J(this.scope.ownerPubKey,f,ve).publicKey;return p.addInstruction({instructions:[Ot(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Ga(e,o,t,i,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=st,authProgramId:t,platformId:n,platformClaimFeeWallet:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:pn(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:sn.span},{memcmp:{offset:sn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=sn.decode(m.account.data);if(d.platformFee.lte(new re(0)))return;let p=J(this.scope.ownerPubKey,d.mintB,ve).publicKey;u.addInstruction({instructions:[Ot(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Ga(e,i,t,m.pubkey,n,d.vaultB,p,d.mintB,ve)]})}),u.addTipInstruction(a),o===0?u.sizeCheckBuildV0({computeBudgetConfig:s}):u.sizeCheckBuild({computeBudgetConfig:s})}async createVesting({programId:e=st,poolId:t,beneficiary:n,shareAmount:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});i.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=Uo(e,t,n).publicKey;return u.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,n,t,m,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async createMultipleVesting({programId:e=st,poolId:t,beneficiaryList:n,txVersion:i,computeBudgetConfig:o,feePayer:s}){let a=this.createTxBuilder(s);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=Uo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),i===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}async claimVesting({programId:e=st,poolId:t,poolInfo:n,vestingRecord:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=pn(e).publicKey,m=i||Uo(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=sn.decode(f.data)}let p=J(this.scope.ownerPubKey,d.mintA,ve).publicKey;return u.addInstruction({instructions:[Ot(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[qa(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,ve)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimMultiVesting({programId:e=st,poolIdList:t,poolsInfo:n={},vestingRecords:i={},txVersion:o,computeBudgetConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=pn(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=i[p]||Uo(e,d,this.scope.ownerPubKey).publicKey,b=J(this.scope.ownerPubKey,f.mintA,ve).publicKey;c.addInstruction({instructions:[Ot(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[qa(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,ve)]})}),o===0?c.sizeCheckBuildV0({computeBudgetConfig:s}):c.sizeCheckBuild({computeBudgetConfig:s})}async claimVaultPlatformFee({programId:e=st,platformId:t,mintB:n,mintBProgram:i=ve,claimFeeWallet:o,txVersion:s,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=di(e,t,n).publicKey,d=Wa(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,i);return l.addInstruction({instructions:[Ot(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,i),Xa(e,t,o!=null?o:this.scope.ownerPubKey,d,m,p,n,i)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:s})}async claimMultipleVaultPlatformFee({programId:e=st,platformList:t,unwrapSol:n=!0,txVersion:i,computeBudgetConfig:o,feePayer:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(s),l={};return t.forEach(async m=>{var b,g;let d=Wa(e).publicKey,p=di(e,m.id,m.mintB).publicKey,f=m.mintB.equals(xn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});A&&(y=A),u.addInstruction(k||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Xa(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:ve)]})}),i===0?u.sizeCheckBuildV0({computeBudgetConfig:o}):u.sizeCheckBuild({computeBudgetConfig:o})}async claimCreatorFee({programId:e=st,mintB:t,mintBProgram:n=ve,txVersion:i,computeBudgetConfig:o,txTipConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=pi(e,this.scope.ownerPubKey,t).publicKey,l=Da(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Ot(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),za(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(o),c.addTipInstruction(s),c.versionBuild({txVersion:i})}async claimMultipleCreatorFee({programId:e=st,mintBList:t,txVersion:n,computeBudgetConfig:i,feePayer:o}){let s=this.createTxBuilder(o);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:ve,l=pi(e,this.scope.ownerPubKey,c).publicKey,m=Da(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);s.addInstruction({instructions:[Ot(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),za(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?s.sizeCheckBuildV0({computeBudgetConfig:i}):s.sizeCheckBuild({computeBudgetConfig:i})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Oe(this.scope.connection,e.map(c=>({pubkey:c})),t),i={},o=[];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=sn.decode(u.accountInfo.data);i[e[c].toBase58()]=q(_({},l),{poolId:u.accountInfo.owner}),o.push(l.configId)}let s=await Oe(this.scope.connection,o.map(c=>({pubkey:c})),t),a={};for(let c=0;c<o.length;c++){let u=s[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+o[c].toBase58());let l=Gn.decode(u.accountInfo.data);a[o[c].toBase58()]=q(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(i).reduce((c,u)=>q(_({},c),{[u]:q(_({},i[u]),{configInfo:a[i[u].configId.toBase58()]})}),{})}}};import{PublicKey as Qf}from"@solana/web3.js";import{MintLayout as Hf,TOKEN_2022_PROGRAM_ID as Ya,TOKEN_PROGRAM_ID as Qa}from"@solana/spl-token";var Yo=class extends _e{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:i="strict"}=t||{},{mintList:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(s),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Nn.address,Nn),this._mintGroup.official.add(Nn.address),o.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ya.toBase58():Qa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ya.toBase58():Qa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ya.toBase58():Qa.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(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Nn;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(_({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Qf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Hf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.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 rs=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new tn(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=o,this._apiCacheTime=c||5*60*1e3,this.logger=we("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new so({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ro({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Yo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new No({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Eo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Ht({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Oi({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new _i({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new zo({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=jf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,c=new wr({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),u=new rs(q(_({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(kr);return this._owner.publicKey}setOwner(e){return this._owner=e?new tn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(zu);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(i=>q(_({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.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{rs as Raydium};
|
|
1
|
+
var Gl=Object.defineProperty,Xl=Object.defineProperties;var zl=Object.getOwnPropertyDescriptors;var Ho=Object.getOwnPropertySymbols;var ou=Object.prototype.hasOwnProperty,ru=Object.prototype.propertyIsEnumerable;var iu=(r,e,t)=>e in r?Gl(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,_=(r,e)=>{for(var t in e||(e={}))ou.call(e,t)&&iu(r,t,e[t]);if(Ho)for(var t of Ho(e))ru.call(e,t)&&iu(r,t,e[t]);return r},q=(r,e)=>Xl(r,zl(e));var De=(r,e)=>{var t={};for(var n in r)ou.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Ho)for(var n of Ho(r))e.indexOf(n)<0&&ru.call(r,n)&&(t[n]=r[n]);return t};import{merge as jf}from"lodash";import Xu from"axios";import{PublicKey as uu}from"@solana/web3.js";import{get as su,set as Yl}from"lodash";var ss=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}},au={},Ql={};function we(r){let e=su(au,r);if(!e){let t=su(Ql,r);e=new ss({name:r,logLevel:t}),Yl(au,r,e)}return e}import{MINT_SIZE as Hl,TOKEN_PROGRAM_ID as jl,getTransferFeeConfig as Zl,unpackMint as $l}from"@solana/spl-token";var as=we("Raydium_accountInfo_util");async function $t(r,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:o=100}=_({batchRequest:!1},t),s=us(e,o),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=us(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&as.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"&&as.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new uu(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&as.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Oe(r,e,t){let n=await $t(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>q(_({},i),{accountInfo:n[o]}))}async function Ai({connection:r,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await Oe(r,e.map(c=>({pubkey:ft(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Hl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=$l(c.pubkey,c.accountInfo,(o=c.accountInfo)==null?void 0:o.owner);i[c.pubkey.toString()]=q(_({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||jl,feeConfig:(a=Zl(u))!=null?a:void 0})}return i[uu.default.toBase58()]=i[Z.toBase58()],i}import cn from"bn.js";var wi=9e15,Ln=1e9,cs="0123456789abcdef",Zo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",$o="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ls={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wi,maxE:wi,crypto:!1},du,yn,fe=!0,er="[DecimalError] ",Rn=er+"Invalid argument: ",pu=er+"Precision limit exceeded",fu=er+"crypto unavailable",yu="[object Decimal]",yt=Math.floor,Je=Math.pow,Jl=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,em=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,tm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,bu=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,en=1e7,se=7,nm=9007199254740991,im=Zo.length-1,ms=$o.length-1,G={toStringTag:yu};G.absoluteValue=G.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),ne(r)};G.ceil=function(){return ne(new this.constructor(this),this.e+1,2)};G.clampedTo=G.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(Rn+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};G.comparedTo=G.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,c=o.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(o.e!==r.e)return o.e>r.e^c<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};G.cosine=G.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+se,n.rounding=1,t=om(n,ku(n,t)),n.precision=r,n.rounding=e,ne(yn==2||yn==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};G.cubeRoot=G.cbrt=function(){var r,e,t,n,i,o,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(fe=!1,o=l.s*Je(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=lt(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Je(t,1/3),r=yt((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Ne(u.plus(l).times(a),u.plus(c),s+2,1),lt(a.d).slice(0,s)===(t=lt(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(ne(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(ne(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return fe=!0,ne(n,r,m.rounding,e)};G.decimalPlaces=G.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-yt(this.e/se))*se,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};G.dividedBy=G.div=function(r){return Ne(this,new this.constructor(r))};G.dividedToIntegerBy=G.divToInt=function(r){var e=this,t=e.constructor;return ne(Ne(e,new t(r),0,1,1),t.precision,t.rounding)};G.equals=G.eq=function(r){return this.cmp(r)===0};G.floor=function(){return ne(new this.constructor(this),this.e+1,3)};G.greaterThan=G.gt=function(r){return this.cmp(r)>0};G.greaterThanOrEqualTo=G.gte=function(r){var e=this.cmp(r);return e==1||e===0};G.hyperbolicCosine=G.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/nr(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=ki(s,1,o.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=o.times(o),o=a.minus(c.times(l.minus(c.times(l))));return ne(o,s.precision=t,s.rounding=n,!0)};G.hyperbolicSine=G.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=ki(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/nr(5,r)),i=ki(o,2,i,i,!0);for(var s,a=new o(5),c=new o(16),u=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return o.precision=e,o.rounding=t,ne(i,e,t,!0)};G.hyperbolicTangent=G.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,Ne(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?Jt(t,i,o):new t(0):new t(NaN):e.isZero()?Jt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=Jt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};G.inverseHyperbolicCosine=G.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,fe=!1,t=t.times(t).minus(1).sqrt().plus(t),fe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};G.inverseHyperbolicSine=G.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,fe=!1,t=t.times(t).plus(1).sqrt().plus(t),fe=!0,n.precision=r,n.rounding=e,t.ln())};G.inverseHyperbolicTangent=G.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?ne(new o(i),r,e,!0):(o.precision=t=n-i.e,i=Ne(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};G.inverseSine=G.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=Jt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};G.inverseTangent=G.atan=function(){var r,e,t,n,i,o,s,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<=ms)return s=Jt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=ms)return s=Jt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/se+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(fe=!1,e=Math.ceil(a/se),n=1,c=u.times(u),s=new l(u),i=u;r!==-1;)if(i=i.times(c),o=s.minus(i.div(n+=2)),i=i.times(c),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),fe=!0,ne(s,l.precision=m,l.rounding=d,!0)};G.isFinite=function(){return!!this.d};G.isInteger=G.isInt=function(){return!!this.d&&yt(this.e/se)>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(r){return this.cmp(r)<0};G.lessThanOrEqualTo=G.lte=function(r){return this.cmp(r)<1};G.logarithm=G.log=function(r){var e,t,n,i,o,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.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)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(fe=!1,a=m+p,s=Cn(u,a),n=e?Jo(l,a+10):Cn(r,a),c=Ne(s,n,a,1),Xi(c.d,i=m,d))do if(a+=10,s=Cn(u,a),n=e?Jo(l,a+10):Cn(r,a),c=Ne(s,n,a,1),!o){+lt(c.d).slice(i+1,i+15)+1==1e14&&(c=ne(c,m+1,0));break}while(Xi(c.d,i+=10,d));return fe=!0,ne(c,m,d)};G.minus=G.sub=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.constructor;if(r=new f(r),!p.d||!r.d)return!p.s||!r.s?r=new f(NaN):p.d?r.s=-r.s:r=new f(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new f(p);else return new f(c===3?-0:0);return fe?ne(r,a,c):r}if(t=yt(r.e/se),l=yt(p.e/se),u=u.slice(),o=l-t,o){for(m=o<0,m?(e=u,o=-o,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/se),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}o=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>o;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=en-1;--u[i],u[n]+=en}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=tr(u,t),fe?ne(r,a,c):r):new f(c===3?-0:0)};G.modulo=G.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?ne(new n(t),n.precision,n.rounding):(fe=!1,n.modulo==9?(e=Ne(t,r.abs(),0,3,1),e.s*=r.s):e=Ne(t,r,0,n.modulo,1),e=e.times(r),fe=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return ds(this)};G.naturalLogarithm=G.ln=function(){return Cn(this)};G.negated=G.neg=function(){var r=new this.constructor(this);return r.s=-r.s,ne(r)};G.plus=G.add=function(r){var e,t,n,i,o,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),fe?ne(r,a,c):r;if(o=yt(m.e/se),n=yt(r.e/se),u=u.slice(),i=o-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=o,s=u.length),o=Math.ceil(a/se),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/en|0,u[i]%=en;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=tr(u,n),fe?ne(r,a,c):r};G.precision=G.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Rn+r);return t.d?(e=gu(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};G.round=function(){var r=this,e=r.constructor;return ne(new e(r),r.e+1,e.rounding)};G.sine=G.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+se,n.rounding=1,t=sm(n,ku(n,t)),n.precision=r,n.rounding=e,ne(yn>2?t.neg():t,r,e,!0)):new n(NaN)};G.squareRoot=G.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(fe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=lt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=yt((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(o=n,n=o.plus(Ne(s,o,t+2,1)).times(.5),lt(o.d).slice(0,t)===(e=lt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(ne(o,c+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(ne(n,c+1,1),r=!n.times(n).eq(s));break}return fe=!0,ne(n,c,l.rounding,r)};G.tangent=G.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=Ne(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,ne(yn==2||yn==4?t.neg():t,r,e,!0)):new n(NaN)};G.times=G.mul=function(r){var e,t,n,i,o,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=yt(l.e/se)+yt(r.e/se),c=d.length,u=p.length,c<u&&(o=d,d=p,p=o,s=c,c=u,u=s),o=[],s=c+u,n=s;n--;)o.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=o[i]+p[n]*d[i-n-1]+e,o[i--]=a%en|0,e=a/en|0;o[i]=(o[i]+e)%en|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=tr(o,t),fe?ne(r,m.precision,m.rounding):r};G.toBinary=function(r,e){return fs(this,2,r,e)};G.toDecimalPlaces=G.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(Bt(r,0,Ln),e===void 0?e=n.rounding:Bt(e,0,8),ne(t,r+t.e+1,e))};G.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=un(n,!0):(Bt(r,0,Ln),e===void 0?e=i.rounding:Bt(e,0,8),n=ne(new i(n),r+1,e),t=un(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=un(i):(Bt(r,0,Ln),e===void 0?e=o.rounding:Bt(e,0,8),n=ne(new o(i),r+i.e+1,e),t=un(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};G.toFraction=function(r){var e,t,n,i,o,s,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),o=e.e=gu(f)-p.e-1,s=o%se,e.d[0]=Je(10,s<0?se+s:s),r==null)r=o>0?e:u;else{if(a=new y(r),!a.isInt()||a.lt(u))throw Error(Rn+a);r=a.gt(e)?o>0?e:u:a}for(fe=!1,a=new y(lt(f)),l=y.precision,y.precision=o=f.length*se*2;m=Ne(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=Ne(r.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=Ne(u,n,o,1).minus(p).abs().cmp(Ne(c,t,o,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,fe=!0,d};G.toHexadecimal=G.toHex=function(r,e){return fs(this,16,r,e)};G.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:Bt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(fe=!1,t=Ne(t,r,0,e,1).times(r),fe=!0,ne(t)):(r.s=t.s,t=r),t};G.toNumber=function(){return+this};G.toOctal=function(r,e){return fs(this,8,r,e)};G.toPower=G.pow=function(r){var e,t,n,i,o,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Je(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,o=c.rounding,r.eq(1))return ne(a,n,o);if(e=yt(r.e/se),e>=r.d.length-1&&(t=u<0?-u:u)<=nm)return i=Pu(c,a,t,n),r.s<0?new c(1).div(i):ne(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Je(+a,u),e=t==0||!isFinite(t)?yt(u*(Math.log("0."+lt(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(fe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=ds(r.times(Cn(a,n+t)),n),i.d&&(i=ne(i,n+5,1),Xi(i.d,n,o)&&(e=n+10,i=ne(ds(r.times(Cn(a,e+t)),e),e+5,1),+lt(i.d).slice(n+1,n+15)+1==1e14&&(i=ne(i,n+1,0)))),i.s=s,fe=!0,c.rounding=o,ne(i,n,o))};G.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=un(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(Bt(r,1,Ln),e===void 0?e=i.rounding:Bt(e,0,8),n=ne(new i(n),r,e),t=un(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toSignificantDigits=G.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(Bt(r,1,Ln),e===void 0?e=n.rounding:Bt(e,0,8)),ne(new n(t),r,e)};G.toString=function(){var r=this,e=r.constructor,t=un(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};G.truncated=G.trunc=function(){return ne(new this.constructor(this),this.e+1,1)};G.valueOf=G.toJSON=function(){var r=this,e=r.constructor,t=un(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function lt(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=se-n.length,t&&(o+=Kn(t)),o+=n;s=r[e],n=s+"",t=se-n.length,t&&(o+=Kn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function Bt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Rn+r)}function Xi(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=se,i=0):(i=Math.ceil((e+1)/se),e%=se),o=Je(10,se-e),a=r[i]%o|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Je(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Je(10,e-3)-1,s}function jo(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=cs.indexOf(r.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function om(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/nr(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=ki(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Ne=function(){function r(n,i,o){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,c;if(o!=s)c=o>s?1:-1;else for(a=c=0;a<o;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,c){var u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K,I,C,R,N=n.constructor,O=n.s==i.s?1:-1,L=n.d,v=i.d;if(!L||!L[0]||!v||!v[0])return new N(!n.s||!i.s||(L?v&&L[0]==v[0]:!v)?NaN:L&&L[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-i.e):(c=en,p=se,l=yt(n.e/p)-yt(i.e/p)),C=v.length,K=L.length,g=new N(O),A=g.d=[],m=0;v[m]==(L[m]||0);m++);if(v[m]>(L[m]||0)&&l--,o==null?(w=o=N.precision,s=N.rounding):a?w=o+(n.e-i.e)+1:w=o,w<0)A.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,v=v[0],w++;(m<K||d)&&w--;m++)B=d*c+(L[m]||0),A[m]=B/v|0,d=B%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=r(v,d,c),L=r(L,d,c),C=v.length,K=L.length),x=C,k=L.slice(0,C),T=k.length;T<C;)k[T++]=0;R=v.slice(),R.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,k,C,T),u<0?(h=k[0],C!=T&&(h=h*c+(k[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=r(v,d,c),b=y.length,T=k.length,u=e(y,k,b,T),u==1&&(d--,t(y,C<b?R:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(k,y,T,c),u==-1&&(T=k.length,u=e(v,k,C,T),u<1&&(d++,t(k,C<T?R:v,T,c))),T=k.length):u===0&&(d++,k=[0]),A[m++]=d,u&&k[0]?k[T++]=L[x]||0:(k=[L[x]],T=1);while((x++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,du=f;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,ne(g,a?o+g.e+1:o,s,f)}return g}}();function ne(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=se,s=e,l=m[d=0],c=l/Je(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/se),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,o%=se,s=o-se+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=se,s=o-se+i,c=s<0?0:l/Je(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Je(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(o>0?s>0?l/Je(10,i-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Je(10,(se-e%se)%se),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Je(10,se-o),m[d]=s>0?(l/Je(10,i-s)%Je(10,s)|0)*a:0),u)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==en&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=en)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return fe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function un(r,e,t){if(!r.isFinite())return wu(r);var n,i=r.e,o=lt(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Kn(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+Kn(-i-1)+o,t&&(n=t-s)>0&&(o+=Kn(n))):i>=s?(o+=Kn(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+Kn(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=Kn(n))),o}function tr(r,e){var t=r[0];for(e*=se;t>=10;t/=10)e++;return e}function Jo(r,e,t){if(e>im)throw fe=!0,t&&(r.precision=t),Error(pu);return ne(new r(Zo),e,1,!0)}function Jt(r,e,t){if(e>ms)throw Error(pu);return ne(new r($o),e,t,!0)}function gu(r){var e=r.length-1,t=e*se+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Kn(r){for(var e="";r--;)e+="0";return e}function Pu(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/se+4);for(fe=!1;;){if(t%2&&(o=o.times(e),lu(o.d,s)&&(i=!0)),t=yt(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),lu(e.d,s)}return fe=!0,o}function cu(r){return r.d[r.d.length-1]&1}function Au(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function ds(r,e){var t,n,i,o,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,f=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(fe=!1,c=f):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Je(2,m))/Math.LN10*2+5|0,c+=n,t=o=s=new d(1),d.precision=c;;){if(o=ne(o.times(r),c,1),t=t.times(++l),a=s.plus(Ne(o,t,c,1)),lt(a.d).slice(0,c)===lt(s.d).slice(0,c)){for(i=m;i--;)s=ne(s.times(s),c,1);if(e==null)if(u<3&&Xi(s.d,c-n,p,u))d.precision=c+=10,t=o=a=new d(1),l=0,u++;else return ne(s,d.precision=f,p,fe=!0);else return d.precision=f,s}s=a}}function Cn(r,e){var t,n,i,o,s,a,c,u,l,m,d,p=1,f=10,y=r,b=y.d,g=y.constructor,A=g.rounding,k=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(fe=!1,l=k):l=e,g.precision=l+=f,t=lt(b),n=t.charAt(0),Math.abs(o=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(r),t=lt(y.d),n=t.charAt(0),p++;o=y.e,n>1?(y=new g("0."+t),o++):y=new g(n+"."+t.slice(1))}else return u=Jo(g,l+2,k).times(o+""),y=Cn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?ne(y,k,A,fe=!0):y;for(m=y,c=s=y=Ne(y.minus(1),y.plus(1),l,1),d=ne(y.times(y),l,1),i=3;;){if(s=ne(s.times(d),l,1),u=c.plus(Ne(s,new g(i),l,1)),lt(u.d).slice(0,l)===lt(c.d).slice(0,l))if(c=c.times(2),o!==0&&(c=c.plus(Jo(g,l+2,k).times(o+""))),c=Ne(c,new g(p),l,1),e==null)if(Xi(c.d,l-f,A,a))g.precision=l+=f,u=s=y=Ne(m.minus(1),m.plus(1),l,1),d=ne(y.times(y),l,1),i=a=1;else return ne(c,g.precision=k,A,fe=!0);else return g.precision=k,c;c=u,i+=2}}function wu(r){return String(r.s*r.s/0)}function ps(r,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%se,t<0&&(n+=se),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=se;n<i;)r.d.push(+e.slice(n,n+=se));e=e.slice(n),n=se-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),fe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function rm(r,e){var t,n,i,o,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),bu.test(e))return ps(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(em.test(e))t=16,e=e.toLowerCase();else if(Jl.test(e))t=2;else if(tm.test(e))t=8;else throw Error(Rn+e);for(o=e.search(/p/i),o>0?(c=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=Pu(n,new n(t),o,o*2)),u=jo(e,t,en),l=u.length-1,o=l;u[o]===0;--o)u.pop();return o<0?new n(r.s*0):(r.e=tr(u,l),r.d=u,fe=!1,s&&(r=Ne(r,i,a*4)),c&&(r=r.times(Math.abs(c)<54?Je(2,c):zi.pow(2,c))),fe=!0,r)}function sm(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:ki(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/nr(5,t)),e=ki(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function ki(r,e,t,n,i){var o,s,a,c,u=1,l=r.precision,m=Math.ceil(l/se);for(fe=!1,c=t.times(t),a=new r(n);;){if(s=Ne(a.times(c),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Ne(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,u++}return fe=!0,s.d.length=m+1,s}function nr(r,e){for(var t=r;--e;)t*=r;return t}function ku(r,e){var t,n=e.s<0,i=Jt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return yn=n?4:1,e;if(t=e.divToInt(i),t.isZero())yn=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return yn=cu(t)?n?2:3:n?4:1,e;yn=cu(t)?n?1:4:n?3:2}return e.minus(i).abs()}function fs(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor,f=t!==void 0;if(f?(Bt(t,1,Ln),n===void 0?n=p.rounding:Bt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=wu(r);else{for(l=un(r),s=l.indexOf("."),f?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=jo(un(d),10,i),d.e=d.d.length),m=jo(l,10,i),o=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(s<0?o--:(r=new p(r),r.d=m,r.e=o,r=Ne(r,d,t,n,0,i),m=r.d,o=r.e,u=du),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=cs.charAt(m[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=jo(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=cs.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>c)for(o-=c;o--;)l+="0";else o<c&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function lu(r,e){if(r.length>e)return r.length=e,!0}function am(r){return new this(r).abs()}function um(r){return new this(r).acos()}function cm(r){return new this(r).acosh()}function lm(r,e){return new this(r).plus(e)}function mm(r){return new this(r).asin()}function dm(r){return new this(r).asinh()}function pm(r){return new this(r).atan()}function fm(r){return new this(r).atanh()}function ym(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=Jt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?Jt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=Jt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(Ne(r,e,o,1)),e=Jt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Ne(r,e,o,1)),t}function bm(r){return new this(r).cbrt()}function gm(r){return ne(r=new this(r),r.e+1,2)}function Pm(r,e,t){return new this(r).clamp(e,t)}function Am(r){if(!r||typeof r!="object")throw Error(er+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Ln,"rounding",0,8,"toExpNeg",-wi,0,"toExpPos",0,wi,"maxE",0,wi,"minE",-wi,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=ls[t]),(n=r[t])!==void 0)if(yt(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Rn+t+": "+n);if(t="crypto",i&&(this[t]=ls[t]),(n=r[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(fu);else this[t]=!1;else throw Error(Rn+t+": "+n);return this}function wm(r){return new this(r).cos()}function km(r){return new this(r).cosh()}function hu(r){var e,t,n;function i(o){var s,a,c,u=this;if(!(u instanceof i))return new i(o);if(u.constructor=i,mu(o)){u.s=o.s,fe?!o.d||o.e>i.maxE?(u.e=NaN,u.d=null):o.e<i.minE?(u.e=0,u.d=[0]):(u.e=o.e,u.d=o.d.slice()):(u.e=o.e,u.d=o.d?o.d.slice():o.d);return}if(c=typeof o,c==="number"){if(o===0){u.s=1/o<0?-1:1,u.e=0,u.d=[0];return}if(o<0?(o=-o,u.s=-1):u.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;fe?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[o]):(u.e=s,u.d=[o]);return}else if(o*0!==0){o||(u.s=NaN),u.e=NaN,u.d=null;return}return ps(u,o.toString())}else if(c!=="string")throw Error(Rn+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),bu.test(o)?ps(u,o):rm(u,o)}if(i.prototype=G,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Am,i.clone=hu,i.isDecimal=mu,i.abs=am,i.acos=um,i.acosh=cm,i.add=lm,i.asin=mm,i.asinh=dm,i.atan=pm,i.atanh=fm,i.atan2=ym,i.cbrt=bm,i.ceil=gm,i.clamp=Pm,i.cos=wm,i.cosh=km,i.div=hm,i.exp=Tm,i.floor=Im,i.hypot=Bm,i.ln=xm,i.log=Sm,i.log10=Cm,i.log2=Km,i.max=Rm,i.min=Lm,i.mod=Nm,i.mul=Om,i.pow=Mm,i.random=vm,i.round=Fm,i.sign=_m,i.sin=Vm,i.sinh=Em,i.sqrt=Wm,i.sub=Dm,i.sum=qm,i.tan=Um,i.tanh=Gm,i.trunc=Xm,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return i.config(r),i}function hm(r,e){return new this(r).div(e)}function Tm(r){return new this(r).exp()}function Im(r){return ne(r=new this(r),r.e+1,3)}function Bm(){var r,e,t=new this(0);for(fe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return fe=!0,new this(1/0);t=e}return fe=!0,t.sqrt()}function mu(r){return r instanceof zi||r&&r.toStringTag===yu||!1}function xm(r){return new this(r).ln()}function Sm(r,e){return new this(r).log(e)}function Km(r){return new this(r).log(2)}function Cm(r){return new this(r).log(10)}function Rm(){return Au(this,arguments,"lt")}function Lm(){return Au(this,arguments,"gt")}function Nm(r,e){return new this(r).mod(e)}function Om(r,e){return new this(r).mul(e)}function Mm(r,e){return new this(r).pow(e)}function vm(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:Bt(r,1,Ln),n=Math.ceil(r/se),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(fu);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=se,n&&r&&(i=Je(10,se-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=se)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<se&&(t-=se-n)}return s.e=t,s.d=a,s}function Fm(r){return ne(r=new this(r),r.e+1,this.rounding)}function _m(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Vm(r){return new this(r).sin()}function Em(r){return new this(r).sinh()}function Wm(r){return new this(r).sqrt()}function Dm(r,e){return new this(r).sub(e)}function qm(){var r=0,e=arguments,t=new this(e[r]);for(fe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return fe=!0,ne(t,this.precision,this.rounding)}function Um(r){return new this(r).tan()}function Gm(r){return new this(r).tanh()}function Xm(r){return ne(r=new this(r),r.e+1,1)}G[Symbol.for("nodejs.util.inspect.custom")]=G.toString;G[Symbol.toStringTag]="Decimal";var zi=G.constructor=hu(ls);Zo=new zi(Zo);$o=new zi($o);var F=zi;import Jm from"big.js";import rr from"bn.js";import zm from"toformat";var Ym=zm,Yi=Ym;import or from"big.js";import Hm from"bn.js";import jm from"decimal.js-light";import Qi from"bn.js";var Tu=9007199254740991;function ee(r){let e=we("Raydium_parseBigNumberish");if(r instanceof Qi)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new Qi(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Tu||r<=-Tu)&&e.logWithError(`BigNumberish number overflow: ${r}`),new Qi(String(r))):typeof r=="bigint"?new Qi(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new Qi(0))}var ir=we("module/fraction"),ys=Yi(or),Hi=Yi(jm),Zm={[0]:Hi.ROUND_DOWN,[1]:Hi.ROUND_HALF_UP,[2]:Hi.ROUND_UP},$m={[0]:or.roundDown,[1]:or.roundHalfUp,[2]:or.roundUp},xe=class{constructor(e,t=new Hm(1)){this.numerator=ee(e),this.denominator=ee(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new xe(this.denominator,this.numerator)}add(e){let t=e instanceof xe?e:new xe(ee(e));return this.denominator.eq(t.denominator)?new xe(this.numerator.add(t.numerator),this.denominator):new xe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof xe?e:new xe(ee(e));return this.denominator.eq(t.denominator)?new xe(this.numerator.sub(t.numerator),this.denominator):new xe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof xe?e:new xe(ee(e));return new xe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof xe?e:new xe(ee(e));return new xe(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.`),Hi.set({precision:e+1,rounding:Zm[n]});let i=new Hi(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.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.`),ys.DP=e,ys.RM=$m[n]||1,new ys(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ed=we("Raydium_amount"),Iu=Yi(Jm);function td(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):ed.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var Ke=class extends xe{constructor(t,n,i=!0,o){let s=new rr(0),a=bs.pow(new rr(t.decimals));if(i)s=ee(n);else{let c=new rr(0),u=new rr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=td(n.toString(),t.decimals);c=ee(l),u=ee(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=we(o||"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 Ke(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Ke(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Iu.DP=this.token.decimals,new Iu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as nd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bu}from"@solana/spl-token";var Nn={chainId:101,address:nd.default.toBase58(),programId:Bu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},bt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Bu.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 ks}from"@solana/web3.js";import{PublicKey as qe,SystemProgram as xu,SYSVAR_RENT_PUBKEY as id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as od}from"@solana/spl-token";function S({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var gs=[S({pubkey:od,isWritable:!1}),S({pubkey:xu.programId,isWritable:!1}),S({pubkey:id,isWritable:!1})];function Ps({publicKey:r,transformSol:e}){let t=As(r.toString());if(t instanceof qe)return e&&t.equals(it)?Z:t;if(e&&t.toString()===it.toBase58())return Z;if(typeof t=="string"){if(t===qe.default.toBase58())return qe.default;try{return new qe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function As(r){try{return new qe(r)}catch{return r}}var sr=new qe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),On=new qe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new qe("SysvarRent111111111111111111111111111111111"),Su=new qe("SysvarC1ock11111111111111111111111111111111"),qt=new qe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),rd=new qe("Sysvar1nstructions1111111111111111111111111"),ws=xu.programId,Ey=new qe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Wy=new qe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Dy=new qe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),qy=new qe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Uy=new qe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Gy=new qe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Xy=new qe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),zy=new qe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Yy=new qe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Qy=new qe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Hy=new qe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new qe("So11111111111111111111111111111111111111112"),it=qe.default;function ft(r){return Ps({publicKey:r,transformSol:!0})}var hs=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===it.toBase58()||e instanceof ks&&it.equals(e)){this.decimals=bt.decimals,this.symbol=bt.symbol,this.name=bt.name,this.mint=new ks(bt.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=o?ks.default:Ps({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ue=hs;Ue.WSOL=new hs(q(_({},bt),{mint:bt.address}));var Ts=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=Ts;ar.SOL=new Ts(Nn);import sd from"bn.js";var Ku=new xe(new sd(100)),rt=class extends xe{toSignificant(e=5,t,n){return this.mul(Ku).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ku).toFixed(e,t,n)}};var ad=we("Raydium_price"),xt=class extends xe{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new xe(Is(n.decimals),Is(i.decimals))}get raw(){return new xe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new xt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ad.logWithError("mul token not equals");let n=super.mul(t);return new xt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};import{PublicKey as ud}from"@solana/web3.js";import cd from"bn.js";function Cu(r){return typeof r=="object"&&r!==null&&![Ue,Ke,ud,xe,cd,xt,rt].some(e=>typeof e=="object"&&r instanceof e)}function mt(r){return typeof r=="string"?As(r):Array.isArray(r)?r.map(e=>mt(e)):Cu(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,mt(t)])):r}var St=new cn(0),Ru=new cn(1),Gb=new cn(2),Xb=new cn(3),zb=new cn(5),bs=new cn(10),Yb=new cn(100),Qb=new cn(1e3),Hb=new cn(1e4);function Is(r){return bs.pow(ee(r))}function ur(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function ji(r,e,t){return r.mul(e).add(t).sub(new cn(1)).div(t)}function cr(r,e,t){return r.mul(e).div(t)}function us(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var tn=class{constructor(e){this._owner=e}get publicKey(){return tn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return tn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return tn.isKeyPair(this._owner)}get isPublicKey(){return tn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!tn.isKeyPair(e)}};import{PublicKey as yd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";import{ComputeBudgetProgram as Lu,Keypair as Ou,PublicKey as ld,Transaction as Mu,TransactionMessage as md,VersionedTransaction as vu}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 dd}from"@solana/spl-token";var Nu=we("Raydium_txUtil"),Fu=1644;function lr(r){let e=[],t=[];return r.microLamports&&(e.push(Lu.setComputeUnitPrice({microLamports:r.microLamports})),t.push(X.SetComputeUnitPrice)),r.units&&(e.push(Lu.setComputeUnitLimit({units:r.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function hi(r,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:i.blockhash}async function mr(r,e){return r.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);r.onSignature(e,o=>{if(clearTimeout(i),!o.err){t("");return}n(Object.assign(o.err,{txId:e}))},"confirmed")})}function Bs(r,e){r.length<1&&Nu.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Nu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Mu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Fu}catch{return!1}}function ce(r,e){let[t,n]=ld.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function Zi({instructions:r,payer:e,signers:t}){return Bs(r,[e,...t])}function $i({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ou.generate().publicKey.toString()}){let o=new md({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new vu(o).serialize()).toString("base64").length<Fu}catch{return!1}}var pd=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),fd=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof vu&&(e=pd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Yn(r){let e=[];return r.forEach(t=>{t instanceof Mu&&(t.recentBlockhash||(t.recentBlockhash=dd.toBase58()),t.feePayer||(t.feePayer=Ou.generate().publicKey)),e.push(fd(t))}),console.log("simulate tx string:",e),e}function J(r,e,t){return ce([r.toBuffer(),(t!=null?t:bd).toBuffer(),e.toBuffer()],new yd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var _u=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Vu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Eu=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Ji=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),bg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Wu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),xs=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),dr=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),gg=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Du=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Qn=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),eo=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Hn=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Pg=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),qu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),gd=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Pd=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ad=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),wd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),jn=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Uu=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Ag=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),fr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),yr=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),st=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),wg=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),kg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),hg=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Tg=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ig=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),to={IDO_PROGRAM_ID_V1:gd,IDO_PROGRAM_ID_V2:Pd,IDO_PROGRAM_ID_V3:Ad,IDO_PROGRAM_ID_V4:wd};var vt={OPEN_BOOK_PROGRAM:new ie("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ie("Ray1111111111111111111111111111111111111111"),AMM_V4:new ie("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ie("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ie("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ie("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ie("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ie("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ie("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ie("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ie.default,Router:new ie("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ie("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ie("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ie("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ie("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ie("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ie("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ie("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ie("Ray1111111111111111111111111111111111111111")};import Fe from"bn.js";var ln=1e4;function Ce(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=q(_({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Fe(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===ln){let c=new Fe(o.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=Mn(r.mul(new Fe(ln)),new Fe(ln-o.transferFeeBasisPoints)),u=new Fe(o.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=Mn(l.mul(new Fe(o.transferFeeBasisPoints)),new Fe(ln)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Mn(r.mul(new Fe(o.transferFeeBasisPoints)),new Fe(ln)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function nn(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function Mn(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Fe(0))?t.add(new Fe(1)):t}function Zn(r,e){if(r.isZero())return new Fe(0);let t=r.div(e);return t.isZero()?new Fe(1):r.mod(e).gt(new Fe(0))?t.add(new Fe(1)):t}function Ss(r,e,t){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),i=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Fe(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Mn(r.mul(new Fe(i.transferFeeBasisPoints)),new Fe(ln)),c=a.gt(o)?o:a;return{amount:r,fee:c,expirationTime:s}}function Ks(r,e,t){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),i=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Fe(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(i.transferFeeBasisPoints===ln){let a=new Fe(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=Mn(r.mul(new Fe(ln)),new Fe(ln-i.transferFeeBasisPoints)),c=new Fe(i.maximumFee.toString()),u=a.sub(r).gt(c)?r.add(c):a,l=Mn(u.mul(new Fe(i.transferFeeBasisPoints)),new Fe(ln)),m=l.gt(o)?o:l;return{amount:u,fee:m,expirationTime:s}}}import{PublicKey as Cs,AddressLookupTableAccount as Bi}from"@solana/web3.js";async function Rs({connection:r,address:e,cluster:t="mainnet"}){let n=await $t(r,[...new Set(e.map(o=>o.toString()))].map(o=>new Cs(o))),i={};for(let o=0;o<e.length;o++){let s=n[o],a=e[o];if(!s)continue;let c=new Bi({key:a,state:Bi.deserialize(s.data)});i[a.toString()]=c,t==="devnet"?Ii[a.toString()]=c:Ti[a.toString()]=c}return i}var Ti={},Ls=async r=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Ti[e])return Ti;let t=new Cs(e),n=await r.getAccountInfo(t);return n&&(Ti[e]=new Bi({key:t,state:Bi.deserialize(n.data)})),Ti},Ii={},Ns=async r=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ii[e])return Ii;let t=new Cs(e),n=await r.getAccountInfo(t);return n&&(Ii[e]=new Bi({key:t,state:Bi.deserialize(n.data)})),Ii};import{PublicKey as xi,sendAndConfirmTransaction as Os,SystemProgram as kd,Transaction as no,TransactionMessage as io,VersionedTransaction as oo}from"@solana/web3.js";import hd 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 hd.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 xi(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:i=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==xi.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new no;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.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 i=>{var l;let{recentBlockHash:o,skipPreflight:s=!0,sendAndConfirm:a,notSendToRpc:c}=i||{},u=o!=null?o:await hi(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Yn([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Os(this.connection,t,this.signers.find(d=>d.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),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:s}),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:i}=this.build(n),o=t.filter(l=>l.transaction.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.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:s,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 hi(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],k=0;for(let T of s){if(++k,k<=p)continue;let h=await Os(this.connection,T,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(h)}return{txIds:A,signedTxs:s}}return{txIds:await await Promise.all(s.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let A=s.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));Yn(A);let k=await this.signAllTransactions(A);if(m){let T=0,h=[],w=async()=>{if(!k[T])return;let B=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:y});h.push({txId:B,status:"sent",signedTx:k[T]}),d==null||d([...h]),T++;let x=!1,K=null,I=null,C=R=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let N=h.findIndex(O=>O.txId===B);if(N>-1){if(h[N].status==="error"||h[N].status==="success")return;h[N].status=R.err?"error":"success"}d==null||d([...h]),R.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var R;if(x){clearInterval(K);return}try{let N=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(x=!0,clearInterval(K),C({err:((R=N.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",B))}catch(N){x=!0,clearInterval(K),console.error("getTransaction timeout:",N,B)}},br)),I=this.connection.onSignature(B,R=>{if(x){this.connection.removeSignatureListener(I);return}x=!0,C(R)},"confirmed"),this.connection.getSignatureStatus(B)};return await w(),{txIds:h.map(B=>B.txId),signedTxs:k}}else{let T=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});T.push(w)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:o}=f,s=De(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Ns(this.connection):await Ls(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new xi(b));let l=await Rs({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?xi.default.toBase58():o!=null?o:await hi(this.connection,this.blockhashCommitment),d=new io({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 oo(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var T;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(Yn([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 w of h)try{w.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(l=>l.builder.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.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)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Yn(s),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await mr(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],k=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++;let h=!1,w=null,B=null,x=K=>{w!==null&&clearInterval(w),B!==null&&this.connection.removeSignatureListener(B);let I=A.findIndex(C=>C.txId===T);if(I>-1){if(A[I].status==="error"||A[I].status==="success")return;A[I].status=K.err?"error":"success"}d==null||d([...A]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(w),x({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(w),console.error("getTransaction timeout:",I,T)}},br)),B=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(B);return}h=!0,x(K)},"confirmed"),this.connection.getSignatureStatus(T)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,i=De(m,["splitIns","computeBudgetConfig"]),o=n?lr(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>q(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...o.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new xi(A));if(p!==t[l]&&u.length<12&&(Zi({instructions:y,payer:this.feePayer,signers:g})||Zi({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,Zi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new no().add(...o.instructions,...u)):a.push(new no().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>s[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=>s[y]).filter(y=>y!==void 0);Zi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new no().add(...o.instructions,...u)):a.push(new no().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var T;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await hi(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),Yn(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,w=[];for(let B of a){if(++h,h<=b){w.push("tx skipped");continue}let x=await Os(this.connection,B,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});w.push(x)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),w=[...a.slice(0,b),...h];if(f){let B=0,x=[],K=async()=>{if(!w[B])return;B<b&&(x.push({txId:"",status:"success",signedTx:w[B]}),y==null||y([...x]),B++,K());let I=await this.connection.sendRawTransaction(w[B].serialize(),{skipPreflight:A});x.push({txId:I,status:"sent",signedTx:w[B]}),y==null||y([...x]),B++;let C=!1,R=null,N=null,O=L=>{R!==null&&clearInterval(R),N!==null&&this.connection.removeSignatureListener(N);let v=x.findIndex(Y=>Y.txId===I);if(v>-1){if(x[v].status==="error"||x[v].status==="success")return;x[v].status=L.err?"error":"success"}y==null||y([...x]),L.err||K()};this.loopMultiTxStatus&&(R=setInterval(async()=>{var L;if(C){clearInterval(R);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(R),O({err:((L=v.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(R),console.error("getTransaction timeout:",v,I)}},br)),N=this.connection.onSignature(I,L=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(L)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:x.map(I=>I.txId),signedTxs:w}}else{let B=[];for(let x=0;x<w.length;x+=1){let K=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:A});B.push(K)}return{txIds:B,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:o=[]}=A,s=De(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await Ns(this.connection):await Ls(this.connection)),i),c=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let T of c)a[T]===void 0&&u.push(new xi(T));let l=await Rs({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 hi(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(_({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],w=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&($i({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||$i({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 B={};for(let x of[...new Set(c)])a[x]!==void 0&&(B[x]=a[x]);if(t&&$i({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let x=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new oo(x))}else{let x=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new oo(x))}y.push(Array.from(new Set(b.map(x=>x.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(x=>p[x]).filter(x=>x!==void 0)),b=[T]}}),b.length>0){let h=[...new Set(b.map(w=>w.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&$i({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new oo(w))}else{let w=new io({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new oo(w))}y.push(h)}return(k=this.owner)!=null&&k.signer&&y.forEach(T=>{T.some(h=>h.publicKey.equals(this.owner.publicKey))||T.push(this.owner.signer)}),f.forEach((T,h)=>{T.sign(y[h])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async T=>{var I;let{sequentially:h,onTxUpdate:w,skipTxCount:B=0,recentBlockHash:x,skipPreflight:K=!0}=T||{};if(f.map(async(C,R)=>{y[R].length&&C.sign(y[R]),x&&(C.message.recentBlockhash=x)}),Yn(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,R=[];for(let N of f){if(++C,C<=B){console.log("skip tx: ",C),R.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await mr(this.connection,O),R.push(O)}return{txIds:R,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(B,f.length)),R=[...f.slice(0,B),...C];if(h){let N=0,O=[],L=async()=>{if(!R[N])return;if(N<B){O.push({txId:"",status:"success",signedTx:R[N]}),w==null||w([...O]),N++,L();return}let v=await this.connection.sendTransaction(R[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:R[N]}),w==null||w([...O]),N++;let Y=!1,Q=null,pe=null,ke=le=>{Q!==null&&clearInterval(Q),pe!==null&&this.connection.removeSignatureListener(pe);let Pe=O.findIndex(Ae=>Ae.txId===v);if(Pe>-1){if(O[Pe].status==="error"||O[Pe].status==="success")return;O[Pe].status=le.err?"error":"success"}w==null||w([...O]),le.err||L()};this.loopMultiTxStatus&&(Q=setInterval(async()=>{var le;if(Y){clearInterval(Q);return}try{let Pe=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});Pe&&(Y=!0,clearInterval(Q),ke({err:((le=Pe.meta)==null?void 0:le.err)||null}),console.log("tx status from getTransaction:",v))}catch(Pe){Y=!0,clearInterval(Q),console.error("getTransaction timeout:",Pe,v)}},br)),pe=this.connection.onSignature(v,le=>{if(Y){this.connection.removeSignatureListener(pe);return}Y=!0,ke(le)},"confirmed"),this.connection.getSignatureStatus(v)};return L(),{txIds:[],signedTxs:R}}else{let N=[];for(let O=0;O<R.length;O+=1){let L=await this.connection.sendTransaction(R[O],{skipPreflight:K});N.push(L)}return{txIds:N,signedTxs:R}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};import Td from"bn.js";var Kt=new Td(1e6);var at={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/v1/tagged/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"},dP=_({},at);var Gu="ray_tab_hash",Ms="ray_req_hash",Id=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Gu);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Gu,r)),r},Pr=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=De(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(Ms)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(q(_({},t),{time:Date.now(),session:Id()}));try{localStorage.setItem(Ms,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let c=JSON.stringify(t.data).substring(0,100);o[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Ms,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Pr(q(_({},t),{logCount:r,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as Bd,TOKEN_PROGRAM_ID as xd}from"@solana/spl-token";var Ar=we("Raydium_Api"),vs=new Map;var wr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Xu.create({baseURL:this.urlConfigs.BASE_HOST||at.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Ar.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Ar.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{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},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Pr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Ar.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||at.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||at.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||at.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Xu.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||at.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||at.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||at.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||at.JUP_TOKEN_LIST})).map(t=>q(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?Bd.toBase58():xd.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||at.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||at.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||at.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>vs.has(s)?(n.push(vs.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||at.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{vs.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ft(t).toBase58(),n&&n!=="undefined"?ft(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||at.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||at.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||at.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||at.CHECK_AVAILABILITY)).data}};var kr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",zu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Sr,SystemProgram as ip}from"@solana/web3.js";import{AccountLayout as Ci,createAssociatedTokenAccountIdempotentInstruction as zs,TOKEN_PROGRAM_ID as Vn,TOKEN_2022_PROGRAM_ID as op}from"@solana/spl-token";var Fs=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),_e=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(Fs(e))}logInfo(...e){this.logger.info(Fs(e))}logAndCreateError(...e){let t=Fs(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Zd,SystemProgram as $d}from"@solana/web3.js";import Jd from"bn.js";import{createCloseAccountInstruction as ep,createInitializeAccountInstruction as tp,createTransferInstruction as np,TOKEN_PROGRAM_ID as Ki}from"@solana/spl-token";import{Keypair as Yd,PublicKey as ac}from"@solana/web3.js";import Qd from"bn.js";import{TOKEN_PROGRAM_ID as Hd}from"@solana/spl-token";function Sd(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function _s(r,...e){if(!Sd(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Vs(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Yu(r,e){_s(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Tr=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),on=(r,e)=>r<<32-e|r>>>e;var jP=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Kd(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Es(r){return typeof r=="string"&&(r=Kd(r)),_s(r),r}var hr=class{clone(){return this._cloneInto()}},ZP={}.toString;function Qu(r){let e=n=>r().update(Es(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Cd(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Hu=(r,e,t)=>r&e^~r&t,ju=(r,e,t)=>r&e^r&t^e&t,Ir=class extends hr{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Tr(this.buffer)}update(e){Vs(this);let{view:t,buffer:n,blockLen:i}=this;e=Es(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=Tr(e);for(;i<=o-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Vs(this),Yu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Cd(n,i-8,BigInt(this.length*8),o),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],o)}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:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Rd=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]),vn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Fn=new Uint32Array(64),Ws=class extends Ir{constructor(){super(64,32,8,!1),this.A=vn[0]|0,this.B=vn[1]|0,this.C=vn[2]|0,this.D=vn[3]|0,this.E=vn[4]|0,this.F=vn[5]|0,this.G=vn[6]|0,this.H=vn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)Fn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Fn[m-15],p=Fn[m-2],f=on(d,7)^on(d,18)^d>>>3,y=on(p,17)^on(p,19)^p>>>10;Fn[m]=y+Fn[m-7]+f+Fn[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=on(a,6)^on(a,11)^on(a,25),p=l+d+Hu(a,c,u)+Rd[m]+Fn[m]|0,y=(on(n,2)^on(n,13)^on(n,22))+ju(n,i,o)|0;l=u,u=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+y|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+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,i,o,s,a,c,u,l)}roundClean(){Fn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Zu=Qu(()=>new Ws);import{PublicKey as Ud}from"@solana/web3.js";import nc,{isBN as ic}from"bn.js";import{bits as Ld,BitStructure as sA,blob as Nd,Blob as aA,cstr as uA,f32 as cA,f32be as lA,f64 as mA,f64be as dA,greedy as pA,Layout as Od,ns64 as fA,ns64be as yA,nu64 as Md,nu64be as bA,offset as vd,s16 as gA,s16be as PA,s24 as AA,s24be as wA,s32 as Fd,s32be as kA,s40 as hA,s40be as TA,s48 as IA,s48be as BA,s8 as xA,seq as _d,struct as SA,Structure as Vd,u16 as Ed,u16be as KA,u24 as CA,u24be as RA,u32 as Wd,u32be as LA,u40 as NA,u40be as OA,u48 as MA,u48be as vA,u8 as Dd,UInt as qd,union as FA,Union as _A,unionLayoutDiscriminator as VA,utf8 as EA}from"@solana/buffer-layout";var Br=Od,$u=Vd;var Ds=qd;var Ju=Dd,Ft=Ed;var ro=Wd;var ec=Md;var Ve=Fd;var tc=_d;var Be=Nd;var qs=Ld,Us=vd;var Jn=class extends Br{constructor(t,n,i){super(t,i);this.blob=Be(t),this.signed=n}decode(t,n=0){let i=new nc(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new nc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},xr=class extends Br{constructor(t){super(8,t);this._lower=qs(ro(),!1),this._upper=qs(ro(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return _(_({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function E(r){return new Ds(1,r)}function gt(r){return new Ds(4,r)}function P(r){return new Jn(8,!1,r)}function oe(r){return new Jn(16,!1,r)}function oc(r){return new Jn(1,!0,r)}function Si(r){return new Jn(8,!0,r)}function rc(r){return new Jn(16,!0,r)}var ei=class extends Br{constructor(t,n,i,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function M(r){return new ei(Be(32),e=>new Ud(e),e=>e.toBuffer(),r)}function Ge(r){return new ei(Ju(),Gd,Xd,r)}function Gd(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function Xd(r){return r?1:0}function sc(r,e){let t=ro("length"),n=V([t,H(r,Us(t,-t.span),"values")]);return new ei(n,({values:i})=>i,i=>({values:i}),e)}function zd(r){let e=ro("length"),t=V([e,Be(Us(e,-e.span),"data")]);return new ei(t,({data:n})=>n,n=>({data:n}),r)}function dt(r){return new ei(zd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}var Gs=class extends $u{decode(e,t){return super.decode(e,t)}};function V(r,e,t){return new Gs(r,e,t)}function H(r,e,t){let n,i=typeof e=="number"?e:ic(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=ic(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return tc(r,i,t)}var ti=V([M("mint"),M("owner"),P("amount"),gt("delegateOption"),M("delegate"),E("state"),gt("isNativeOption"),P("isNative"),P("delegatedAmount"),gt("closeAuthorityOption"),M("closeAuthority")]);var sw=we("Raydium_Util");function uc({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=ti.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:o,mint:c,amount:u,isAssociated:J(r,c,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:ac.default,amount:new Qd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function He({fromPublicKey:r,programId:e=Hd,assignSeed:t}){let n=t?btoa(t).slice(0,32):Yd.generate().publicKey.toBase58().slice(0,32);return{publicKey:jd(r,n,e),seed:n}}function jd(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Zu(n);return new ac(i)}function Xs(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Ki}=r;return tp(t,e,n,i)}function bn(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Ki}=r;return ep(e,t,i,n,o)}async function _n(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(ti.span,n),c=ee(t).add(new Jd(a)),u=He({fromPublicKey:i,programId:Ki});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[$d.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:ti.span,programId:Ki}),Xs({mint:new Zd(bt.address),tokenAccount:u.publicKey,owner:o,programId:Ki})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:s?[]:[X.CloseAccount],endInstructions:s?[]:[bn({tokenAccount:u.publicKey,payer:i,owner:o})]}}function cc({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Ki}){return np(r,e,t,BigInt(String(n)),i,o)}var so=class extends _e{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i,notSubscribeAccountChange:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._notSubscribeAccountChange=o!=null?o:!0,this._clientOwnedToken=!!(n||i)}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 J(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 i=_(_({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Vn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:op},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=uc({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.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=Vn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Sr(t.tokenProgram||Vn),d=this.getAssociatedTokenAccount(n,new Sr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!o||k.pubkey.equals(d))).sort((k,T)=>k.accountInfo.amount.lt(T.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let k=zs(s,d,s,n,m),T=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&Ci.decode(h.data).mint.equals(n)&&Ci.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else T===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(Z)&&i.amount){let h=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(b=i.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||[]),i.amount&&(f.instructions.push(cc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:Vn})),f.instructionTypes.push(X.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(bn({owner:s,payer:i.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:d,instructionParams:f}}else{let k=He({fromPublicKey:s,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Ci.span),h=ip.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:T+Number((A=(g=i.amount)==null?void 0:g.toString())!=null?A:0),space:Ci.span,programId:m});return f.instructions.push(h,Xs({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),c||(f.endInstructions.push(bn({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Vn,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let o=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let u=this.getAssociatedTokenAccount(t,n),l=await zs(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[X.CreateATA],o=u}return i&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[bn({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=Vn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new Sr(Z).equals(o)){let p=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=zs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(Vn)&&Ci.decode(y.data).mint.equals(o)&&Ci.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.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:i=Vn,amount:o,useSOLBalance:s,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new Sr(Z))&&s){let m=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=m,f=De(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=d,f=De(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Se,SystemProgram as kp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Bc}from"@solana/spl-token";import{PublicKey as Js}from"@solana/web3.js";var Ys=V([E("instruction")]),Qs=V([E("instruction")]),rp=V([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),oe("accRewardPerShare"),M("rewardVault"),M("rewardMint"),M("rewardSender"),P("rewardType"),H(P(),15,"padding")]),sp=V([P("state"),P("nonce"),M("lpVault"),M("rewardVault"),M(),M(),P(),P(),P("totalReward"),oe("perShareReward"),P("lastSlot"),P("perSlotReward")]),ap=V([P("state"),P("nonce"),M("lpVault"),M("rewardVaultA"),P("totalRewardA"),oe("perShareRewardA"),P("perSlotRewardA"),E("option"),M("rewardVaultB"),Be(7),P("totalRewardB"),oe("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),M()]),up=V([P(),P("state"),P("nonce"),P("validRewardTokenNum"),oe("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),M("lpMint"),M("lpVault"),H(rp,5,"rewardInfos"),M("creator"),M(),H(P(),32,"padding")]),cp=new Proxy(sp,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(_({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),lp=new Proxy(ap,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(_({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(r,e,t)}}),Kr=new Proxy(up,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(_({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return q(_({},o),{rewardType:((s=Object.entries(En).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),mp=V([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Hs=V([E("instruction"),P("nonce"),H(mp,5,"rewardTimeInfo")]),js=V([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Zs=V([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Vw=V([P("state"),M("id"),M("owner"),P("deposited"),H(P(),1,"rewardDebts")]),$s=V([P("state"),M("id"),M("owner"),P("deposited"),H(oe(),1,"rewardDebts"),P(""),P("voteLockedBalance"),H(P(),15)]),Ew=V([P("state"),M("id"),M("owner"),P("deposited"),H(P(),2,"rewardDebts")]),lc=V([P("state"),M("id"),M("owner"),P("deposited"),H(oe(),2,"rewardDebts"),H(P(),17)]),mc=V([P(),P("state"),M("id"),M("owner"),P("deposited"),H(oe(),5,"rewardDebts"),H(P(),16)]),_t=V([E("instruction"),P("amount")]),dp=V([M("mint"),M("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),oc("digitShift"),H(E(),7,"reserved1"),H(P(),7,"reserved2")]),pp=V([Be(8),M("governanceProgramId"),M("realm"),M("realmGoverningTokenMint"),M("realmAuthority"),H(E(),32,"reserved1"),H(dp,4,"votingMints"),Si("timeOffset"),E("bump"),H(E(),7,"reserved2"),H(P(),11,"reserved3")]),fp=V([Si("startTime"),Si("endTime"),E("kind"),H(E(),15,"reserved")]),yp=V([H(fp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ge("isUsed"),Ge("allowClawback"),E("votingMintConfigIdx"),H(E(),29,"reserved")]),bp=V([Be(8),M("voterAuthority"),M("registrar"),H(yp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),H(E(),94,"reserved")]);import{NATIVE_MINT as Qw}from"@solana/spl-token";var Hw=we("Raydium_farm_config"),dc=new Js("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),pc=new Js("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var jw=new Js("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var fc={3:$s,5:lc,6:mc},ea=r=>[3,4,5,6].indexOf(r)!==-1,ta=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=o[e])==null?void 0:s.call(o)},En={"Standard SPL":0,"Option tokens":1},Ut={[_u.toString()]:3,[Vu.toString()]:4,[Eu.toString()]:5,[Ji.toString()]:6,[vt.FARM_PROGRAM_ID_V3.toString()]:3,[vt.FARM_PROGRAM_ID_V4.toString()]:4,[vt.FARM_PROGRAM_ID_V5.toString()]:5,[vt.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as ge,SystemProgram as gc,SYSVAR_CLOCK_PUBKEY as co,SYSVAR_RENT_PUBKEY as Ap,TransactionInstruction as Xt}from"@solana/web3.js";import Pc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Kk,createAssociatedTokenAccountIdempotentInstruction as Ck,TOKEN_PROGRAM_ID as gn}from"@solana/spl-token";import gp from"bn.js";var Pp=we("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function Gt({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var yc=({programId:r,poolId:e})=>ce([e.toBuffer()],r);function bc(r){return{isSet:new gp(1),rewardPerSecond:ee(r.perSecond),rewardOpenTime:ee(r.openTime),rewardEndTime:ee(r.endTime),rewardType:ee(En[r.rewardType])}}function na(r){return ee(r.endTime).sub(ee(r.openTime)).mul(ee(r.perSecond))}function uo(r){let e=fc[r];return e||Pp.logWithError("invalid version",r),e}var wp=we("Raydium_farm_instruction"),Wk={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 lo(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||wp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ys.span);Ys.encode({instruction:s},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:o,isWritable:!1}),S({pubkey:gc.programId,isWritable:!1}),S({pubkey:Ap,isWritable:!1})];return{instruction:new Xt({programId:i,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Ac(r){var n;let e=Buffer.alloc(Hs.span);Hs.encode({instruction:0,nonce:new Pc(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...gs,S({pubkey:r.farmId}),S({pubkey:r.farmAuthority,isWritable:!1}),S({pubkey:r.lpVault}),S({pubkey:r.lpMint,isWritable:!1}),S({pubkey:r.lockVault}),S({pubkey:r.lockMint,isWritable:!1}),S({pubkey:(n=r.lockUserAccount)!=null?n:it}),S({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(S({pubkey:i.rewardMint,isWritable:!1}),S({pubkey:i.rewardVault}),S({pubkey:i.userRewardToken}));return{instruction:new Xt({programId:r.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function wc(r){let e=Buffer.alloc(Qs.span);Qs.encode({instruction:5},e);let t=[S({pubkey:gn,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.lpVault,isWritable:!1}),S({pubkey:r.rewardVault}),S({pubkey:r.userRewardToken}),S({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Xt({programId:r.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function ia({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(js.span);js.encode({instruction:3,rewardReopenTime:ee(i.openTime),rewardEndTime:ee(i.endTime),rewardPerSecond:ee(i.perSecond)},o);let s=[S({pubkey:gn,isWritable:!1}),S({pubkey:n.id}),S({pubkey:n.lpVault,isWritable:!1}),S({pubkey:e}),S({pubkey:t}),S({pubkey:r,isWritable:!1,isSigner:!0})];return new Xt({programId:n.programId,keys:s,data:o})}function oa({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Zs.span);Zs.encode({instruction:4,isSet:new Pc(1),rewardPerSecond:ee(i.perSecond),rewardOpenTime:ee(i.openTime),rewardEndTime:ee(i.endTime),rewardType:ee(En[i.rewardType])},o);let s=[...gs,S({pubkey:t.id}),S({pubkey:t.authority,isWritable:!1}),S({pubkey:i.mint,isWritable:!1}),S({pubkey:n}),S({pubkey:e}),S({pubkey:r,isWritable:!1,isSigner:!0})];return new Xt({programId:t.programId,keys:s,data:o})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ge(e.programId),new ge(e.id)],u=Gt({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(_t.span);_t.encode({instruction:2,amount:ee(s)},l);let m=[S({pubkey:gn,isWritable:!1}),S({pubkey:c}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:new ge(t.lpVault)}),S({pubkey:u}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(S({pubkey:i[d]}));return new Xt({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(_t.span);_t.encode({instruction:12,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:i[p]})),d.push(S({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function kc(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=V([E("instruction"),P("amount")]),m=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:a[0]}),S({pubkey:o,isSigner:!0,isWritable:!1}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1}),S({pubkey:i[1]}),S({pubkey:new ge(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Xt({keys:m,programId:c,data:d})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(_t.span);_t.encode({instruction:11,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function hc(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(_t.span);_t.encode({instruction:10,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function Tc(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ge(e.programId),new ge(e.id)],l=Gt({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(_t.span);_t.encode({instruction:11,amount:ee(s)},m);let d=[S({pubkey:u}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new ge(t.lpVault)}),S({pubkey:i[0]}),S({pubkey:new ge(t.rewardInfos[0].vault)}),S({pubkey:co,isWritable:!1}),S({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:i[p]})),d.push(S({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new Xt({programId:c,keys:d,data:m})}function Ic(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ge(e.programId),new ge(e.id)],u=Gt({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(_t.span);_t.encode({instruction:1,amount:ee(s)},l);let m=[S({pubkey:gn,isWritable:!1}),S({pubkey:gc.programId,isWritable:!1}),S({pubkey:c}),S({pubkey:new ge(t.authority),isWritable:!1}),S({pubkey:new ge(t.lpVault)}),S({pubkey:u}),S({pubkey:o,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(S({pubkey:i[d]}));return new Xt({programId:a,keys:m,data:l})}var yo=class extends _e{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(it)){let n=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:na(q(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Ji,txVersion:o,feePayer:s,lockProgram:a}){var B,x;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Se(e.lpMint.address),lockInfo:{lockMint:(B=a==null?void 0:a.mint)!=null?B:dc,lockVault:(x=a==null?void 0:a.vault)!=null?x:pc},version:6,rewardInfos:t,programId:i},l=this.createTxBuilder(s),m=n!=null?n:this.scope.ownerPubKey,d=He({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(Kr.span);l.addInstruction({instructions:[kp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Kr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=yc({programId:new Se(u.programId),poolId:d.publicKey}),b=ao({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(En[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(bc(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 R=K.mint.equals(it)?new Se(bt.address):K.mint;A.push({rewardMint:R,rewardVault:ao({programId:u.programId,poolId:d.publicKey,mint:R,type:"rewardVault"}),userRewardToken:I})}let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Se(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=Ac({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:o,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i,feePayer:o}){var g;let s=Ut[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=mt((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(it)?new Se(bt.address):n.mint,m=c.rewardInfos.findIndex(A=>new Se(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:it,f=this.createTxBuilder(o),{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:[ia({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i,feePayer:o}){var m;let s=Ut[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=mt((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(o);for(let d of n){let p=d.mint.equals(it)?new Se(bt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Se(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:it,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:d,payer:u});A&&l.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ia({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return l.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o,feePayer:s}=e,a=Ut[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=mt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,l=this.createTxBuilder(s),m=i.mint.equals(it)?new Se(bt.address):i.mint,d=ao({programId:new Se(n.programId),poolId:new Se(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=m,l.addInstruction({instructions:[oa({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:i})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o,feePayer:s}=e,a=Ut[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=mt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,l=this.createTxBuilder(s);for(let m of i){let d=m.mint.equals(it)?new Se(bt.address):m.mint,p=ao({programId:new Se(n.programId),poolId:new Se(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=oa({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,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=Ut[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),ea(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Se(n.programId),new Se(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],A=Gt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(o);k.addCustomComputeBudget(l),k.addTipInstruction(m);let T={};for(let O of this.scope.account.tokenAccounts)if(a){let L=J(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&L.equals(O.publicKey)&&(T[O.mint.toString()]=O.publicKey)}else T[O.mint.toString()]=O.publicKey;let h=g.lpMint,w=T[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",T);let B=[];for(let O of d){let L=s&&O.mint.address===Z.toString(),v=T[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Se(O.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:a,checkCreateATAOwner:c});v=Y,Q&&k.addInstruction(Q)}T[O.mint.address]=v,B.push(v)}let x,K=await this.scope.connection.getAccountInfo(A);if(K&&(x=uo(f).decode(K.data)),n.programId!==Ji.toString()&&n.programId!==vt.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:O,instructionType:L}=lo({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[O],instructionTypes:[L]})}let I=ta({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:B});I&&this.logAndCreateError(I);let C={amount:ee(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:B,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Se(O))},R=f===6?Ic(C):f===5?Tc(C):hc(C),N={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[R],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,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=Ut[n.programId];ea(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=J(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=Gt({programId:new Se(n.programId),poolId:new Se(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)uo(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:R,instructionType:N}=lo({id:new Se(y.id),programId:new Se(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[R],instructionTypes:[N]})}}o&&o.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=s&&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 Se(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[A.toString()]=T;let h=[];for(let I of p){let C=s&&I.mint.address===Z.toString(),R=g[I.mint.address];if(!R){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Se(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});R=N,O&&b.addInstruction(O)}g[I.mint.address]=R,h.push(R)}let w=ta({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let B={amount:ee(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Se(I))},x=f===6?mo(B):f===5?po(B):f===4?kc(B):fo(B),K={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:i,txTipConfig:o,feePayer:s}){var y;this.scope.checkOwner();let a=mt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=Ut[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>ft(b.mint.address).equals(ft(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:it,m=this.createTxBuilder(s),d;if(t.equals(it)||t.equals(Se.default)){let b=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:na(q(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new F(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===null?(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Bc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]})):d=b}let{instruction:p,instructionType:f}=wc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(i),m.addTipInstruction(o),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(i),m={};for(let f of this.scope.account.tokenAccounts)if(o){let y=J(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>q(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=Ut[y],T=b.address,h=n&&T===Z.toString(),w=m[T];if(!w){let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Se(T),notUseTokenAccount:h,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:o,checkCreateATAOwner:s});w=R,N&&l.addInstruction(N)}m[T.toString()]=w;let B=[];for(let R of g){let N=n&&R.mint.address===Z.toString(),O=m[R.mint.address];if(!O)if(N){let{account:L,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Se(R.mint.address),notUseTokenAccount:N,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:o,checkCreateATAOwner:s});O=L,v&&l.addInstruction(v)}else{let L=new Se(R.mint.address);O=this.scope.account.getAssociatedTokenAccount(L),l.addInstruction({instructions:[Bc(this.scope.ownerPubKey,O,this.scope.ownerPubKey,L)]})}m[R.mint.address]=O,B.push(O)}let x=p[A],K={amount:St,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:w,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(R=>new Se(R))},I=k===6?mo(K):k===5?po(K):fo(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as $e}from"@solana/web3.js";import{AccountLayout as cf,NATIVE_MINT as Dr,TOKEN_PROGRAM_ID as Dn}from"@solana/spl-token";import{Keypair as Mr,PublicKey as z,SystemProgram as kn,TransactionInstruction as pt}from"@solana/web3.js";import ya from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as To,TOKEN_2022_PROGRAM_ID as Ye,TOKEN_PROGRAM_ID as Re}from"@solana/spl-token";import Lp from"bn.js";import zt from"bn.js";var Xe=new zt(0),Vt=new zt(1),Pn=new zt(-1),et=new zt(1).shln(64),Cr=new zt(1).shln(128),bo=et.sub(Vt),go=64,xc=Cr.subn(1),Pt=-443636,kt=-Pt,Yt=new zt("4295048016"),Qt=new zt("79226673521066979257578248091"),Rr=new zt("4295048017"),Lr=new zt("79226673521066979257578248090"),Sc=16,Kc="59543866431248",Cc="184467440737095516",Rc="15793534762490258745",Nr=new zt(10).pow(new zt(6));var Lc={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:[]},gh=new zt("18446744073700000000");import be from"bn.js";function Or(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function ra(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function sa(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Po(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function Nc(r,e){return Po(r,e)?null:ra(r,e)}function Oc(r,e){return Po(r,e)?null:sa(r,e)}var hh=Buffer.from("amm_config","utf8"),aa=Buffer.from("pool","utf8"),ua=Buffer.from("pool_vault","utf8"),Tp=Buffer.from("pool_reward_vault","utf8"),Mc=Buffer.from("position","utf8"),Ip=Buffer.from("tick_array","utf8"),Bp=Buffer.from("operation","utf8"),xp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Sp=Buffer.from("observation","utf8");function vc(r,e,t,n){return ce([aa,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function ca(r,e,t){return ce([ua,e.toBuffer(),t.toBuffer()],r)}function Fc(r,e,t){return ce([Tp,e.toBuffer(),t.toBuffer()],r)}function he(r,e,t){return ce([Ip,e.toBuffer(),Or(t)],r)}function rn(r,e,t,n){return ce([Mc,e.toBuffer(),Or(t),Or(n)],r)}function ht(r,e){return ce([Mc,e.toBuffer()],r)}function An(r){return ce([Buffer.from("metadata","utf8"),qt.toBuffer(),r.toBuffer()],qt)}function Ao(r){return ce([Bp],r)}function je(r,e){return ce([xp,e.toBuffer()],r)}function _c(r,e){return ce([Sp,e.toBuffer()],r)}var Vc=Buffer.from("locked_position","utf8");function la(r,e){return ce([Vc,e.toBuffer()],r)}function Ri(r,e){return ce([Vc,e.toBuffer()],r)}var Kp=Buffer.from("support_mint","utf8");function ma(r,e){return ce([Kp,e.toBuffer()],r)}import{PublicKey as Et}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Ec}from"@solana/spl-token";import Ee from"bn.js";import mn from"bn.js";var wo=class{static getfeeGrowthInside(e,t,n){let i=new mn(0),o=new mn(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new mn(0),a=new mn(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=de.wrappingSubU128(de.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=de.wrappingSubU128(de.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=de.mulDivFloor(de.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,et),c=t.tokenFeesOwedA.add(a),u=de.mulDivFloor(de.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,et),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=de.mulDivFloor(de.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,et),c=t.tokenFeesOwedA.add(a),u=de.mulDivFloor(de.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,et),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=de.wrappingSubU128(c,u.growthInsideLastX64),m=de.mulDivFloor(l,t.liquidity,et),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=de.wrappingSubU128(c,u.growthInsideLastX64),m=de.mulDivFloor(l,t.liquidity,et),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new mn(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new mn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(de.wrappingSubU128(de.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new mn(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new mn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(de.wrappingSubU128(de.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var b,g,A,k;let a=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),c=ue.getSqrtPriceX64FromTick(t.tickLower),u=ue.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=Ie.getAmountsFromLiquidity(a,c,u,n,o),[d,p]=[Ce(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Ce(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,y]=[Ce(new mn(new F(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),Ce(new mn(new F(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:nn(d.expirationTime,p.expirationTime)}}};var Cp=15,Te=class{static async getTickArrays(e,t,n,i,o,s,a){let c=[],u=$.getTickArrayStartIndexByTick(i,o),l=$.getInitializedTickArrayInRange(s,a,o,u,Math.floor(Cp/2));for(let p=0;p<l.length;p++){let{publicKey:f}=he(t,n,l[p]);c.push(f)}let m=(await $t(e,c)).map(p=>p!==null?ko.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(u=$.getNextTickArrayStartIndex(u,o,s),this.checkIsValidStartIndex(u,o))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,s);[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,i,o){let s=Math.floor(e/Te.tickCount(t)),a=n?$.searchLowBitFromStart(i,o,s-1,1,t):$.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=tt-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a-1}}else{let a=0;for(;a<tt;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a+1}}let{publicKey:s}=he(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=$.getTickArrayStartIndexByTick(i,o),c=Math.floor((i-a)/o),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)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<tt;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if($.checkIsOutOfBoundary(e)){if(e>kt)return!1;let n=$.getTickArrayStartIndexByTick(Pt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return tt*e}};var da=14,wn=class{static maxTickInTickarrayBitmap(e){return e*tt*ni}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!Te.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-Te.tickCount(n):t+Te.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*tt,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=Nc(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(u),m=Oc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-Te.tickCount(n)}}}},ho=class{static getBitmapOffset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=wn.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=wn.maxTickInTickarrayBitmap(e),n=-t;if(kt<=t)throw Error(`extensionTickBoundary check error: ${kt}, ${t}`);if(n<=Pt)throw Error(`extensionTickBoundary check error: ${n}, ${Pt}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:$.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=Te.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=wn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=$.mergeTickArrayBitmap(e).shln(ni-1-a),u=Po(512,c)?null:ra(512,c);if(u!==null){let l=t-u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=Po(512,c)?null:sa(512,c);if(u!==null){let l=t+u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-Te.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%wn.maxTickInTickarrayBitmap(t),i=Math.floor(n/Te.tickCount(t));return e<0&&n!=0&&(i=ni-i),i}};var Me=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o,s=!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}=ii.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,o,s);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(Pn),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let y=this.preInitializedTickArrayStartIndex(e,s);if(y.isExist){let{publicKey:b}=he(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=ii.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Pn),u,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Me.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ho.checkTickArrayIsInit(Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):$.checkTickArrayIsInitialized($.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=he(e.programId,e.id,s);return{isExist:!0,startIndex:s,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)),i=t?$.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):$.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=wn.nextInitializedTickArrayStartIndex($.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=ho.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Pt||t>kt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,c,u;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=q(_({},m),{perSecond:de.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Et(d)});if(p.tokenMint.equals(Et.default))continue;if(n<=p.openTime.toNumber()||i.eq(Xe)){s.push(p);continue}let f=new Ee(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=de.mulDivFloor(y,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),A=de.mulDivFloor(y,p.emissionsPerSecondX64,et),k=p.rewardTotalEmissioned.add(A);s.push(q(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=$.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=wn.maxTickInTickarrayBitmap(e),n=-t;return t>kt&&(t=Te.getArrayStartIndex(kt,e)+Te.tickCount(e)),n<Pt&&(n=Te.getArrayStartIndex(Pt,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)*ni}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Oe(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=Dc.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let c of t){let u=$.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=$.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);o.push({pubkey:d}),i[d.toString()]=c.id}}let s=await Oe(e,o,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ko.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.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 s)u.push(ht(p,d).publicKey);let l=await $t(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Li.decode(d.data),f=p.poolId.toString(),y=e.find(x=>x.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=$._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=$._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:T}=Ie.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:k,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>q(_({},x),{pendingReward:new Ee(0)})),leverage:h,tokenFeeAmountA:new Ee(0),tokenFeeAmountB:new Ee(0)}];let w=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),B=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}if(o){let d=Object.values(m),p=await $t(t,d,{batchRequest:i}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=ko.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,k=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[k].toString()],w=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],B=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await wo.GetPositionFees(y,g,w,B),I=await wo.GetPositionRewards(y,g,w,B);g.tokenFeeAmountA=x.gte(new Ee(0))?x:new Ee(0),g.tokenFeeAmountB=K.gte(new Ee(0))?K:new Ee(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ee(0))?I[C]:new Ee(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new F(0),catchLiquidityInsufficient:c=!1}){var R;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 F(0))?u=l?Yt.add(new Ee(1)):Qt.sub(new Ee(1)):u=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Ce(o,m,i,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=Me.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((R=p.fee)!=null?R:Xe),u,c),k=Ce(y,d,i,!1),T=ue.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new F(1).div(T),w=y.mul(new Ee(Math.floor((1-s)*1e10))).div(new Ee(1e10)),B=Ce(w,d,i,!1),x=l?e.currentPrice:new F(1).div(e.currentPrice),K=new F(h).sub(x).abs(),I=x,C=new rt(new F(K).mul(10**15).toFixed(0),new F(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:B,expirationTime:nn(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ue(q(_({},u),{mint:u.address,isToken2022:u.programId===Ec.toBase58()})),new Ue(q(_({},l),{mint:l.address,isToken2022:l.programId===Ec.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:k,priceImpact:T,fee:h,remainingAccounts:w,executionPriceX64:B}=Me.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Et(u.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),x=q(_({},f),{amount:new Ke(m,f.amount),fee:f.fee===void 0?void 0:new Ke(m,f.fee)}),K=q(_({},y),{amount:new Ke(d,y.amount),fee:y.fee===void 0?void 0:new Ke(d,y.fee)}),I=q(_({},b),{amount:new Ke(d,b.amount),fee:b.fee===void 0?void 0:new Ke(d,b.fee)}),C=new xt({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:A.mul(new F(10**(20+d.decimals))).toFixed(0)}),R=new xt({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:k.mul(new F(10**(20+d.decimals))).toFixed(0)}),N=new Ke(m,h);return{allTrade:p,realAmountIn:x,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:R,priceImpact:T,fee:N,remainingAccounts:w,executionPriceX64:B}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:o,slippage:s,priceLimit:a=new F(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 F(0))?l=c?Qt.sub(new Ee(1)):Yt.add(new Ee(1)):l=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Ce(o,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=Me.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:Xe),l),b=c?e.mintB.address:e.mintA.address,g=Ce(d,u[b],i,!1),A=ue.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?A:new F(1).div(A),T=d.mul(new Ee(Math.floor((1+s)*1e10))).div(new Ee(1e10)),h=Ce(T,u[b],i,!0),w=c?e.currentPrice:new F(1).div(e.currentPrice),B=new F(k).sub(w).abs(),x=w,K=new rt(new F(B).mul(10**15).toFixed(0),new F(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:nn(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,y,b;let o=e[t],s=$.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=$.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-c,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[((f=o.rewardApr[0])!=null?f:0)*p,((y=o.rewardApr[1])!=null?y:0)*p,((b=o.rewardApr[2])!=null?b:0)*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[ft(e.mintA.address).toString()],d=i[ft(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=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),b=ue.getSqrtPriceX64FromTick(s),g=ue.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,o,!1,!1,0),w=new F(A.toString()).div(new F(10).pow(p)).mul(m.value).add(new F(k.toString()).div(new F(10).pow(f)).mul(d.value)),B=new F(T.toString()).div(new F(10).pow(p)).mul(m.value).add(new F(h.toString()).div(new F(10).pow(f)).mul(d.value)),x=new F(1).div(w.add(B)),I=new F(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,R=e.rewardDefaultInfos.map(N=>{var v,Y;let O=N.mint.decimals,L=i[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((Y=N.endTime)!=null?Y:0)||!N.perSecond||!L||O===void 0?0:new F(L.value).mul(new F(N.perSecond).mul(C)).div(new F(10).pow(O)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:R,apr:I+R.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),m=ue.getSqrtPriceX64FromTick(n),d=ue.getSqrtPriceX64FromTick(i),p=Ce(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ee(new F(p.amount.sub((A=p.fee)!=null?A:Xe).toString()).toFixed(0)),y;if(l.lte(m))y=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ee(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?k:T}else y=t?new Ee(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let b=await Me.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:y,slippage:s,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:i,liquidity:o,slippage:s,add:a}){var b,g,A,k;let c=ue.getSqrtPriceX64FromTick(n),u=ue.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=Ie.getAmountsFromLiquidity(ue.priceToSqrtPriceX64(new F(t.price),t.mintA.decimals,t.mintB.decimals),c,u,o,a),[d,p]=[Ce(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Ce(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Ce(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),Ce(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:nn(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new Et(c.id));(await $t(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=oi.decode(c.data))});let s=t.map(c=>je(new Et(c.programId),new Et(c.id)).publicKey),a=await Me.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>q(_({},c),{[u.id]:q(_({},n[u.id]),{id:new Et(u.id),version:6,programId:new Et(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(_({},u.config),{id:new Et(u.config.id),fundOwner:""}),currentPrice:new F(u.price),exBitmapAccount:je(new Et(u.programId),new Et(u.id)).publicKey,exBitmapInfo:a[je(new Et(u.programId),new Et(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var pa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wc(r){return q(_({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:pa,week:pa,month:pa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(_({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var de=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(Xe)||(o=o.add(Vt)),o}static mulDivFloor(e,t,n){if(n.eq(Xe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Xe))throw new Error("division by 0");return e.mul(t).add(n.sub(Vt)).div(n)}static x64ToDecimal(e,t){return new F(e.toString()).div(F.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new be(e.mul(F.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Cr).sub(t).mod(Cr)}};function ut(r,e){return fa(r.mul(e),64,256)}function Rp(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function fa(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ue=class{static sqrtPriceX64ToPrice(e,t,n){return de.x64ToDecimal(e).pow(2).mul(F.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return de.decimalToX64(e.mul(F.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(Xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(Xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(Xe))return e;let o=t.shln(go);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?de.mulDivCeil(s,e,a):de.mulDivRoundingUp(s,Vt,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return de.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(go);if(i)return e.add(o.div(t));{let s=de.mulDivRoundingUp(o,Vt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<Pt||e>kt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new be("18445821805675395072"):new be("18446744073709551616");return(t&2)!=0&&(n=ut(n,new be("18444899583751176192"))),(t&4)!=0&&(n=ut(n,new be("18443055278223355904"))),(t&8)!=0&&(n=ut(n,new be("18439367220385607680"))),(t&16)!=0&&(n=ut(n,new be("18431993317065453568"))),(t&32)!=0&&(n=ut(n,new be("18417254355718170624"))),(t&64)!=0&&(n=ut(n,new be("18387811781193609216"))),(t&128)!=0&&(n=ut(n,new be("18329067761203558400"))),(t&256)!=0&&(n=ut(n,new be("18212142134806163456"))),(t&512)!=0&&(n=ut(n,new be("17980523815641700352"))),(t&1024)!=0&&(n=ut(n,new be("17526086738831433728"))),(t&2048)!=0&&(n=ut(n,new be("16651378430235570176"))),(t&4096)!=0&&(n=ut(n,new be("15030750278694412288"))),(t&8192)!=0&&(n=ut(n,new be("12247334978884435968"))),(t&16384)!=0&&(n=ut(n,new be("8131365268886854656"))),(t&32768)!=0&&(n=ut(n,new be("3584323654725218816"))),(t&65536)!=0&&(n=ut(n,new be("696457651848324352"))),(t&131072)!=0&&(n=ut(n,new be("26294789957507116"))),(t&262144)!=0&&(n=ut(n,new be("37481735321082"))),e>0&&(n=xc.div(n)),n}static getTickFromPrice(e,t,n){return ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Qt)||e.lt(Yt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new be(t-64),i=Rp(n,32,128),o=new be("8000000000000000","hex"),s=0,a=new be(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new be(0))&&s<Sc;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(o.mul(f)),o=o.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new be(Kc)),d=fa(m.sub(new be(Cc)),64,128).toNumber(),p=fa(m.add(new be(Rc)),64,128).toNumber();return d==p?d:ue.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ri=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let o=ri.getTickWithPriceAndTickspacing(e,t,n,i),s=ue.getSqrtPriceX64FromTick(o);return ue.sqrtPriceX64ToPrice(s,n,i)}},Ie=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Xe))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(go),s=t.sub(e);return i?de.mulDivRoundingUp(de.mulDivCeil(o,s,t),Vt,e):de.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Xe))throw new Error("sqrtPriceX64A must greater than 0");return i?de.mulDivCeil(n,t.sub(e),et):de.mulDivFloor(n,t.sub(e),et)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?de.mulDivRoundingUp(a,Vt,bo):a.shrn(go)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),de.mulDivFloor(n,bo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Ie.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=Ie.getLiquidityFromTokenAmountA(e,n,i,!1),a=Ie.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return Ie.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Ie.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new be(0)};if(e.lt(n)){let s=Ie.getTokenAmountAFromLiquidity(e,n,i,o),a=Ie.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new be(0),amountB:Ie.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:c,amountB:u}=Ie.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new be(new F(c.toString()).mul(l).toFixed(0)),d=new be(new F(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:c}){var A,k,T,h;let u=ue.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),l=ue.getSqrtPriceX64FromTick(t),m=ue.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=Ie.getAmountsFromLiquidity(u,l,m,i,s),[f,y]=[Ce(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),Ce(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[b,g]=[Ce(new be(new F(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Ce(new be(new F(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:nn(f.expirationTime,y.expirationTime)}}},ii=class{static swapCompute(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y=!1){if(d.eq(Xe))throw new Error("amountSpecified must not be 0");if(f||(f=s?Yt.add(Vt):Qt.sub(Vt)),s){if(f.lt(Yt))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(Qt))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(Xe),g={amountSpecifiedRemaining:d,amountCalculated:Xe,sqrtPriceX64:m,tick:u>p?Math.min(p+Te.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new be(0)},A=p,k=n[p],T=0,h=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Xe)&&!g.sqrtPriceX64.eq(f);){T>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let B=$.nextInitTick(k,g.tick,l,s,h),x=B||null,K=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=Me.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},A,s);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:R}=he(e,t,A);K=R,k=n[A];try{x=$.firstInitializedTick(k,s)}catch{throw Error("not found next tick info")}}w.tickNext=x.tick,w.initialized=x.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),w.tickNext<Pt?w.tickNext=Pt:w.tickNext>kt&&(w.tickNext=kt),w.sqrtPriceNextX64=ue.getSqrtPriceX64FromTick(w.tickNext);let I;if(s&&w.sqrtPriceNextX64.lt(f)||!s&&w.sqrtPriceNextX64.gt(f)?I=f:I=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=ii.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(w.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(w.amountIn.add(w.feeAmount)),g.amountCalculated=g.amountCalculated.sub(w.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(w.amountOut),g.amountCalculated=g.amountCalculated.add(w.amountIn.add(w.feeAmount))),g.sqrtPriceX64.eq(w.sqrtPriceNextX64)){if(w.initialized){let C=x.liquidityNet;s&&(C=C.mul(Pn)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=w.tickNext!=g.tick&&!s&&k.startTickIndex===w.tickNext,g.tick=s?w.tickNext-1:w.tickNext}else if(g.sqrtPriceX64!=w.sqrtPriceStartX64){let C=ue.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!s&&k.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:w,isExist:B}=Te.nextInitializedTickArray(g.tick,l,s,i,o);B&&p!==w&&(g.accounts.push(he(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Xe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,o,s){let a={sqrtPriceX64Next:new be(0),amountIn:new be(0),amountOut:new be(0),feeAmount:new be(0)},c=i.gte(Xe);if(c){let l=de.mulDivFloor(i,Nr.sub(new be(o.toString())),Nr);a.amountIn=s?Ie.getTokenAmountAFromLiquidity(t,e,n,!0):Ie.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromInput(e,n,l,s)}else a.amountOut=s?Ie.getTokenAmountBFromLiquidity(t,e,n,!1):Ie.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Pn).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromOutput(e,n,i.mul(Pn),s);let u=t.eq(a.sqrtPriceX64Next);return s?(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(i.mul(Pn))&&(a.amountOut=i.mul(Pn)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=i.sub(a.amountIn):a.feeAmount=de.mulDivCeil(a.amountIn,new be(o),Nr.sub(new be(o))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var tt=60,ni=512,$=class{static getTickArrayAddressByTick(e,t,n,i){let o=$.getTickArrayStartIndexByTick(n,i),{publicKey:s}=he(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=$.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=tt)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=Te.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Te.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*tt,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*tt,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*tt:e+t*tt}static mergeTickArrayBitmap(e){let t=new Lp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,o){let s=Math.floor(i/(n*tt));return[...$.searchLowBitFromStart(e,t,s-1,o,n),...$.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,ni,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=$.getAllInitializedTickArrayStartIndex(n,i,o);for(let c of a){let{publicKey:u}=he(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...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(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=Te.tickCount(o);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...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(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=Te.tickCount(o);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Pt||e>kt}static nextInitTick(e,t,n,i,o){if(Te.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<tt;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=tt-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<tt;){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 i=ue.getSqrtPriceX64FromTick(t),o=ue.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=ri.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(o),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ue.getSqrtPriceX64FromTick(t),o=ue.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=ri.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(o),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}};var qc=V([Be(8),E("bump"),Ft("index"),M(""),gt("protocolFeeRate"),gt("tradeFeeRate"),Ft("tickSpacing"),H(P(),8,"")]),Np=V([gt("blockTimestamp"),Si("tickCumulative"),H(P(),4)]),Uc=V([Be(8),Ge("initialized"),P("recentEpoch"),Ft("observationIndex"),M("poolId"),H(Np,100,"observations"),H(P(),4)]),Op=V([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),oe("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),M("tokenMint"),M("tokenVault"),M("creator"),oe("rewardGrowthGlobalX64")]),oi=V([Be(8),E("bump"),M("ammConfig"),M("creator"),M("mintA"),M("mintB"),M("vaultA"),M("vaultB"),M("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Ft("tickSpacing"),oe("liquidity"),oe("sqrtPriceX64"),Ve("tickCurrent"),gt(),oe("feeGrowthGlobalX64A"),oe("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),oe("swapInAmountTokenA"),oe("swapOutAmountTokenB"),oe("swapInAmountTokenB"),oe("swapOutAmountTokenA"),E("status"),H(E(),7,""),H(Op,3,"rewardInfos"),H(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),H(P(),15*4-3,"padding")]),Mp=V([oe("growthInsideLastX64"),P("rewardAmountOwed")]),Li=V([Be(8),E("bump"),M("nftMint"),M("poolId"),Ve("tickLower"),Ve("tickUpper"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),H(Mp,3,"rewardInfos"),H(P(),8,"")]),LT=V([Be(8),E("bump"),M("poolId"),Ve("tickLowerIndex"),Ve("tickUpperIndex"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),H(oe(),3,"rewardGrowthInside"),H(P(),8,"")]),vp=V([Ve("tick"),rc("liquidityNet"),oe("liquidityGross"),oe("feeGrowthOutsideX64A"),oe("feeGrowthOutsideX64B"),H(oe(),3,"rewardGrowthsOutsideX64"),H(gt(),13,"")]),ko=V([Be(8),M("poolId"),Ve("startTickIndex"),H(vp,tt,"ticks"),E("initializedTickCount"),H(E(),115,"")]),Gc=V([Be(329),H(M(),100,"whitelistMints")]),Dc=V([Be(8),M("poolId"),H(H(P(),8),da,"positiveTickArrayBitmap"),H(H(P(),8),da,"negativeTickArrayBitmap")]),NT=V([P(),E("bump"),M("owner"),M("poolId"),M("positionId"),M("nftAccount"),H(P(),8)]),Xc=V([Be(8),E("bump"),M("lockOwner"),M("poolId"),M("positionId"),M("nftAccount"),M("lockNftMint"),P("recentEpoch"),H(P(),8)]);Uc.span;var zc=we("Raydium_Clmm"),Wt={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]},Yc=[188,37,179,131,82,150,84,73],Qc=[16,72,250,198,14,162,212,19],Le=class{static createPoolInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f){let y=V([oe("sqrtPriceX64"),P("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:Xe},g);let A=Buffer.from([...Wt.createPool,...g]);return new pt({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:o,ammConfigId:s,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new z(i.address),new z(o.address)],{publicKey:m}=vc(t,s,u,l),{publicKey:d}=_c(t,m),{publicKey:p}=ca(t,m,u),{publicKey:f}=ca(t,m,l),y=je(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,s,d,u,p,new z(i.programId||Re),l,f,new z(o.programId||Re),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,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K,I){let C=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),R=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...R],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:B,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let L=Buffer.from([...Wt.openPosition,...O]);return new pt({keys:N,programId:e,data:L})}static openPositionFromLiquidityInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K){let I=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:w,amountMaxB:B,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...Wt.openPositionWithTokenEx,...N]);return new pt({keys:R,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new z(e.programId),new z(e.id)],y;if(l)y=new z((await l(1))[0]);else{let K=Mr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?J(n.wallet,y,Ye):J(n.wallet,y,Re),{publicKey:h}=An(y),{publicKey:w}=ht(p,y),{publicKey:B}=rn(p,f,i,o),x=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0);return{signers:d,instructions:[x],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:B}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new z(e.programId),new z(e.id)],y;if(l)y=new z((await l(1))[0]);else{let K=Mr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?J(n.wallet,y,Ye):J(n.wallet,y,Re),{publicKey:h}=An(y),{publicKey:w}=ht(p,y),{publicKey:B}=rn(p,f,i,o),x=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),i,o,b,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:B},instructions:[x],signers:d,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K,I){let C=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),R=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...R],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ya(0),amountMaxA:B==="MintA"?x:K,amountMaxB:B==="MintA"?K:x,withMetadata:w==="create",baseFlag:B==="MintA",optionBaseFlag:1},O);let L=Buffer.from([...Wt.openPosition,...O]);return new pt({keys:N,programId:e,data:L})}static openPositionFromBaseInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,B,x,K){let I=V([Ve("tickLowerIndex"),Ve("tickUpperIndex"),Ve("tickArrayLowerStartIndex"),Ve("tickArrayUpperStartIndex"),oe("liquidity"),P("amountMaxA"),P("amountMaxB"),Ge("withMetadata"),E("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new ya(0),amountMaxA:w==="MintA"?B:x,amountMaxB:w==="MintA"?x:B,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...Wt.openPositionWithTokenEx,...N]);return new pt({keys:R,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new z((await l(1))[0]);else{let K=Mr.generate();p.push(K),d=K.publicKey}let[f,y]=[new z(e.programId),new z(e.id)],b=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:A}=he(f,y,b),{publicKey:k}=he(f,y,g),{publicKey:T}=m?J(n.wallet,d,Ye):J(n.wallet,d,Re),{publicKey:h}=An(d),{publicKey:w}=ht(f,d),{publicKey:B}=rn(f,y,i,o),x=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(t.mintA.address),new z(t.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,B,A,k,w,n.tokenAccountA,n.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(t.mintA.address),new z(t.mintB.address),i,o,b,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?je(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:B},instructions:[x],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o,s){let a=V([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:s?Ye:Re,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Wt.closePosition,...u]);return new pt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:o}){let s=new z(e.programId),a=o?J(n.wallet,i.nftMint,Ye).publicKey:J(n.wallet,i.nftMint,Re).publicKey,{publicKey:c}=ht(s,i.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,i.nftMint,a,c,o)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A){let k=V([oe("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ge("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let B=Buffer.from([...Wt.increaseLiquidity,...w]);return new pt({keys:h,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new z(e.programId),new z(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?J(i.wallet,n.nftMint,Ye):J(i.wallet,n.nftMint,Re),{publicKey:b}=ht(u,n.nftMint),{publicKey:g}=rn(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,b,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),o,s,a,Me.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:i,base:o,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new z(e.programId),new z(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?J(i.wallet,n.nftMint,Ye):J(i.wallet,n.nftMint,Re),{publicKey:b}=ht(u,n.nftMint),{publicKey:g}=rn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,b,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),o,s,a,Me.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,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A){let k=V([oe("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),Ge("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:new ya(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},w);let B=Buffer.from([...Wt.increaseLiquidity,...w]);return new pt({keys:h,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([oe("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],w=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:A},B);let x=Buffer.from([...Wt.decreaseLiquidity,...B]);return new pt({keys:w,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new z(e.programId),new z(e.id)],d=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=he(l,m,d),{publicKey:y}=he(l,m,p),{publicKey:b}=u?J(i.wallet,n.nftMint,Ye):J(i.wallet,n.nftMint,c),{publicKey:g}=ht(l,n.nftMint),{publicKey:A}=rn(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new z(t.rewardInfos[w].vault),ownerRewardVault:i.rewardAccounts[w],rewardMint:new z(e.rewardDefaultInfos[w].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,i.wallet,b,g,m,A,f,y,i.tokenAccountA,i.tokenAccountB,new z(t.vault.A),new z(t.vault.B),new z(e.mintA.address),new z(e.mintB.address),k,o,s,a,Me.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,i,o,s,a,c,u,l,m,d,p,f,y,b,g){let A=V([P("amount"),P("otherAmountThreshold"),oe("sqrtPriceLimitX64"),Ge("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let w=Buffer.from([...Wt.swap,...h]);return new pt({keys:T,programId:e,data:w})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new z(e.programId),new z(e.id)],[d,p]=[new z(t.vault.A),new z(t.vault.B)],[f,y]=[new z(e.mintA.address),new z(e.mintB.address)],b=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new z(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,s,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:i,outputMint:o,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new z(e.programId),new z(e.id)],[d,p]=[new z(t.vault.A),new z(t.vault.B)],[f,y]=[new z(e.mintA.address),new z(e.mintB.address)],b=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new z(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,s,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,i,o,s,a,c,u,l,m,d){let p=V([P("openTime"),P("endTime"),oe("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:ee(l),endTime:ee(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...Wt.initReward,...y]);return new pt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new z(e.programId),new z(e.id)],a=Fc(o,s,i.mint).publicKey,c=Ao(o).publicKey,u=[this.initRewardInstruction(o,n.wallet,s,c,new z(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=V([E("rewardIndex"),oe("emissionsPerSecondX64"),P("openTime"),P("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:ee(l),endTime:ee(m)},y);let b=Buffer.from([...Wt.setRewardEmissions,...y]);return new pt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new z(e.programId),new z(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new z(t.rewardInfos[d].vault),u=new z(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Ao(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new z(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let c=V([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Wt.collectReward,...l]);return new pt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new z(e.programId),new z(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new z(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,c,i,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:i,wallet:o,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new z((await c(1))[0]);else{let g=Mr.generate();u.push(g),l=g.publicKey}let m=a?J(o,s,Ye).publicKey:J(o,s,Re).publicKey,{publicKey:d}=ht(n,s),p=Ri(e,l).publicKey,f=J(o,l,Re).publicKey,y=An(l).publicKey,b=Le.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:o,lockOwner:o,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:J(t,s,a?Ye:Re).publicKey,positionNftProgram:a?Ye:Re});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:i,lockOwner:o,positionNftAccount:s,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:i,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:qt,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}],g=V([Ge("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...Yc,...A]);return new pt({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:o}){let{publicKey:s}=J(i,o,Re),{publicKey:a}=ht(n,o),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:la(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}];return new pt({keys:c,programId:e,data:Buffer.from(Yc)})}static harvestLockPositionInstruction(e){let[t,n]=[new z(e.poolKeys.programId),new z(e.poolKeys.id)],i=$.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),o=$.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=he(t,n,i),{publicKey:a}=he(t,n,o),{publicKey:c}=J(e.owner,e.ownerPosition.nftMint,Re),{publicKey:u}=ht(t,e.ownerPosition.nftMint),{publicKey:l}=rn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new z(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new z(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:la(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 z(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new z(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:On,isSigner:!1,isWritable:!1},{pubkey:new z(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new z(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new pt({keys:p,programId:e.programId,data:Buffer.from(Qc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:o,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:T,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],B=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,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:Re,isSigner:!1,isWritable:!1},{pubkey:Ye,isSigner:!1,isWritable:!1},{pubkey:On,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new pt({keys:B,programId:e,data:Buffer.from(Qc)})}};var Fp=V([gt("mintAuthorityOption"),M("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),gt("freezeAuthorityOption"),M("freezeAuthority")]);import{PublicKey as JT}from"@solana/web3.js";import{MintLayout as tI,TOKEN_PROGRAM_ID as iI}from"@solana/spl-token";var vr=r=>new Ue({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),Io=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=De(o,["amount","isRaw","name"]);return new Ke(new Ue({mint:ft(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};var At=i=>{var o=i,{address:r,programId:e,decimals:t}=o,n=De(o,["address","programId","decimals"]);return _({chainId:101,address:ft(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Wn=r=>r?q(_({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:q(_({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(_({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import Hc from"bn.js";var ba=new Hc(25),Fr=new Hc(1e4);import{PublicKey as dn,SystemProgram as Vp,SYSVAR_RENT_PUBKEY as hI,TransactionInstruction as Ni}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ep,TOKEN_PROGRAM_ID as xo}from"@solana/spl-token";var ga=V([E("instruction"),P("amountIn"),P("minAmountOut")]),Pa=V([E("instruction"),P("maxAmountIn"),P("amountOut")]),PI=V([E("instruction"),E("nonce")]),_p=V([E("instruction"),E("nonce"),P("startTime")]),Bo=V([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),P("swapBase2QuoteFee"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),P("swapQuote2BaseFee"),M("baseVault"),M("quoteVault"),M("baseMint"),M("quoteMint"),M("lpMint"),M("openOrders"),M("marketId"),M("marketProgramId"),M("targetOrders"),M("withdrawQueue"),M("lpVault"),M("owner"),P("lpReserve"),H(P(),3,"padding")]),AI=V([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),M("baseVault"),M("quoteVault"),M("baseMint"),M("quoteMint"),M("lpMint"),M("modelDataAccount"),M("openOrders"),M("marketId"),M("marketProgramId"),M("targetOrders"),M("owner"),H(P(),64,"padding")]),Aa=V([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),wa=V([E("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var jc=V([P("fee")]);var Zc=we("Raydium_liquidity_instruction");function $c(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s,otherAmountMin:a,modelDataPubKey:c=Hn}=r,u=Buffer.alloc(Aa.span);Aa.encode({instruction:3,baseAmountIn:ee(i),quoteAmountIn:ee(o),otherAmountMin:ee(a),fixedSide:s==="base"?St:Ru},u);let l=[S({pubkey:xo,isWritable:!1}),S({pubkey:new dn(e.id)}),S({pubkey:new dn(t.authority),isWritable:!1}),S({pubkey:new dn(t.openOrders),isWritable:!1}),S({pubkey:new dn(t.targetOrders)}),S({pubkey:new dn(e.lpMint.address)}),S({pubkey:new dn(t.vault.A)}),S({pubkey:new dn(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new dn(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 dn(t.marketEventQueue),isWritable:!1})),new Ni({programId:new dn(e.programId),keys:l,data:u})}function ka(r){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:o,quoteAmountMin:s,modelDataPubKey:a=Hn}=r,c=mt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(wa.span);wa.encode({instruction:4,lpAmount:ee(i),baseAmountMin:ee(o),quoteAmountMin:ee(s)},l);let m=[S({pubkey:xo,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 Ni({programId:c.programId,keys:m,data:l})}return new Ni({programId:c.programId,keys:[]})}function ha({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:T,pcAmount:h,ammConfigId:w,feeDestinationId:B}){let x=V([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:xo,isSigner:!1,isWritable:!1},{pubkey:Ep,isSigner:!1,isWritable:!1},{pubkey:Vp.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:B,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(x.span);return x.encode({instruction:1,nonce:A,openTime:k,coinAmount:T,pcAmount:h},I),{instruction:new Ni({keys:K,programId:r,data:I}),instructionType:X.AmmV4CreatePool}}function Wp({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:i=Hn},o){let s=mt(r),a=Buffer.alloc(ga.span);ga.encode({instruction:9,amountIn:ee(t),minAmountOut:ee(n)},a);let c=[S({pubkey:xo,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.openOrders})];return o===4&&c.push(S({pubkey:s.targetOrders})),c.push(S({pubkey:s.vault.A}),S({pubkey:s.vault.B})),o===5&&c.push(S({pubkey:i})),c.push(S({pubkey:s.marketProgramId,isWritable:!1}),S({pubkey:s.marketId}),S({pubkey:s.marketBids}),S({pubkey:s.marketAsks}),S({pubkey:s.marketEventQueue}),S({pubkey:s.marketBaseVault}),S({pubkey:s.marketQuoteVault}),S({pubkey:s.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Ni({programId:s.programId,keys:c,data:a})}function Dp({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:i=Hn},o){let s=mt(r),a=Buffer.alloc(Pa.span);Pa.encode({instruction:11,maxAmountIn:ee(t),amountOut:ee(n)},a);let c=[S({pubkey:xo,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.openOrders}),S({pubkey:s.targetOrders}),S({pubkey:s.vault.A}),S({pubkey:s.vault.B})];return o===5&&c.push(S({pubkey:i})),c.push(S({pubkey:s.marketProgramId,isWritable:!1}),S({pubkey:s.marketId}),S({pubkey:s.marketBids}),S({pubkey:s.marketAsks}),S({pubkey:s.marketEventQueue}),S({pubkey:s.marketBaseVault}),S({pubkey:s.marketQuoteVault}),S({pubkey:s.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Ni({programId:s.programId,keys:c,data:a})}function _r(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Wp(q(_({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Dp(q(_({},a),{maxAmountIn:i,amountOut:o}),t);Zc.logWithError("invalid params","params",r)}throw Zc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var ai=5e4,qp=V([P("x"),P("y"),P("price")]),Up=V([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),H(qp,ai,"DataElement")]);function Gp(r,e){return[0,ai-2]}function Xp(r){return[0,ai-2]}function zp(r){return[0,ai-2]}function Yp(r,e,t){let[n,i]=Gp(e,t),o=n,s=i,a=0,c=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=ai-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.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)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Ta(r,e,t){let[n,i,o]=Yp(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[i].x,u=r.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function si(r,e,t){return e*r.multiplier/t}function Jc(r,e,t){return e*t/r.multiplier}function Qp(r,e){let[t,n]=Xp(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ai-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)o=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function Hp(r,e){let[t,n]=zp(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ai-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function el(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Qp(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].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-(i-c)*r.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-i)*r.multiplier/l),[f,y,!1,a]}}}function jp(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Hp(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].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-i)/r.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(i-p)/r.multiplier),[f,y,!1,a]}}}function Zp(r,e){let t=el(r,e,0,!1);return t[3]?t[0]:0}function tl(r,e,t,n){let i=Ta(r,e,t),o=si(r,e,i),s=si(r,t,i),a=si(r,n,i),c=!0,[u,l,m,d]=el(r,o,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return Jc(r,p,i)}}function nl(r,e,t,n){let i=Ta(r,e,t),o=si(r,e,i),s=si(r,t,i),a=si(r,n,i),c=!1,[u,l,m,d]=jp(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=o-l;return Jc(r,p,i)}}function $p(r){let e=Up.decode(r);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 il(r,e,t,n){let i=Zp(r,si(r,e,Ta(r,e,t)))/r.multiplier;return n?i:1/i}var So=class{constructor({connection:e,modelDataPubKey:t=Hn}){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=$p(e==null?void 0:e.data))}}};import{PublicKey as tf}from"@solana/web3.js";import $I from"bn.js";import{TOKEN_PROGRAM_ID as nf}from"@solana/spl-token";import{PublicKey as Jp}from"@solana/web3.js";var ef=we("Raydium_liquidity_serum");function ol({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=Jp.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw ef.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}function Vr({programId:r}){let{publicKey:e}=ce([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function ui({name:r,programId:e,marketId:t}){let{publicKey:n}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function of({programId:r,marketId:e}){let{publicKey:t}=ce([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function Ba({programId:r}){return ce([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function xa({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:c}){let u=ui({name:"amm_associated_seed",programId:a,marketId:t}),l=ui({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Ba({programId:a}),p=ui({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=ui({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=ui({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=of({programId:a,marketId:t}),g=ui({name:"target_associated_seed",programId:a,marketId:t}),A=ui({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=ol({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:tf.default,configId:Vr({programId:a})}}var Ia={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Er=r=>{let e={},t=nf.toBase58();return Object.keys(r).map(n=>{let i=r[n],[o,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:At({address:o,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:At({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new F(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new F(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new F(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:Ia,week:Ia,month:Ia,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Vr({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:new F(i.lpReserve.toString()).div(10**Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())).toNumber(),lpMint:At({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Qe from"bn.js";import{PublicKey as Ko}from"@solana/web3.js";import Co from"bn.js";import{TOKEN_PROGRAM_ID as ul}from"@solana/spl-token";import{SystemProgram as ci,SYSVAR_RENT_PUBKEY as sf,Transaction as rl,TransactionInstruction as af}from"@solana/web3.js";import{createInitializeAccountInstruction as sl,TOKEN_PROGRAM_ID as al}from"@solana/spl-token";function rf(r="accountFlags"){let e=new xr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Sa=V([Be(5),rf("accountFlags"),M("ownAddress"),P("vaultSignerNonce"),M("baseMint"),M("quoteMint"),M("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),M("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),M("requestQueue"),M("eventQueue"),M("bids"),M("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Be(7)]);function uf({programId:r,marketInfo:e}){let t=V([E("version"),gt("instruction"),P("baseLotSize"),P("quoteLotSize"),Ft("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:sf,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}:[]),i=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},i),new af({keys:n,programId:r,data:i})}async function Wr({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new rl,i=await r.getMinimumBalanceForRentExemption(165);n.add(ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:al}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:al}),sl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),sl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(Sa.span),space:Sa.span,programId:t.programId}));let o=new rl;return o.add(ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),ci.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),uf({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:o,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var Oi=class extends _e{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,requestQueueSpace:s,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=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-market`}),A=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-request`}),k=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-event`}),T=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-bids`}),h=He({fromPublicKey:y,programId:o,assignSeed:b&&`${b}-asks`}),w=He({fromPublicKey:y,programId:ul,assignSeed:b&&`${b}-baseVault`}),B=He({fromPublicKey:y,programId:ul,assignSeed:b&&`${b}-quoteVault`}),x=0,K=new Co(100);function I(){let Y=new Co(0);for(;;)try{return{vaultOwner:Ko.createProgramAddressSync([g.publicKey.toBuffer(),Y.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:Y}}catch{if(Y.iaddn(1),Y.gt(new Co(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:R}=I(),N=new Co(Math.round(10**e.decimals*n)),O=new Co(Math.round(n*10**t.decimals*i));if(N.eq(St))throw Error("lot size is too small");if(O.eq(St))throw Error("tick size or lot size is too small");let L=await Wr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:B,vaultOwner:C,requestQueue:A,eventQueue:k,bids:T,asks:h,feeRateBps:x,quoteDustThreshold:K,vaultSignerNonce:R,baseLotSize:N,quoteLotSize:O,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:L[0].transaction.instructions,signers:L[0].signer});for await(let Y of L.slice(1,L.length))v.addInstruction({instructions:Y.transaction.instructions,signers:Y.signer,instructionTypes:Y.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:B.publicKey,baseMint:new Ko(e.mint),quoteMint:new Ko(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:B.publicKey,baseMint:new Ko(e.mint),quoteMint:new Ko(t.mint)}})}};var Ro=class extends _e{constructor(t){super(t);this.stableLayout=new So({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:vt.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new Qe(new F(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=vr(t[o?"mintB":"mintA"]),[c,u]=[new Qe(new F(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Qe(new F(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Qe(new F(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=St;s.isZero()||(d=m==="base"?ur(s.mul(u),c):ur(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=ur(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new rt(new Qe(1)).add(i),y=new rt(new Qe(1)).sub(i),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Ke(a,d),k=new Ke(a,b),T=new Ke(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:T,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:o,amountInB:s,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:",o,"amountInB:",s),(o.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:o.toFixed(),amountInB:s.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[o.token,s.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new $e(n.lpMint.address)}),w=[g,A],B=[k,T],x=[o.raw,s.raw],K=o.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),B.reverse(),x.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,R]=w,[N,O]=B,[L,v]=x,Y=i!=null?i:await this.getAmmPoolKeys(n.id),Q=this.createTxBuilder(p),te=await f.handleTokenAccount({side:"in",amount:L,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:pe}=te,ke=De(te,["tokenAccount"]);Q.addInstruction(ke);let me=await f.handleTokenAccount({side:"in",amount:v,mint:R.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:le}=me,Pe=De(me,["tokenAccount"]);Q.addInstruction(Pe);let We=await f.handleTokenAccount({side:"out",amount:0,mint:new $e(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:Ae}=We,ye=De(We,["tokenAccount"]);return Q.addInstruction(ye),Q.addInstruction({instructions:[$c({poolInfo:n,poolKeys:Y,userKeys:{baseTokenAccount:pe,quoteTokenAccount:le,lpTokenAccount:Ae,owner:this.scope.ownerPubKey},baseAmountIn:L,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),Q.addCustomComputeBudget(m),Q.addTipInstruction(d),l===0?await Q.buildV0():Q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:o,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=i!=null?i:await this.getAmmPoolKeys(n.id),[f,y,b]=[new $e(n.mintA.address),new $e(n.mintB.address),new $e(n.lpMint.address)];this.logDebug("lpAmount:",o),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),o.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",o.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:B}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),R=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:B}),{tokenAccount:x}=R,K=De(R,["tokenAccount"]);h.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:w,checkCreateATAOwner:B}),{tokenAccount:I}=N,C=De(N,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[ka({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:x,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:o,baseAmountMin:s,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:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Dn,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 Y of this.scope.account.tokenAccountRawInfos)(A[Y.accountInfo.mint.toString()]===void 0||J(this.scope.ownerPubKey,Y.accountInfo.mint,Dn).publicKey.equals(Y.pubkey))&&(A[Y.accountInfo.mint.toString()]=Y.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let T=i.add(a!=null?a:new Qe(0)),h=t.mintA.address===Ue.WSOL.mint.toString(),w=t.mintB.address===Ue.WSOL.mint.toString(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(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(x||{}),B===void 0)throw new Error("base token account not found");let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),K===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=B,A[t.mintB.address]=K,s!==void 0&&!(a!=null&&a.isZero())){let Y=Ut[s.programId],Q=Gt({programId:new $e(s.programId),poolId:new $e(s.id),owner:this.scope.ownerPubKey,version:Y}),pe,ke=await this.scope.connection.getAccountInfo(Q);if(ke&&(pe=uo(Y).decode(ke.data)),Y!==6&&!pe){let{instruction:We,instructionType:fn}=lo({id:new $e(s.id),programId:new $e(s.programId),version:Y,ledger:Q,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[We],instructionTypes:[fn]})}let le=[];for(let We of s.rewardInfos){let fn=We.mint.address===Ue.WSOL.mint.toString();if(A[We.mint.address])le.push(A[We.mint.address]);else{let{account:Sn,instructionParams:ct}=await this.scope.account.getOrCreateTokenAccount({mint:new $e(We.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!fn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Sn||this.logAndCreateError("farm reward account not found:",We.mint.address),ct&&g.addInstruction(ct),le.push(Sn)}}let Pe=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ae={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Pe,lpAccount:k,rewardAccounts:le},ye=Ut[s.programId],te=ye===6?mo(Ae):ye===5?po(Ae):fo(Ae),me={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[te],instructionTypes:[me[ye]]})}let C=await this.getAmmPoolKeys(t.id),R=ka({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:B,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[B,K]:[K,B],L=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Le.openPositionFromBaseInstructions(q(_({poolInfo:n,poolKeys:L,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},o),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let A=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),k=u.useSOLBalance&&i.mint.equals(Dr),T=u.useSOLBalance&&o.mint.equals(Dr),h=this.createTxBuilder(g),{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:s}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(B||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:A,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||x===void 0)throw Error("you don't has some token account");let I=xa({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.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:R,instructionType:N}=ha(q(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:x,userLpVault:J(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:s,pcAmount:a}));return h.addInstruction({instructions:[R],instructionTypes:[N]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=dr,marketProgram:n=Wu,feeDestinationId:i=qu,tokenProgram:o,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:T,feePayer:h}){var Pi,Ui,Gi;let w=this.scope.ownerPubKey,B=m.feePayer||((Pi=this.scope.owner)==null?void 0:Pi.publicKey),x=m.useSOLBalance&&s.mint.equals(Dr),K=m.useSOLBalance&&a.mint.equals(Dr),I=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-market`}),R=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-request`}),N=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-event`}),O=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-bids`}),L=He({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-asks`}),v=He({fromPublicKey:w,programId:Dn,assignSeed:I&&`${I}-baseVault`}),Y=He({fromPublicKey:w,programId:Dn,assignSeed:I&&`${I}-quoteVault`}),Q=0,pe=new Qe(100);function ke(){let Mt=new Qe(0);for(;;)try{return{vaultOwner:$e.createProgramAddressSync([C.publicKey.toBuffer(),Mt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Mt}}catch{if(Mt.iaddn(1),Mt.gt(new Qe(25555)))throw Error("find vault owner error")}}let{vaultOwner:le,vaultSignerNonce:Pe}=ke(),Ae=new Qe(Math.round(10**s.decimals*b)),ye=new Qe(Math.round(b*10**a.decimals*g));if(Ae.eq(St))throw Error("lot size is too small");if(ye.eq(St))throw Error("tick size or lot size is too small");let te=await Wr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:le,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:Y,requestQueue:R,eventQueue:N,bids:O,asks:L,feeRateBps:Q,quoteDustThreshold:pe,vaultSignerNonce:Pe,baseLotSize:Ae,quoteLotSize:ye,lowestFeeMarket:d}}),me=this.createTxBuilder(h);me.addInstruction({instructions:te[0].transaction.instructions,signers:te[0].signer});for await(let Mt of te.slice(1,te.length))me.addInstruction({instructions:Mt.transaction.instructions,signers:Mt.signer,instructionTypes:Mt.instructionTypes});let{account:We,instructionParams:fn}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:B,amount:c}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&I?`${I}-wsol`:void 0});me.addInstruction(fn||{});let{account:Sn,instructionParams:ct}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:B,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&I?`${I}-wsol`:void 0});if(me.addInstruction(ct||{}),We===void 0)throw Error("you don't has base token account");if(Sn===void 0)throw Error("you don't has quote token account");let nt=xa({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Di={programId:t,ammId:nt.id,ammAuthority:nt.authority,ammOpenOrders:nt.openOrders,lpMint:nt.lpMint,coinMint:nt.baseMint,pcMint:nt.quoteMint,coinVault:nt.baseVault,pcVault:nt.quoteVault,withdrawQueue:nt.withdrawQueue,ammTargetOrders:nt.targetOrders,poolTempLp:nt.lpVault,marketProgramId:nt.marketProgramId,marketId:nt.marketId,ammConfigId:nt.configId,feeDestinationId:i},{instruction:qi,instructionType:bi}=ha(q(_({},Di),{userWallet:this.scope.ownerPubKey,userCoinVault:We,userPcVault:Sn,userLpVault:J(this.scope.ownerPubKey,nt.lpMint,o).publicKey,nonce:nt.nonce,openTime:l,coinAmount:c,pcAmount:u}));me.addInstruction({instructions:[qi],instructionTypes:[bi]});let gi=x||K?[((Ui=fn==null?void 0:fn.instructions)==null?void 0:Ui[0])||((Gi=ct==null?void 0:ct.instructions)==null?void 0:Gi[0])].filter(Mt=>!!Mt):void 0;return A===0?me.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:gi,address:_({requestQueue:R.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:L.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new $e(s.mint),quoteMint:new $e(a.mint)},Di)}):me.sizeCheckBuild({computeBudgetConfig:k,splitIns:gi,address:_({requestQueue:R.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:L.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new $e(s.mint),quoteMint:new $e(a.mint)},Di)})}async getCreatePoolFee({programId:t}){let n=Vr({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return jc.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){let[a,c]=[i.toString(),o.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,A=t.version===4,k;if(A)k=new F(y.toString()).div(10**g).div(new F(f.toString()).div(10**b));else{let N=il(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new F(1e6).div(N*1e6):k=new F(N*1e6).div(1e6)}let T=n,h=new Qe(0),w=new Qe(0);if(!T.isZero())if(A){w=Mn(T.mul(ba),Fr);let N=T.sub(w),O=f.add(N);h=y.mul(N).div(O)}else{w=T.mul(new Qe(2)).div(new Qe(1e4));let N=T.sub(w);p==="quote"?h=new Qe(tl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):h=new Qe(nl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let B=new Qe(new F(h.toString()).mul(1-s).toFixed(0)),x=h,K=B,I=new F(h.toString()).div(new F(T.sub(w).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new F(h.toString()).div(10**g).div(new F(T.sub(w).toString()).div(10**b)));let C=k.sub(I).div(k).mul(100);return{amountOut:x,minAmountOut:K,currentPrice:k,executionPrice:I,priceImpact:C,fee:w}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:o,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.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 F(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new F(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new F(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 F(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Qe(0),A=n;if(!A.isZero()){A.gt(y)&&(A=y.sub(new Qe(1)));let K=y.sub(A);g=f.mul(A).div(K).mul(Fr).div(Fr.sub(ba))}let k=new Qe(new F(g.toString()).mul(1+s).toFixed(0)),T=g,h=k;this.logDebug("amountIn:",new F(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new F(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!A.isZero()&&(w=new F(A.toString()).div(10**m.decimals).div(new F(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${w.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new F(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let B=b.mul(T.toString()),x=B.sub(n.toString()).abs().div(B);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:w,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:o,inputMint:s,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]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(w||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:k,associatedOnly:f});let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dn,mint:new $e(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(x||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:B,outputTokenUseSolBalance:T,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[_r({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:i,amountOut:o,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 i=await Oe(this.scope.connection,t.map(l=>({pubkey:new $e(l)})),n),o={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Bo.decode(m.accountInfo.data);o[String(t[l])]=q(_({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await Oe(this.scope.connection,s.map(l=>({pubkey:new $e(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Qe(cf.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(o)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=q(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new F(p.toString()).div(new F(10).pow(m.quoteDecimal.toString())).div(new F(d.toString()).div(new F(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Er({[t]:n}),o=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:o,poolKeys:s[0]}}};import{PublicKey as j}from"@solana/web3.js";import Tt from"bn.js";import{AccountLayout as cl,createAssociatedTokenAccountIdempotentInstruction as ll,TOKEN_2022_PROGRAM_ID as qn,TOKEN_PROGRAM_ID as Lo}from"@solana/spl-token";var No=class extends _e{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var B;let{programId:t,owner:n=((B=this.scope.owner)==null?void 0:B.publicKey)||j.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new Tt(new j(i.address).toBuffer()).gt(new Tt(new j(o.address).toBuffer()))?[o,i,new F(1).div(a)]:[i,o,a],A=ue.priceToSqrtPriceX64(g,y.decimals,b.decimals),k=[],T=[];y.programId===qn.toBase58()&&T.push(ma(t,new j(y.address)).publicKey),b.programId===qn.toBase58()&&T.push(ma(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((x,K)=>{x&&k.push(T[K])});let w=await Le.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:s.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:k});return f.addInstruction(w),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(_({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:b,feeRate:s.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Lc),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),w=n.useSOLBalance&&e.mintB.address===Z.toString(),[B,x]=s==="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||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),A.addInstruction(I||{});let{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(R||{}),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Le.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:q(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(O),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),w=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(k=B),A.addInstruction(x||{});let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(k===void 0||T===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),R=await Le.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(R),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:o,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=c.useSOLBalance&&t.mintA.address===Z.toString(),k=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:l});w&&(g=w),y.addInstruction(B||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),K=Le.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:o,amountMaxB:s,nft2022:(I=await this.scope.connection.getAccountInfo(i.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:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===Z.toString(),A=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(i==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k&&(y=k),f.addInstruction(T||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(w||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),x=Le.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:i,baseAmount:o,otherAmountMax:s,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(qn)});return f.addInstruction(x),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:x.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:o,amountMinA:s,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=o.useSOLBalance&&t.mintA.address===Z.toString(),g=o.useSOLBalance&&t.mintB.address===Z.toString(),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=T,h&&y.addInstruction(h);let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,B&&y.addInstruction(B);let x=[];for(let O of t.rewardDefaultInfos){let L=o.useSOLBalance&&O.mint.address===Z.toString(),v;if(O.mint.address===t.mintA.address)v=A;else if(O.mint.address===t.mintB.address)v=k;else{let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});v=Y,Q&&y.addInstruction(Q)}x.push(v)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(N=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:N.owner.equals(qn),C=await Le.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:x},liquidity:c,amountMinA:s,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let R=_({},C.address);if(o.closePosition){let O=await Le.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:I});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),R=_(_({},R),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:R}})}async lockPosition(e){var f;let{programId:t=eo,authProgramId:n=pr,poolProgramId:i=Qn,ownerPosition:o,payer:s,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Le.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:o.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(o.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=eo,authProgramId:n=pr,clmmProgram:i=Qn,poolKeys:o,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=o||await this.getClmmPoolKeys(s.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(s.positionId);b||this.logger.logWithError("position not found",s.positionId);let g=Li.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),k=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});T=w,B&&y.addInstruction(B);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:u});h=x,K&&y.addInstruction(K);let I={},C=[];for(let le of f.rewardInfos){let Pe=a.useSOLBalance&&le.mint.address===Z.toString(),Ae=I[le.mint.address];if(!Ae){let{account:ye,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(le.mint.programId),mint:new j(le.mint.address),notUseTokenAccount:Pe,owner:this.scope.ownerPubKey,skipCloseAccount:!Pe,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Pe?!1:c});Ae=ye,te&&y.addInstruction(te)}I[le.mint.address]=Ae,C.push(Ae)}let R=Ri(t,s.lockNftMint).publicKey,N=J(this.scope.ownerPubKey,s.lockNftMint,Lo).publicKey,O=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),L=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=he(new j(f.programId),s.poolId,O),{publicKey:Y}=he(new j(f.programId),s.poolId,L),{publicKey:Q}=rn(new j(f.programId),s.poolId,g.tickLower,g.tickUpper),pe=[];for(let le=0;le<f.rewardInfos.length;le++)pe.push({poolRewardVault:new j(f.rewardInfos[le].vault),ownerRewardVault:C[le],rewardMint:new j(f.rewardInfos[le].mint.address)});let ke=await Le.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:R,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:N,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:Q,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:v,tickArrayUpper:Y,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:pe,exTickArrayBitmap:je(i,s.poolId).publicKey});return y.addInstruction({instructions:[ke],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i,computeBudgetConfig:o,txTipConfig:s,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=Le.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(o),c.addTipInstruction(s),c.addInstruction(l).versionBuild({txVersion:i,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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 Tt(new F(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:i,checkCreateATAOwner:o});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Le.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:de.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of i)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of i){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 Tt(new F(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:o,checkCreateATAOwner:s});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=Le.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:de.decimalToX64(p.perSecond)}});d=_(_({},d),k.address),m.addInstruction(k)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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 Tt(new F(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:i,checkCreateATAOwner:o});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Le.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:de.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of i){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 Tt(new F(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:o,checkCreateATAOwner:s});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=Le.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:de.decimalToX64(p.perSecond)}});m.addInstruction(A),d=_(_({},d),A.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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:i,checkCreateATAOwner:o});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Le.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(s),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,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:i,checkCreateATAOwner:o});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Le.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(s),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!s||s.equals(new F(0))?T=g?Yt.add(new Tt(1)):Qt.sub(new Tt(1)):T=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,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=x,K&&b.addInstruction(K)}let w;if(!w){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=x,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Le.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new j(n),amountIn:i,amountOutMin:o,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!s||s.equals(new F(0))?T=n.toString()===e.mintB.address?Yt.add(new Tt(1)):Qt.sub(new Tt(1)):T=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,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=x,K&&b.addInstruction(K)}let w;if(!w){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=x,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Le.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new j(n),amountOut:i,amountInMax:o,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=eo,lockAuth:d=pr,clmmProgram:p=Qn}){var k,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)o?J(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 Oe(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var w,B;g[h.pubkey.toBase58()]=(B=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?B:null});let A=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(L=>!L.rewardAmountOwed.isZero())))continue;let w=h,B=i.useSOLBalance&&w.mintA.address===Z.toString(),x=i.useSOLBalance&&w.mintB.address===Z.toString(),K=f[w.mintA.address];if(!K)if(B){let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new j(w.mintA.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:o,checkCreateATAOwner:s});K=O,L&&A.addInstruction(L)}else{let O=new j(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintA.programId)),A.addInstruction({instructions:[ll(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new j(w.mintA.programId))]})}let I=f[w.mintB.address];if(!I)if(x){let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new j(w.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:o,checkCreateATAOwner:s});I=O,L&&A.addInstruction(L)}else{let O=new j(w.mintB.address);I=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintB.programId)),A.addInstruction({instructions:[ll(this.scope.ownerPubKey,I,this.scope.ownerPubKey,O,new j(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=I;let C=[];for(let O of w.rewardDefaultInfos){let L=i.useSOLBalance&&O.mint.address===Z.toString(),v=f[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:L?!1:o});v=Y,Q&&A.addInstruction(Q)}f[O.mint.address]=v,C.push(v)}let R=await this.getClmmPoolKeys(w.id),N=[];for(let O=0;O<R.rewardInfos.length;O++)N.push({poolRewardVault:new j(R.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new j(R.rewardInfos[O].mint.address)});for(let O of t[h.id]){let L=(k=n==null?void 0:n[h.id])==null?void 0:k[O.nftMint.toBase58()];if(L){let v=J(this.scope.ownerPubKey,L.lockNftMint,Lo).publicKey,Y=$.getTickArrayStartIndexByTick(O.tickLower,R.config.tickSpacing),Q=$.getTickArrayStartIndexByTick(O.tickUpper,R.config.tickSpacing),{publicKey:pe}=he(new j(R.programId),L.poolId,Y),{publicKey:ke}=he(new j(R.programId),L.poolId,Q),{publicKey:le}=rn(new j(R.programId),L.poolId,O.tickLower,O.tickUpper),Pe=Ri(m,L.lockNftMint).publicKey,Ae=Le.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:Pe,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:L.lockNftMint,lockNftAccount:v,positionNftAccount:L.nftAccount,positionId:L.positionId,poolId:L.poolId,protocolPosition:le,vaultA:new j(R.vault.A),vaultB:new j(R.vault.B),tickArrayLower:pe,tickArrayUpper:ke,userVaultA:K,userVaultB:I,mintA:new j(R.mintA.address),mintB:new j(R.mintB.address),rewardAccounts:N,exTickArrayBitmap:je(p,L.poolId).publicKey});A.addInstruction({instructions:[Ae],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]})}else{let v=Le.decreaseLiquidityInstructions({poolInfo:w,poolKeys:R,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new Tt(0),amountMinA:new Tt(0),amountMinB:new Tt(0),nft2022:(T=g[O.nftMint.toBase58()])==null?void 0:T.equals(qn)});A.addInstruction(v)}}}return c===0?A.sizeCheckBuildV0({computeBudgetConfig:u}):A.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ao(e).publicKey);return t?Gc.decode(t.data).whitelistMints.filter(i=>!i.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=Qn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new Tt(1))).map(s=>ht(new j(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=Li.decode(s.data);o.push(a)}),o}async getOwnerLockedPositionInfo({programId:e=eo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Tt(1))).map(c=>Ri(new j(e),c.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];i.forEach(c=>{if(!c)return;let u=Xc.decode(c.data);o.push(u)});let s=await this.scope.connection.getMultipleAccountsInfo(o.map(c=>c.positionId)),a=[];return s.forEach(c=>{if(!c)return;let u=Li.decode(c.data);a.push(u)}),o.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 Oe(this.scope.connection,e.map(o=>({pubkey:new j(o)})),t),i={};for(let o=0;o<e.length;o++){let s=n[o];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[o]));let a=oi.decode(s.accountInfo.data),c=ue.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[o])]=q(_({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await Oe(this.scope.connection,Array.from(n).map(c=>({pubkey:new j(c)}))),o={};i.forEach(c=>{!c.accountInfo||(o[c.pubkey.toBase58()]=qc.decode(c.accountInfo.data))});let s=await Me.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:At({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Lo.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?Wn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:At({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Lo.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Wn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:q(_({},o[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Me.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await Ai({connection:this.scope.connection,mints:Array.from(n).map(m=>new j(m))}),{computeClmmPoolInfo:o,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await Oe(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Wc(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(cl.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(cl.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(_({},o[e]),{exBitmapAccount:o[e].exBitmapAccount.toBase58(),observationId:o[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:o[e].rewardInfos.filter(m=>!m.tokenVault.equals(j.default)).map(m=>({mint:At({address:m.tokenMint.toBase58(),programId:Lo.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:o[e],tickData:s}}};import{PublicKey as U}from"@solana/web3.js";import{AccountLayout as Tf,NATIVE_MINT as vi,TOKEN_PROGRAM_ID as It,createAssociatedTokenAccountIdempotentInstruction as Fi}from"@solana/spl-token";import ml from"bn.js";import qr from"bn.js";function Ka(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function lf(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);return Ka(r,e).gt(Oo)&&(t=t.add(new qr(1))),[t,e]}var Oo=new qr(0),Mo=class{static swapBaseInputWithoutFees(e,t,n){let i=e.mul(n),o=t.add(e);return i.div(o)}static swapBaseOutputWithoutFees(e,t,n){let i=t.mul(e),o=n.sub(e),[s]=lf(i,o);return s}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return Ka(e.mul(n),t).gt(Oo)&&s.gt(Oo)&&(s=s.add(new qr(1))),Ka(e.mul(i),t).gt(Oo)&&a.gt(Oo)&&(a=a.add(new qr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import mf from"bn.js";var Ct=class{static tradingFee(e,t){return ji(e,t,Kt)}static protocolFee(e,t){return cr(e,t,Kt)}static fundFee(e,t){return cr(e,t,Kt)}static creatorFee(e,t){return ji(e,t,Kt)}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(Kt),i=Kt.sub(t);return n.add(i).sub(new mf(1)).div(i)}};var vo=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,i,o,s,a,c){let u=new ml(0),l=Ct.tradingFee(e,i),m;c?(u=Ct.creatorFee(e,o),m=e.sub(l).sub(u)):m=e.sub(l);let d=Ct.protocolFee(l,s),p=Ct.protocolFee(l,a),f=Mo.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Ct.creatorFee(f,o),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,i,o,s,a,c){let u,l=new ml(0),m;if(c)m=e;else{let b=Ct.calculatePreFeeAmount(e,o);l=b.sub(e),m=b}let d=Mo.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Ct.calculatePreFeeAmount(d,i.add(o)),g=b.sub(d);l=Ct.splitCreatorFee(g,i,o),u=g.sub(l),p=b}else{let b=Ct.calculatePreFeeAmount(d,i);u=b.sub(d),p=b}let f=Ct.protocolFee(u,s),y=Ct.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import ze from"bn.js";import{PublicKey as Vo,TransactionInstruction as Tn,Keypair as wf,SystemProgram as La}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ur,TOKEN_2022_PROGRAM_ID as Na,TOKEN_PROGRAM_ID as hn}from"@solana/spl-token";var df=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),sS=Buffer.from("amm_config","utf8"),pf=Buffer.from("pool","utf8"),ff=Buffer.from("pool_lp_mint","utf8"),yf=Buffer.from("pool_vault","utf8"),bf=Buffer.from("observation","utf8"),gf=Buffer.from("permission","utf8");function Mi(r){return ce([df],r)}function Ca(r,e,t,n){return ce([pf,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Pf(r,e){return ce([ff,e.toBuffer()],r)}function dl(r,e,t){return ce([yf,e.toBuffer(),t.toBuffer()],r)}function Fo(r,e){return ce([bf,e.toBuffer()],r)}function Ra({poolId:r,programId:e,configId:t,mintA:n,mintB:i}){let o=Mi(e).publicKey,s=r||Ca(e,t,n,i).publicKey,a=Pf(e,s).publicKey,c=dl(e,s,n).publicKey,u=dl(e,s,i).publicKey,l=Fo(e,s).publicKey;return{poolId:s,configId:t,authority:o,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Af=Buffer.from("locked_liquidity","utf8");function _o(r,e){return ce([Af,e.toBuffer()],r)}function pl(r,e){return ce([gf,e.toBuffer()],r)}var kf=we("Raydium_cpmm"),In={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 fl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=Ca(r,t,o,s).publicKey,w=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(h),isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:hn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:ws,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],B=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:k},B),new Tn({keys:w,programId:r,data:Buffer.from([...In.initialize,...B])})}function yl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let y=V([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Na,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 kf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Tn({keys:b,programId:r,data:Buffer.from([...In.deposit,...g])})}function bl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let y=V([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Na,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:On,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Tn({keys:b,programId:r,data:Buffer.from([...In.withdraw,...g])})}function Gr(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y){let b=V([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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 Tn({keys:g,programId:r,data:Buffer.from([...In.swapBaseInput,...A])})}function gl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y){let b=V([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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 Tn({keys:g,programId:r,data:Buffer.from([...In.swapBaseOutput,...A])})}async function Pl(r){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:i,getEphemeralSigners:o}=r,s=[],[a,c]=[new Vo(t.id),new Vo(t.lpMint.address)],u;if(o)u=new Vo((await o(1))[0]);else{let g=wf.generate();s.push(g),u=g.publicKey}let{publicKey:l}=J(i,u,hn),{publicKey:m}=An(u),{publicKey:d}=_o(r.lockProgram,u),{publicKey:p}=J(e.wallet,c,hn),{publicKey:f}=J(r.lockAuthProgram,c,hn),y=hf({programId:r.lockProgram,auth:r.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:i,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new Vo(n.vault.A),poolVaultB:new Vo(n.vault.B),metadataAccount:m,lpAmount:r.lpAmount,withMetadata:(b=r.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:s,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function hf({programId:r,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:o,nftAccount:s,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:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,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:ot,isSigner:!1,isWritable:!1},{pubkey:La.programId,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1}],A=V([P("lpAmount"),Ge("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let T=Buffer.from([...In.lockCpLiquidity,...k]);return new Tn({keys:g,programId:r,data:T})}function Oa({programId:r,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:o,mintLp:s,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:i,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:jn,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Uu,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:hn,isSigner:!1,isWritable:!1},{pubkey:Na,isSigner:!1,isWritable:!1},{pubkey:On,isSigner:!1,isWritable:!1}],A=V([P("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let T=Buffer.from([...In.collectCpFee,...k]);return new Tn({keys:g,programId:r,data:T})}function Ma(r,e,t,n,i,o,s,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:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Ur,isSigner:!1,isWritable:!1},{pubkey:La.programId,isSigner:!1,isWritable:!1}];return new Tn({keys:p,programId:r,data:In.collectCreatorFee})}function Al(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w){let B=V([P("amountA"),P("amountB"),P("openTime"),E("feeOn")]),x=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:hn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:La.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(B.span);return B.encode({amountA:k,amountB:T,openTime:h,feeOn:w},K),new Tn({keys:x,programId:r,data:Buffer.from([...In.initializeWithPermission,...K])})}var wl=V([Be(8),E("bump"),Ge("disableCreatePool"),Ft("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),M("protocolOwner"),M("fundOwner"),P("creatorFeeRate"),H(P(),15)]),Xr=V([Be(8),M("configId"),M("poolCreator"),M("vaultA"),M("vaultB"),M("mintLp"),M("mintA"),M("mintB"),M("mintProgramA"),M("mintProgramB"),M("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"),Ge("enableCreatorFee"),H(E(),6),P("creatorFeesMintA"),P("creatorFeesMintB"),H(P(),28)]),AS=V([Be(8),M("configId"),H(P(),30)]);var Eo=class extends _e{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 Oe(this.scope.connection,e.map(m=>({pubkey:new U(m)}))),i={},o=new Set,s=[];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=Xr.decode(d.accountInfo.data);i[String(e[m])]=q(_({},p),{programId:d.accountInfo.owner}),o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await Oe(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]]=wl.decode(f.data)}}let c={},u=await Oe(this.scope.connection,s.map(m=>({pubkey:new U(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new ze(Tf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA).sub(d.creatorFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB).sub(d.creatorFeesMintB);l[m]=q(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new F(f.toString()).div(new F(10).pow(d.mintDecimalB)).div(new F(p.toString()).div(new F(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let o=e[i],[s,a]=[o.mintA.toBase58(),o.mintB.toBase58()];return q(_({},n),{[i]:q(_({},o),{id:new U(i),configInfo:o.configInfo,version:7,authority:Mi(o.programId).publicKey,mintA:At({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?Wn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:At({address:a,decimals:o.mintDecimalB,programId:o.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Wn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Ai({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=At({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Wn(n[t.mintA.toBase58()].feeConfig):void 0}}),o=At({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Wn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=At({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:It.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:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:o,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new F(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new F(t.vaultBAmount.toString()).div(10**o.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:i,mintB:o,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Mi(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:Fo(t.programId,new U(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:o,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=De(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,Y,Q;let b=o.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new ze(new U(p.mintA.address).toBuffer()).lte(new ze(new U(p.mintB.address).toBuffer())),[A,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=o.useSOLBalance&&A.address===vi.toBase58(),B=o.useSOLBalance&&k.address===vi.toBase58(),[x,K]=[new U(A.address),new U(k.address)],I=this.createTxBuilder(d),{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:x,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:T}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:a});I.addInstruction(R||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new U(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:b,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let L=Ra({poolId:e,programId:t,configId:new U(u.id),mintA:x,mintB:K});return I.addInstruction({instructions:[fl(t,this.scope.ownerPubKey,new U(u.id),L.authority,L.poolId,x,K,L.lpMint,C,N,J(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,n,new U((Y=A.programId)!=null?Y:It),new U((Q=k.programId)!=null?Q:It),L.observationId,T,h,i)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(_({},L),{mintA:A,mintB:k,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:o,slippage:s,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"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(_({},t),{lpAmount:new F(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new rt(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new F(i.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),T=k.amount,h=t.mintA.address===vi.toString(),w=t.mintB.address===vi.toString(),B=this.createTxBuilder(d),[x,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||(o?i:T).isZero()?{payer:this.scope.ownerPubKey,amount:o?i:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:y});B.addInstruction(C||{});let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(o?T:i).isZero()?{payer:this.scope.ownerPubKey,amount:o?T:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:y});B.addInstruction(N||{}),!I&&!R&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),pe=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:L}=pe,v=De(pe,["tokenAccount"]);B.addInstruction(v);let Y=n!=null?n:await this.getCpmmPoolKeys(t.id),Q=new rt(new ze(1)).sub(s);return B.addInstruction({instructions:[yl(new U(t.programId),this.scope.ownerPubKey,new U(Y.authority),new U(t.id),L,I,R,new U(Y.vault.A),new U(Y.vault.B),x,K,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:Q.mul(g).quotient,o?A.amount:T,o?T:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.addTipInstruction(u),B.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,Y;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:o,computeBudgetConfig:s,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 rt(new ze(1)).sub(o),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(i.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(i.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Ce(p,t.mintA.extensions.feeConfig,y,!1),Ce(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],w=T.equals(Z),B=h.equals(Z),x,K,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});x=I,C&&k.addInstruction(C);let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(B&&l),associatedOnly:!B,checkCreateATAOwner:!1});K=R,N&&k.addInstruction(N),(!x||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let O=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let L=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[bl(new U(t.programId),this.scope.ownerPubKey,new U(L.authority),new U(t.id),O,x,K,new U(L.vault.A),new U(L.vault.B),T,h,new U(t.lpMint.address),i,p.sub((v=b.fee)!=null?v:new ze(0)),f.sub((Y=g.fee)!=null?Y:new ze(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),k.addCustomComputeBudget(s),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,R,N,O,L,v;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:o,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,k]=[new U(t.mintA.address),new U(t.mintB.address)];o?a.inputAmount=a.inputAmount.mul(new ze((1+c)*1e4)).div(new ze(1e4)):a.outputAmount=a.outputAmount.mul(new ze((1-c)*1e4)).div(new ze(1e4));let T=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:It),owner:this.scope.ownerPubKey,createInfo:T||!i?{payer:this.scope.ownerPubKey,amount:i?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});B&&g.addInstruction(B);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new U((R=t.mintB.programId)!=null?R:It),owner:this.scope.ownerPubKey,createInfo:h||i?{payer:this.scope.ownerPubKey,amount:i?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!w||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:w,mintBTokenAcc:x,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[o?gl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),i?w:x,i?x:w,new U(I.vault[i?"A":"B"]),new U(I.vault[i?"B":"A"]),new U((L=t[i?"mintA":"mintB"].programId)!=null?L:It),new U((v=t[i?"mintB":"mintA"].programId)!=null?v:It),i?A:k,i?k:A,Fo(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Gr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),i?w:x,i?x:w,new U(I.vault[i?"A":"B"]),new U(I.vault[i?"B":"A"]),new U((N=t[i?"mintA":"mintB"].programId)!=null?N:It),new U((O=t[i?"mintB":"mintA"].programId)!=null?O:It),i?A:k,i?k:A,Fo(new U(t.programId),new U(t.id)).publicKey,s,a.outputAmount)],instructionTypes:[o?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:i,txTipConfig:o,txVersion:s,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 Pl({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(i),u.addTipInstruction(o),u.versionBuild({txVersion:s,extInfo:m.address})}async harvestLockLp(e){var R;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:o=fr,authProgram:s=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,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});A=T,h&&p.addInstruction(h);let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,B&&p.addInstruction(B),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let x=(R=e.poolKeys)!=null?R:await this.getCpmmPoolKeys(t.id),{publicKey:K}=J(d,i,It),{publicKey:I}=_o(o,i),{publicKey:C}=J(s,new U(t.lpMint.address),It);return p.addInstruction({instructions:[Oa({programId:o,nftOwner:this.scope.ownerPubKey,auth:s,nftMint:i,nftAccount:K,lockPda:I,poolId:new U(t.id),mintLp:new U(x.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.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:i=yr,cpmmProgram:o,computeBudgetConfig:s,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,A]=[new U(f.mintA.address),new U(f.mintB.address)],k=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],w=m[f.mintB.address];if(!h)if(k){let{account:C,instructionParams:R}=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,R&&l.addInstruction(R),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:[Fi(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!w)if(T){let{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new U(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});w=C,R&&l.addInstruction(R),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);w=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Fi(this.scope.ownerPubKey,w,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=w}(!h||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:w});let B=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:x}=J(u,b,It),{publicKey:K}=_o(n,b),{publicKey:I}=J(i,new U(f.lpMint.address),It);l.addInstruction({instructions:[Oa({programId:n,nftOwner:this.scope.ownerPubKey,auth:i,nftMint:b,nftAccount:x,lockPda:K,poolId:new U(f.id),mintLp:new U(B.mintLp.address),userVaultA:h,userVaultB:w,poolVaultA:new U(B.vault.A),poolVaultB:new U(B.vault.B),mintA:g,mintB:A,lockLpVault:I,lpFeeAmount:y,cpmmProgram:o==null?void 0:o.programId,cpmmAuthProgram:o==null?void 0:o.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:s}):l.sizeCheckBuild({computeBudgetConfig:s})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:o,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=De(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var Y,Q,pe;console.log("***this method only available for wallet with permissions***");let g=o.feePayer||((Y=this.scope.owner)==null?void 0:Y.publicKey),A=new ze(new U(f.mintA.address).toBuffer()).lte(new ze(new U(f.mintB.address).toBuffer())),[k,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,w]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],B=o.useSOLBalance&&k.address===vi.toBase58(),x=o.useSOLBalance&&T.address===vi.toBase58(),[K,I]=[new U(k.address),new U(T.address)],C=this.createTxBuilder(d),{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:w}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:s,checkCreateATAOwner:a});if(C.addInstruction(L||{}),R===void 0||O===void 0)throw Error("you don't has some token account");let v=Ra({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[Al(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,R,O,J(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((Q=k.programId)!=null?Q:It),new U((pe=T.programId)!=null?pe:It),v.observationId,pl(t,this.scope.ownerPubKey).publicKey,h,w,i,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(_({},v),{mintA:k,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=jn,txVersion:i,computeBudgetConfig:o,txTipConfig:s,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:[Fi(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Fi(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Ma(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(o),u.addTipInstruction(s),u.versionBuild({txVersion:i})}async collectMultiCreatorFees({poolInfoList:e,programId:t=jn,txVersion:n,computeBudgetConfig:i,feePayer:o}){let s=o||this.scope.ownerPubKey,a=this.createTxBuilder(s),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(A=>A.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new U(l.mintA.address),new U(l.mintB.address),new U(l.mintA.programId),new U(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[Fi(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[Fi(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Ma(t,this.scope.ownerPubKey,new U(m.authority),new U(m.id),new U(m.config.id),new U(m.vault.A),new U(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let o=n.toString()===e.mintB.address,s=e.feeOn===0||e.feeOn===2,a=o?vo.swapBaseInput(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s):vo.swapBaseOutput(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s),c=new F(a.outputAmount.toString()).div(a.inputAmount.toString()),u=a.outputAmount.mul(new ze((1-i)*1e4)).div(new ze(1e4));return{allTrade:a.inputAmount.eq(t),amountIn:t,amountOut:a.outputAmount,minAmountOut:u,executionPrice:c,fee:a.tradeFee,priceImpact:e.poolPrice.sub(c).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var T,h,w,B,x,K,I,C,R;let c=1-Number(o.toSignificant())/100,u=new ze(new F(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Ce(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((T=l.fee)!=null?T:new ze(0)),d=new ze(new F(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(w=(h=l.fee)==null?void 0:h.toString())!=null?w:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:St,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=If(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Ce(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new rt(new ze(1)).add(o),g=new rt(new ze(1)).sub(o),A=Ce(b.mul(y.amount.sub((B=y.fee)!=null?B:new ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=Ce(g.mul(y.amount.sub((x=y.fee)!=null?x:new ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!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:",(R=(C=A.fee)==null?void 0:C.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}};function If(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new ze(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new ze(1))),{amountA:i,amountB:o}}import{PublicKey as mi}from"@solana/web3.js";import{createTransferInstruction as xl,TOKEN_PROGRAM_ID as Ze,TOKEN_2022_PROGRAM_ID as Qr}from"@solana/spl-token";import Hr from"bn.js";var kl={[xs.toBase58()]:3},hl={3:xs};var va=V([Be(5),Be(8),M("ownAddress"),P("vaultSignerNonce"),M("baseMint"),M("quoteMint"),M("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),M("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),M("requestQueue"),M("eventQueue"),M("bids"),M("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Be(7)]),Tl={3:va};import{PublicKey as Il}from"@solana/web3.js";var zr=we("Serum"),Yr=class{static getProgramId(e){let t=hl[e];return t||zr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=kl[t];return n||zr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Tl[e];return t||zr.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()],i=0,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=Il.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return zr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Il.default,nonce:i}}};import{PublicKey as ae,SystemProgram as Bf,TransactionInstruction as xf}from"@solana/web3.js";import li from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Sf,TOKEN_2022_PROGRAM_ID as Kf,TOKEN_PROGRAM_ID as Cf}from"@solana/spl-token";function Rf(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){var w;let y=[],b=[S({pubkey:Cf,isWritable:!1}),S({pubkey:Kf,isWritable:!1}),S({pubkey:Sf,isWritable:!1}),S({pubkey:Bf.programId,isWritable:!1}),S({pubkey:e,isSigner:!0})];b.push(S({pubkey:t})),b.push(S({pubkey:i}));let g=[c,u],A=[l,m],k=[o,s,a];for(let B=0;B<g.length;B++){let x=g[B],K=k[B]===x.mintA.address;if(b.push(S({pubkey:new ae(x.programId),isWritable:!1})),B===g.length-1?b.push(S({pubkey:i})):b.push(S({pubkey:n})),b.push(S({pubkey:new ae(k[B])})),b.push(S({pubkey:new ae(k[B+1])})),x.version===6){let I=A[B];b.push(S({pubkey:new ae(I.config.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new ae(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new ae(x.observationId)})),b.push(S({pubkey:On})),b.push(S({pubkey:je(new ae(x.programId),new ae(x.id)).publicKey})),y.push(Lf(x.sqrtPriceX64.toString(),K));for(let C of(w=f[B])!=null?w:[])b.push(S({pubkey:new ae(C)}))}else if(x.version===5){let I=A[B];b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.authority),isWritable:!1})),b.push(S({pubkey:new ae(I.marketProgramId)})),b.push(S({pubkey:new ae(I.marketAuthority)})),b.push(S({pubkey:Du,isWritable:!1})),b.push(S({pubkey:new ae(I.openOrders)})),b.push(S({pubkey:new ae(I.vault.A)})),b.push(S({pubkey:new ae(I.vault.B)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.marketId)})),b.push(S({pubkey:new ae(I.marketBids)})),b.push(S({pubkey:new ae(I.marketAsks)})),b.push(S({pubkey:new ae(I.marketEventQueue)})),b.push(S({pubkey:new ae(I.marketBaseVault)})),b.push(S({pubkey:new ae(I.marketQuoteVault)}))}else if(x.version===4){let I=A[B],C=x.status!==1;b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(I.authority),isWritable:!1})),b.push(S({pubkey:new ae(C?I.id:I.marketProgramId)})),b.push(S({pubkey:new ae(C?I.id:I.marketAuthority)})),b.push(S({pubkey:new ae(C?I.id:I.openOrders)})),b.push(S({pubkey:new ae(I.vault.A)})),b.push(S({pubkey:new ae(I.vault.B)})),b.push(S({pubkey:new ae(C?I.id:I.marketId)})),b.push(S({pubkey:new ae(C?I.id:I.marketBids)})),b.push(S({pubkey:new ae(C?I.id:I.marketAsks)})),b.push(S({pubkey:new ae(C?I.id:I.marketEventQueue)})),b.push(S({pubkey:new ae(C?I.id:I.marketBaseVault)})),b.push(S({pubkey:new ae(C?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=A[B];b.push(S({pubkey:new ae(I.authority)})),b.push(S({pubkey:new ae(I.config.id)})),b.push(S({pubkey:new ae(I.id)})),b.push(S({pubkey:new ae(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new ae(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new ae(x.observationId)}))}else throw Error("pool type error")}let T=V([E("insId"),P("amountIn"),P("amountOut"),H(oe(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new xf({keys:b,programId:r,data:h})}function Lf(r,e){if(r)if(e){let t=new li(r).div(new li(25));return t.gt(Rr)?t:Rr}else{let t=new li(r).mul(new li(25));return t.lt(Lr)?t:Lr}else return e?Rr:Lr}function Bl({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=mt(m),p=t.equals(d.mintA.address)?Yt.add(Vt):Qt.sub(Vt);return Le.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new li(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Gr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new ae(m[d?"mintA":"mintB"].address),new ae(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[_r({poolKeys:m,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 li(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Rf(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new li(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}var Bn=new Hr(0),Wo=class extends _e{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:i=1,feePayer:o}=e,s=await this.getWSolAccounts(),a=this.createTxBuilder(o);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ee(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(a.addInstruction({instructions:[bn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):a.addInstruction({instructions:[bn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:i})}async wrapWSol(e,t,n,i){let o=this.createTxBuilder(i),s=await _n({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return o.addInstruction(s),o.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:o,txVersion:s,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?Qr:Ze,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?Qr:Ze);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?Qr:Ze,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=h,w&&c.addInstruction(w)}d&&c.addInstruction({endInstructions:[bn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Ze})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let h=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?Qr:Ze)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Bl({routeProgram:o,inputMint:p,swapInfo:q(_({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[xl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:w}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[xl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return c.addInstruction(T),s===0?c.sizeCheckBuildV0({computeBudgetConfig:i,address:T.address}):c.sizeCheckBuild({computeBudgetConfig:i,address:T.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=dr,clmm:n=Qn,cpmm:i=jn}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Bo.offsetOf("baseMint"),length:64}}),s=V([M("baseMint"),M("quoteMint")]),a=o.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=V([M("mintA"),M("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:oi.span}],dataSlice:{offset:oi.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(i,{dataSlice:{offset:Xr.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:i,cpmmPools:o}){e=e.toString()===mi.default.toString()?Z:e,t=t.toString()===mi.default.toString()?Z:t;let s={},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:Ze,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:Ze,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:Ze,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:Ze,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ze,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:Ze,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:Ze,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:Ze,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of o)(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:Ze,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:Ze,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:Ze,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:Ze,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)&&s[f.id.toString()]===void 0&&(s[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)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=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 o=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),s=Er(o),a={};Object.values(s).forEach(y=>{i.delete(y.mintA.address),a[y.mintA.address]={address:new mi(y.mintA.address),programId:Ze,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(y.mintB.address),a[y.mintB.address]={address:new mi(y.mintB.address),programId:Ze,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(Ze)?(i.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}):i.add(b),y.mintProgramB.equals(Ze)?(i.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}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Ai({connection:this.scope.connection,mints:Array.from(i).map(y=>new mi(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>q(_({},y),{[b]:q(_({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:o,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:o,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,k,T,h,w,B,x,K;let m=l===void 0?new Hr(0):e.raw.mul(new Hr(l.feeBps.toNumber())).div(new Hr(1e4)),d=e.raw.sub(m),p=new Ke(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(_({},t),{address:ft(t.address).toString()}),b=[];for(let I of n)try{b.push(q(_({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:o,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(i)){let R={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(L=>{try{return{pool:L,data:this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:R,amountIn:p})}}catch(v){this.logDebug("route in error",L.version,L.id.toString(),v.message);return}}).sort((L,v)=>{var pe,ke,le,Pe;let Y=L===void 0?Bn:L.data.amountOut.amount.raw.sub((ke=(pe=L.data.amountOut.fee)==null?void 0:pe.raw)!=null?ke:Bn),Q=v===void 0?Bn:v.data.amountOut.amount.raw.sub((Pe=(le=v.data.amountOut.fee)==null?void 0:le.raw)!=null?Pe:Bn);return Y.lt(Q)?1:-1})[0];if(N===void 0)continue;let O=new Ke(vr(R),N.data.amountOut.amount.raw.sub((A=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?A:Bn));for(let L of C.out)try{let v=this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(q(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new F(new xt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(k=v.amountOut.fee)==null?void 0:k.raw)!=null?T:Bn)}).toFixed()),priceImpact:new F(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,L],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Ke(N.data.amountOut.amount.token,((B=(w=N.data.amountOut.fee)==null?void 0:w.raw)!=null?B:Bn).add((K=(x=v.amountOut.fee)==null?void 0:x.raw)!=null?K:Bn)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:nn(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",L.version,L.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(Bn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:o,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:k}=Me.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:o,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new F(f.toFixed()),executionPrice:new F(y.toFixed()),priceImpact:new F(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:nn(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:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Io(q(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Io(q(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Ke(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,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:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Io(q(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Io(q(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Ke(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let o=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await Oe(this.scope.connection,Array.from(s).map(l=>({pubkey:new mi(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=va.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Yr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:q(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Ba({programId:new mi(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:Mi(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:At({address:u.mintLp.toBase58(),programId:Ze.toBase58(),decimals:u.lpDecimals}),config:q(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Nf,Transaction as Fa,TransactionInstruction as Of}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mf}from"@solana/spl-token";import Sl from"bn.js";var wt=class extends _e{static getPdaPoolId(e,t){return ce([wt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return ce([wt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Sl(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>wt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<wt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>wt.getPdaOwnerId(t,m,i,l).publicKey));let c=await $t(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==wt.POOL_LAYOUT.span||b.data.length!==wt.OWNER_LAYOUT.span)continue;let g=wt.POOL_LAYOUT.decode(y.data),A=wt.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(x=>x.debtAmount.gt(new Sl(0))).filter(x=>!x).length!==3,w=o>k&&o<T&&g.status===1,B=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:wt.VERSION_PROJECT[m],openTime:k,endTime:T,canClaim:B,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.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 i=this.createTxBuilder(n),o=t.wallet||this.scope.ownerPubKey,s=[];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(Ue.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!u.mintAddress.equals(Ue.WSOL.mint),associatedOnly:u.mintAddress.equals(Ue.WSOL.mint)?!1:t.associatedOnly});m&&i.addInstruction(m),s.push(l)}i.addInstruction({instructions:[wt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:s}})]});let{transaction:a,signers:c}=i.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let i=this.createTxBuilder(n),o=t.wallet||this.scope.ownerPubKey,s={};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(Ue.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!d.mintAddress.equals(Ue.WSOL.mint),associatedOnly:d.mintAddress.equals(Ue.WSOL.mint)?!1:t.associatedOnly});f&&i.addInstruction(f),p&&(s[d.mintAddress.toString()]=p,m.push(p))}i.addInstruction({instructions:[wt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:o,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=i.build(),u=i.allInstructions;return Bs(u,[o,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Fa().add(...u.slice(0,i.AllTxData.instructions.length-1)),signer:c},{transaction:new Fa().add(...u.slice(i.AllTxData.instructions.length-1)),signer:[]},{transaction:new Fa().add(...i.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=V([]),o=[{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:Mf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Of({keys:o,programId:e,data:a})}},Ht=wt;Ht.CLAIMED_NUM=3,Ht.POOL_LAYOUT=V([Be(8),E("bump"),E("status"),P("openTime"),P("endTime"),M("ammId"),H(V([E("mintDecimals"),M("mintAddress"),M("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),wt.CLAIMED_NUM,"tokenInfo"),H(P(),10,"padding")]),Ht.OWNER_LAYOUT=V([Be(8),E("bump"),E("version"),M("poolId"),M("owner"),P("lpAmount"),H(V([M("mintAddress"),P("debtAmount"),P("claimedAmount")]),wt.CLAIMED_NUM,"tokenInfo"),H(P(),4,"padding")]),Ht.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Nf(e)),Ht.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Ht.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as qo}from"@solana/web3.js";import Rl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Ff,TransactionInstruction as Kl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Cl}from"@solana/spl-token";var vf=V([E("instruction"),ec("amount")]),Do=V([E("instruction")]);function jr({programId:r},e){let t=[{pubkey:Cl,isSigner:!1,isWritable:!1},{pubkey:Su,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Do.span);return Do.encode({instruction:2},n),new Kl({keys:t,programId:r,data:n})}function _a(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Do.span);Do.encode({instruction:2},s);let a=[{pubkey:Cl,isWritable:!1,isSigner:!1},{pubkey:Ff,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Kl({programId:e.programId,keys:a,data:s})}var _f={[to.IDO_PROGRAM_ID_V1.toString()]:1,[to.IDO_PROGRAM_ID_V2.toString()]:2,[to.IDO_PROGRAM_ID_V3.toString()]:3,[to.IDO_PROGRAM_ID_V4.toString()]:4},_i=class extends _e{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o,feePayer:s}){let a=this.createTxBuilder(s),c=_f[t.programId];c||this.logAndCreateError("invalid version",c);let u=mt(t),[l,m]=[!new Rl(e.coin).isZero(),!new Rl(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:i});!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:i});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?[jr({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new qo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[jr({programId:new qo(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new qo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[jr({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new qo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});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 qo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[_a(q(_({},A),{side:"base"}))]:[],...m?[_a(q(_({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};var Vf=Buffer.from("vault_auth_seed","utf8"),n0=Buffer.from("global_config","utf8"),Ef=Buffer.from("pool_vesting","utf8"),Wf=Buffer.from("platform_config","utf8"),Df=Buffer.from("platform_fee_vault_auth_seed","utf8"),qf=Buffer.from("creator_fee_vault_auth_seed","utf8");function pn(r){return ce([Vf],r)}function Vi(r,e,t){return ce([aa,e.toBuffer(),t.toBuffer()],r)}function Va(r,e,t){return ce([ua,e.toBuffer(),t.toBuffer()],r)}function Un(r){return ce([Buffer.from("__event_authority","utf8")],r)}function Ea(r,e){return ce([Wf,e.toBuffer()],r)}function Uo(r,e,t){return ce([Ef,e.toBuffer(),t.toBuffer()],r)}function di(r,e,t){return ce([e.toBuffer(),t.toBuffer()],r)}function Wa(r){return ce([Df],r)}function pi(r,e,t){return ce([e.toBuffer(),t.toBuffer()],r)}function Da(r){return ce([qf],r)}import{ASSOCIATED_TOKEN_PROGRAM_ID as Zr,TOKEN_2022_PROGRAM_ID as Xf,TOKEN_PROGRAM_ID as Go}from"@solana/spl-token";import{SystemProgram as Dt,TransactionInstruction as Rt}from"@solana/web3.js";import Wi from"bn.js";var Gn=V([P(),P("epoch"),E("curveType"),Ft("index"),P("migrateFee"),P("tradeFeeRate"),P("maxShareFeeRate"),P("minSupplyA"),P("maxLockRate"),P("minSellRateA"),P("minMigrateRateA"),P("minFundRaisingB"),M("mintB"),M("protocolFeeOwner"),M("migrateFeeOwner"),M("migrateToAmmWallet"),M("migrateToCpmmWallet"),H(P(),16)]),Uf=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),sn=V([P(),P("epoch"),E("bump"),E("status"),E("mintDecimalsA"),E("mintDecimalsB"),E("migrateType"),P("supply"),P("totalSellA"),P("virtualA"),P("virtualB"),P("realA"),P("realB"),P("totalFundRaisingB"),P("protocolFee"),P("platformFee"),P("migrateFee"),Uf.replicate("vestingSchedule"),M("configId"),M("platformId"),M("mintA"),M("mintB"),M("vaultA"),M("vaultB"),M("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),H(E(),62)]),r0=V([P(),P("epoch"),M("poolId"),M("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),H(P(),8)]),Ll=V([E("migrateType"),E("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Gf=V([P("epoch"),E("index"),M("configId"),Ll.replicate("bondingCurveParam"),H(P(),50)]),Ei=V([P(),P("epoch"),M("platformClaimFeeWallet"),M("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),H(E(),64,"name"),H(E(),256,"web"),H(E(),256,"img"),M("cpConfigId"),P("creatorFeeRate"),M("transferFeeExtensionAuth"),H(E(),180),sc(Gf,"platformCurve")]);var Lt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145])};function Nl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){r.equals(vt.LAUNCHPAD_PROGRAM)&&console.log("*** launchlab initialize has been deprecated, please use initializeV2 instead! ***");let T=V([E("decimals"),dt("name"),dt("symbol"),dt("uri")]),h=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),w=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),B=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),x=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:Go,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],K=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),I=Buffer.alloc(h.span),C=Buffer.alloc(b.type==="ConstantCurve"?B.span:w.span);return T.encode({decimals:d,name:p,symbol:f,uri:y},K),b.type==="ConstantCurve"?B.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="FixedCurve"?w.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="LinearCurve"&&w.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),C),h.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k},I),new Rt({keys:x,programId:r,data:Buffer.from([...Lt.initialize,...K,...C,...I])})}function Ol(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=V([E("decimals"),dt("name"),dt("symbol"),dt("uri")]),w=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn")]),B=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),x=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:Go,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),R=Buffer.alloc(b.type==="ConstantCurve"?x.span:B.span);return h.encode({decimals:d,name:p,symbol:f,uri:y},I),b.type==="ConstantCurve"?x.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),R):b.type==="FixedCurve"?B.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),R):b.type==="LinearCurve"&&B.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),R),w.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:T},C),new Rt({keys:K,programId:r,data:Buffer.from([...Lt.initializeV2,...I,...R,...C])})}function Ml(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=V([E("decimals"),dt("name"),dt("symbol"),dt("uri")]),w=V([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),V([Ft("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),B=V([E("index"),P("supply"),P("totalFundRaisingB"),E("migrateType")]),x=V([E("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),E("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,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:Xf,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),R=Buffer.alloc(y.type==="ConstantCurve"?x.span:B.span);return h.encode({decimals:m,name:d,symbol:p,uri:f},I),y.type==="ConstantCurve"?x.encode(q(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),R):y.type==="FixedCurve"?B.encode(q(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),R):y.type==="LinearCurve"&&B.encode(q(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),R),w.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:k,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new Wi(0)}},C),new Rt({keys:K,programId:r,data:Buffer.from([...Lt.initializeWithToken2022,...I,...R,...C])})}function vl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountB"),P("minAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.buyExactIn,...w])})}function Fl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountA"),P("maxAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.buyExactOut,...w])})}function _l(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountA"),P("minAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.sellExactIn,...w])})}function Vl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=V([P("amountB"),P("maxAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,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:Un(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Dt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new Wi(0)},w),new Rt({keys:h,programId:r,data:Buffer.from([...Lt.sellExactOut,...w])})}function qa(r,e,t,n,i,o,s,a,c){let u=V([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Zr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Rt({keys:l,programId:r,data:Buffer.from([...Lt.claimVestedToken,...m])})}function Ua(r,e,t,n,i,o){let s=V([P("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Dt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({shareAmount:o},c),new Rt({keys:a,programId:r,data:Buffer.from([...Lt.createVestingAccount,...c])})}function Ga(r,e,t,n,i,o,s,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Dt.programId,isSigner:!1,isWritable:!0},{pubkey:Zr,isSigner:!1,isWritable:!0}];return new Rt({keys:u,programId:r,data:Lt.claimPlatformFee})}function El(r,e,t,n,i,o,s,a,c,u,l,m,d){let p=V([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),dt("name"),dt("web"),dt("img"),P("creatorFeeRate")]),f=[{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:o,isSigner:!1,isWritable:!0},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Rt({keys:f,programId:r,data:Buffer.from([...Lt.createPlatformConfig,...y])})}function Wl(r,e,t,n){let i=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],o;if(n.type==="updateClaimFeeWallet"){let s=V([E("index"),M("value")]);o=Buffer.alloc(s.span),s.encode({index:0,value:n.value},o)}else if(n.type==="updateLockNftWallet"){let s=V([E("index"),M("value")]);o=Buffer.alloc(s.span),s.encode({index:1,value:n.value},o)}else if(n.type==="migrateCpLockNftScale"){let s=V([E("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);o=Buffer.alloc(s.span),s.encode(_({index:2},n.value),o)}else if(n.type==="updateFeeRate"){let s=V([E("index"),P("value")]);o=Buffer.alloc(s.span),s.encode({index:3,value:n.value},o)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let s=V([E("index"),dt("value")]);o=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?s.encode({index:4,value:n.value},o):n.type==="updateWeb"?s.encode({index:5,value:n.value},o):n.type==="updateImg"&&s.encode({index:6,value:n.value},o)}else if(n.type==="updateCpConfigId"){i.push({pubkey:n.value,isSigner:!1,isWritable:!1});let s=V([E("index")]);o=Buffer.alloc(s.span),s.encode({index:7},o)}else if(n.type==="updateAll"){i.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let s=V([E("index"),M("platformClaimFeeWallet"),M("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),dt("name"),dt("web"),dt("img"),M("transferFeeExtensionAuth"),P("creatorFeeRate")]);o=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),s.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},o)}else throw Error("updateInfo params type error");return new Rt({keys:i,programId:r,data:Buffer.from([...Lt.updatePlaformConfig,...o])})}function Xa(r,e,t,n,i,o,s,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Zr,isSigner:!1,isWritable:!1}];return new Rt({keys:c,programId:r,data:Lt.claimPlatformFeeFromVault})}function za(r,e,t,n,i,o,s){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Dt.programId,isSigner:!1,isWritable:!1},{pubkey:Zr,isSigner:!1,isWritable:!1}];return new Rt({keys:a,programId:r,data:Lt.claimCreatorFee})}var b0=new Wi("18446744073709551615");import{NATIVE_MINT as xn,TOKEN_2022_PROGRAM_ID as fi,TOKEN_PROGRAM_ID as ve,createAssociatedTokenAccountIdempotentInstruction as Ot,createSyncNativeInstruction as zf,getTransferFeeConfig as is,unpackMint as os}from"@solana/spl-token";import re from"bn.js";import{PublicKey as ql,SystemProgram as Yf}from"@solana/web3.js";import jt from"bn.js";import $r from"bn.js";var Xn=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var Jr=class extends Xn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new F(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new F(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:i,migrateFee:o,decimalA:s,decimalB:a}){return new F(i.sub(o).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let i=e.totalSellA.sub(e.realA),o=e.totalFundRaisingB.sub(e.realB);return new F(e.virtualB.add(e.realB.add(o)).toString()).div(e.virtualA.sub(e.realA.add(i)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){if(e.lte(n))throw Error("supply need gt total sell");let s=e.sub(n).sub(i);if(s.lte(new $r(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(o);if(a.lte(new $r(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(s),u=a.mul(n).div(s).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new $r(0))||m.lt(new $r(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let i=e.mul(n),o=t.add(e);return i.div(o)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let i=t.mul(e),o=n.sub(e);return Zn(i,o)}};import es from"bn.js";var ts=class extends Xn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new F(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){return new F(i.sub(o).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let i=e.totalSellA.sub(e.realA),o=e.totalFundRaisingB.sub(e.realB);return new F(e.virtualB.add(e.realB).add(o).toString()).div(e.virtualA.sub(e.realA).add(i).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){let s=e.sub(i);if(s.lte(new es(0)))throw Error("invalid input 1");let a=new es(2).mul(t).sub(o),u=t.mul(s).div(a);if(u.lt(new es(0))||t.lt(new es(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let i=t.mul(e);return Zn(i,n)}};import Nt from"bn.js";import Dl from"bn.js";var Xo=class{static _multipler(e){return new F(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new F(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let i=e.mul(this._multipler(n)).div(this._multipler(t));return new Dl(i.mul(this._Q64).toFixed(0))}};Xo._Q64=new F(new Dl(1).shln(64).toString());var ns=class extends Xn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new F(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new F(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new F(e.virtualA.mul(e.realA).toString()).div(Xo._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){return new F(i.sub(o).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let i=e.totalSellA.sub(e.realA),o=e.totalFundRaisingB.sub(e.realB);return new F(e.virtualB.add(e.realB).add(o).toString()).div(e.virtualA.sub(e.realA).add(i).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,migrateFee:o}){let s=e.sub(i);if(s.lte(new Nt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Nt(3)).sub(o),u=t.mul(new Nt(2)).mul(s).div(a),l=u.mul(u),m=t.mul(new Nt(2)).mul(et).div(l);if(!m.gt(new Nt(0)))throw Error("a need gt 0");if(!bo.gt(m))throw Error("a need lt u64 max");if(m.lt(new Nt(0))||u.lt(new Nt(0)))throw Error("invalid input 0");return{a:m,b:new Nt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),i=new Nt(2).mul(n).mul(et).div(e.virtualA);return new Nt(new F(i.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),i=n.mul(n);return Zn(e.virtualA.mul(i),new Nt(2).mul(et)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),i=n.mul(n),o=Zn(e.virtualA.mul(i),new Nt(2).mul(et));return e.realB.sub(o)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),i=new Nt(2).mul(n).mul(et).div(e.virtualA),o=new Nt(new F(i.toString()).sqrt().toFixed(0));return e.realA.sub(o)}};var Zt=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:i,totalSell:o,totalLockedAmount:s,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:i,totalSell:o,totalLockedAmount:s,migrateFee:a}),d=l.getPoolInitPriceByInit(q(_({},m),{decimalA:c,decimalB:u})),p=i.div(new jt(t-1)),f=new jt(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,k=f;for(let T=1;T<t;T++){let h=T!==t-1?p:i.sub(k),w=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:i,totalSellA:o},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(w.amountA.amount),k=k.add(w.amountB);let B=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:c,decimalB:u,curveType:e});y.push({price:B,totalSellSupply:new F(A.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:i}){return this.getCurve(i).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i,curveType:o}){return this.getCurve(o).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:i}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:i})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:i}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:i})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:i}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:i})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:i,decimals:o,config:s,migrateType:a}){if(Number(o)!==6)throw Error("decimals = 6");if(e.mul(s.maxLockRate).div(Kt).lt(i))throw Error("total lock amount gte max lock amount");if(e.lt(s.minSupplyA.mul(new jt(10**o))))throw Error("supply lt min supply");let u=e.mul(s.minSellRateA).div(Kt);if(n.lt(u))throw Error("invalid input");if(t.lt(s.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(i),m=e.mul(s.minMigrateRateA).div(Kt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(i),p=new jt(new F(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new jt(10).pow(new jt(o));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new jt(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:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(o),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,A;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),A=g.sub(T)}else b=f,g=t,A=m;let k=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:Ss(b,c,u),amountB:g,splitFee:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=Ks(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(o).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),A=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:A}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(o),m=Ss(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:i,shareFeeRate:s,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:i,curveType:o,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Zt.getCurve(o).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:Ks(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:i,creatorFeeRate:o}){let s=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:i,creatorFeeRate:o}),a=s.isZero()?new jt(0):e.mul(n).div(s),c=s.isZero()?new jt(0):e.mul(i).div(s),u=s.isZero()?new jt(0):e.mul(o).div(s),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return ji(e,t,Kt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Kt),i=Kt.sub(t);return n.add(i).sub(new jt(1)).div(i)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:i}){if(e.add(t).add(n).add(i).gt(new jt(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(i)}static getCurve(e){switch(e){case 0:return Jr;case 1:return ts;case 2:return ns}throw Error("find curve error")}};var yi={initPriceX64:new re("515752397214619"),supply:new re(1e15),totalSellA:new re(7931e11),totalFundRaisingB:new re(85e9),totalLockedAmount:new re("0"),cliffPeriod:new re("0"),unlockPeriod:new re("0"),decimals:6,virtualA:new re("1073471847374405"),virtualB:new re("30050573465"),realA:new re(0),realB:new re(0),protocolFee:new re(0),platformId:new ql("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new re(0),cliffPeriod:new re(0),unlockPeriod:new re(0),startTime:new re(0),totalAllocatedShare:new re(0)}},zn=new re(1e4),zo=class extends _e{constructor(e){super(e)}async createLaunchpad(N){var O=N,{programId:e=st,authProgramId:t,platformId:n=yi.platformId,mintA:i,decimals:o=6,mintBDecimals:s=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:A,minMintAAmount:k,slippage:T,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:B,token2022:x,transferFeeExtensionParams:K,creatorFeeOn:I=0,initV2:C}=O,R=De(O,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","initV2"]);var Ui,Gi,Mt,Qo,Ha,ja,Za,$a,Ja,eu,tu,nu;let L=this.createTxBuilder(g);t=t!=null?t:pn(e).publicKey,C=!!(C!=null?C:e.equals(vt.LAUNCHPAD_PROGRAM)),x=!!K,x&&(l="cpmm");let v=d;if(!v&&m){let an=await this.scope.connection.getAccountInfo(m);an&&(v=Gn.decode(an.data))}v||this.logAndCreateError("config not found");let Y=v.mintB,Q=v.curveType,{publicKey:pe}=Vi(e,i,Y),{publicKey:ke}=Va(e,pe,i),{publicKey:le}=Va(e,pe,Y),{publicKey:Pe}=An(i);this.logDebug(`create token: ${i.toBase58()}, mintB: ${Y.toBase58()}, decimals A:${o}/B:${s}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let Ae=(Ui=R==null?void 0:R.supply)!=null?Ui:yi.supply,ye=(Gi=R==null?void 0:R.totalSellA)!=null?Gi:yi.totalSellA,te=(Mt=R==null?void 0:R.totalFundRaisingB)!=null?Mt:yi.totalFundRaisingB,me=(Qo=R==null?void 0:R.totalLockedAmount)!=null?Qo:new re(0),We=p;if(!p){let an=await this.scope.connection.getAccountInfo(n);an||this.logAndCreateError("platform id not found:",n.toString()),We=Ei.decode(an.data).feeRate}let Sn=Zt.getCurve(v.curveType).getInitParam({supply:Ae,totalFundRaising:te,totalSell:ye,totalLockedAmount:me,migrateFee:v.migrateFee}),ct={epoch:new re(896),bump:254,status:0,mintDecimalsA:o,mintDecimalsB:s,supply:Ae,totalSellA:ye,mintA:new ql(i),mintB:Y,virtualA:Sn.a,virtualB:Sn.b,realA:yi.realA,realB:yi.realB,migrateFee:v.migrateFee,migrateType:l==="amm"?0:1,protocolFee:yi.protocolFee,platformFee:We,platformId:n,configId:m,vaultA:ke,vaultB:le,creator:this.scope.ownerPubKey,totalFundRaisingB:te,vestingSchedule:{totalLockedAmount:me,cliffPeriod:new re(0),unlockPeriod:new re(0),startTime:new re(0),totalAllocatedShare:new re(0)},mintProgramFlag:x?1:0,cpmmCreatorFeeOn:I},nt=Zt.getCurve(v.curveType),{c:Di}=nt.getInitParam({supply:ct.supply,totalFundRaising:ct.totalFundRaisingB,totalLockedAmount:me,totalSell:v.curveType===0?ct.totalSellA:new re(0),migrateFee:v.migrateFee});try{Zt.checkParam({supply:ct.supply,totalFundRaising:ct.totalFundRaisingB,totalSell:Di,totalLockedAmount:me,decimals:ct.mintDecimalsA,config:v,migrateType:l}),this.logDebug("check init params success")}catch(an){this.logAndCreateError(`check create mint params failed, ${an.message}`)}L.addInstruction({instructions:[x?Ml(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,pe,i,Y,ke,le,o,a,c,u||"https://",{type:Q===0?"ConstantCurve":Q===1?"FixedCurve":Q===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:Ae,totalFundRaisingB:te},me,(Ha=R==null?void 0:R.cliffPeriod)!=null?Ha:new re(0),(ja=R==null?void 0:R.unlockPeriod)!=null?ja:new re(0),I,K):C?Ol(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,pe,i,Y,ke,le,Pe,o,a,c,u||"https://",{type:Q===0?"ConstantCurve":Q===1?"FixedCurve":Q===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:Ae,totalFundRaisingB:te},me,(Za=R==null?void 0:R.cliffPeriod)!=null?Za:new re(0),($a=R==null?void 0:R.unlockPeriod)!=null?$a:new re(0),I):Nl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,pe,i,Y,ke,le,Pe,o,a,c,u||"https://",{type:Q===0?"ConstantCurve":Q===1?"FixedCurve":Q===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:Ae,totalFundRaisingB:te},me,(Ja=R==null?void 0:R.cliffPeriod)!=null?Ja:new re(0),(eu=R==null?void 0:R.unlockPeriod)!=null?eu:new re(0))]});let qi=x?await this.scope.connection.getEpochInfo():void 0,bi=K?{epoch:BigInt((qi==null?void 0:qi.epoch)||0),maximumFee:BigInt((tu=K==null?void 0:K.maxinumFee.toString())!=null?tu:0),transferFeeBasisPoints:(nu=K==null?void 0:K.transferFeeBasePoints)!=null?nu:0}:void 0,gi={amountA:{amount:new re(0),fee:void 0,expirationTime:void 0},amountB:new re(0),splitFee:{platformFee:new re(0),shareFee:new re(0),protocolFee:new re(0),creatorFee:new re(0)}},Pi;if(B!=null&&B.length&&L.addInstruction({signers:B}),!R.createOnly){let{builder:an,extInfo:Ul}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?fi:void 0,mintA:i,mintB:Y,poolInfo:ct,buyAmount:A,minMintAAmount:k,shareFeeRate:R.shareFeeRate,shareFeeReceiver:R.shareFeeReceiver,configInfo:v,platformFeeRate:We,slippage:T,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!bi,transferFeeConfigA:bi?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:bi,newerTransferFee:bi}:void 0,fromCreate:!0});L.addInstruction(_({},an.AllTxData)),gi=_({},Ul),Pi=(this.scope.cluster==="devnet"||f===1)&&R.shareFeeReceiver?[an.allInstructions[0]]:void 0}return L.addTipInstruction(b),f===0?L.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:gi,splitIns:Pi,address:q(_({},ct),{poolId:pe})}):L.sizeCheckBuild({computeBudgetConfig:y,swapInfo:gi,splitIns:Pi,address:q(_({},ct),{poolId:pe})})}async buyToken({programId:e=st,authProgramId:t,mintA:n,mintAProgram:i=ve,mintB:o=xn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new re(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:w=!1}){var Ae,ye,te;p.lte(new re(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let B=this.createTxBuilder(d),{publicKey:x}=Vi(e,n,o);t=t!=null?t:pn(e).publicKey;let K=h;if(!w)if(K)i=fi;else{let me=await this.scope.connection.getAccountInfo(n);if(me&&me.owner.equals(fi)){i=me.owner;let We=os(n,me,i);K=is(We)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,i),C=T?this.scope.account.getAssociatedTokenAccount(o,ve):null,R=o.equals(xn);if(B.addInstruction({instructions:[Ot(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,i),...T?[Ot(this.scope.ownerPubKey,C,this.scope.ownerPubKey,o,ve),Yf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:C,lamports:BigInt(p.toString())}),zf(C)]:[]]}),!T){let{account:me,instructionParams:We}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:R?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!R,notUseTokenAccount:R,associatedOnly:R?!1:A,checkCreateATAOwner:k});me&&(C=me),B.addInstruction(We||{})}C===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let N=s;if(!N){let me=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});me||this.logAndCreateError("cannot found pool:",x.toBase58()),N=sn.decode(me.data)}let O=a,L=await Oe(this.scope.connection,[O?void 0:N.configId,N.platformId].filter(Boolean).map(me=>({pubkey:me})));if(!O){let me=L.find(We=>We.pubkey.equals(N.configId));(!me||!me.accountInfo)&&this.logAndCreateError("config not found: ",N.configId.toBase58()),O=Gn.decode(me.accountInfo.data)}let v=L.find(me=>me.pubkey.equals(N.platformId));(!v||!v.accountInfo)&&this.logAndCreateError("platform info not found: ",N.configId.toBase58());let Y=Ei.decode(v.accountInfo.data);c=c||Y.feeRate;let Q=Zt.buyExactIn({poolInfo:N,amountB:p,protocolFeeRate:O.tradeFeeRate,platformFeeRate:c,curveType:O.curveType,shareFeeRate:b,creatorFeeRate:Y.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),pe=new F(Q.amountA.amount.toString()).sub((ye=(Ae=Q.amountA.fee)==null?void 0:Ae.toString())!=null?ye:0),ke=y?new F(zn.sub(y).toNumber()/zn.toNumber()).clampedTo(0,1):new F(1),le=f!=null?f:y?new re(pe.mul(ke).toFixed(0)):Q.amountA.amount.sub((te=Q.amountA.fee)!=null?te:new re(0));Q.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${Q.amountA.toString()}, input ${o.toBase58()} amount: ${Q.amountB.toString()}`);let Pe=g?J(g,o,ve).publicKey:void 0;return Pe&&B.addInstruction({instructions:[Ot(this.scope.ownerPubKey,Pe,g,o)]}),B.addInstruction({instructions:[vl(e,this.scope.ownerPubKey,t,N.configId,N.platformId,x,I,C,N.vaultA,N.vaultB,n,o,i,ve,di(e,N.platformId,o).publicKey,pi(e,N.creator,o).publicKey,Q.amountB.lt(p)?Q.amountB:p,le,b,Pe)]}),B.addCustomComputeBudget(l),B.addTipInstruction(m),B.versionBuild({txVersion:u,extInfo:q(_({},Q),{decimalOutAmount:pe,minDecimalOutAmount:new F(le.toString())})})}async buyTokenExactOut({programId:e=st,authProgramId:t,mintA:n,mintAProgram:i=ve,mintB:o=xn,poolInfo:s,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new re(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new re(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let w=this.createTxBuilder(p),{publicKey:B}=Vi(e,n,o);t=t!=null?t:pn(e).publicKey;let x=s;if(!x){let ye=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});ye||this.logAndCreateError("cannot found pool:",B.toBase58()),x=sn.decode(ye.data)}let K=a,I=await Oe(this.scope.connection,[K?void 0:x.configId,x.platformId].filter(Boolean).map(ye=>({pubkey:ye})));if(!K){let ye=I.find(te=>te.pubkey.equals(x.configId));(!ye||!ye.accountInfo)&&this.logAndCreateError("config not found: ",x.configId.toBase58()),K=Gn.decode(ye.accountInfo.data)}let C=I.find(ye=>ye.pubkey.equals(x.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",x.configId.toBase58());let R=Ei.decode(C.accountInfo.data);u=u||R.feeRate;let N=c;if(!h)if(N)i=fi;else{let ye=await this.scope.connection.getAccountInfo(n);if(ye&&ye.owner.equals(fi)){i=ye.owner;let te=os(n,ye,i);N=is(te)||void 0}}let O=Zt.buyExactOut({poolInfo:x,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:R.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),L=new F(O.amountB.toString()),v=b?new F(zn.add(b).toNumber()/zn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new F(1),Y=(f!=null?f:b)?new re(L.mul(v).toFixed(0)):O.amountB,Q=this.scope.account.getAssociatedTokenAccount(n,i),pe=null,ke=o.equals(xn);w.addInstruction({instructions:[Ot(this.scope.ownerPubKey,Q,this.scope.ownerPubKey,n,i)]});let{account:le,instructionParams:Pe}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:ke?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!ke,notUseTokenAccount:ke,associatedOnly:ke?!1:k,checkCreateATAOwner:T});le&&(pe=le),w.addInstruction(Pe||{}),pe===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Ae=A?J(A,o,ve).publicKey:void 0;return Ae&&w.addInstruction({instructions:[Ot(this.scope.ownerPubKey,Ae,A,o)]}),w.addInstruction({instructions:[Fl(e,this.scope.ownerPubKey,t,x.configId,x.platformId,B,Q,pe,x.vaultA,x.vaultB,n,o,i,ve,di(e,x.platformId,o).publicKey,pi(e,x.creator,o).publicKey,y,Y,g,Ae)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:Y,outAmount:y}})}async sellToken({programId:e=st,authProgramId:t,mintAProgram:n=ve,mintA:i,mintB:o=xn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new re(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:pn(e).publicKey;let h=this.createTxBuilder(d);p.lte(new re(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=Vi(e,i,o),B;if(!T){let te=await this.scope.connection.getAccountInfo(i);if(te&&te.owner.equals(fi)){n=te.owner;let me=os(i,te,n);B=is(me)||void 0}}let x=null,K=null,I=o.equals(xn),{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(x=C),h.addInstruction(R||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let te=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",w.toBase58()),L=sn.decode(te.data)}let v=a,Y=await Oe(this.scope.connection,[v?void 0:L.configId,L.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!v){let te=Y.find(me=>me.pubkey.equals(L.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),v=Gn.decode(te.accountInfo.data)}let Q=Y.find(te=>te.pubkey.equals(L.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let pe=Ei.decode(Q.accountInfo.data);c=c||pe.feeRate;let ke=Zt.sellExactIn({poolInfo:L,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),le=new F(ke.amountB.toString()),Pe=y?new F(zn.sub(y).toNumber()/zn.toNumber()).clampedTo(0,1):new F(1),Ae=f!=null?f:y?new re(le.mul(Pe).toFixed(0)):ke.amountB;Ae.lte(new re(0))&&this.logAndCreateError(`out ${o.toBase58()} amount should be gt 0`);let ye=g?J(g,o,ve).publicKey:void 0;return ye&&h.addInstruction({instructions:[Ot(this.scope.ownerPubKey,ye,g,o)]}),h.addInstruction({instructions:[_l(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,x,K,L.vaultA,L.vaultB,i,o,n,ve,di(e,L.platformId,o).publicKey,pi(e,L.creator,o).publicKey,ke.amountA.amount.lt(p)?ke.amountA.amount:p,Ae,b,ye)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:Ae}})}async sellTokenExactOut({programId:e=st,authProgramId:t,mintAProgram:n=ve,mintA:i,mintB:o=xn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new re(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:pn(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new re(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=Vi(e,i,o),B;if(!T){let te=await this.scope.connection.getAccountInfo(i);if(te&&te.owner.equals(fi)){n=te.owner;let me=os(i,te,n);B=is(me)||void 0}}let x=null,K=null,I=o.equals(xn),{account:C,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(x=C),h.addInstruction(R||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let te=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",w.toBase58()),L=sn.decode(te.data)}let v=a,Y=await Oe(this.scope.connection,[v?void 0:L.configId,L.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!v){let te=Y.find(me=>me.pubkey.equals(L.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),v=Gn.decode(te.accountInfo.data)}let Q=Y.find(te=>te.pubkey.equals(L.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let pe=Ei.decode(Q.accountInfo.data);c=c||pe.feeRate;let ke=Zt.sellExactOut({poolInfo:L,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),le=new F(ke.amountA.amount.toString()),Pe=y?new F(zn.add(y).toNumber()/zn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new F(1),Ae=(f!=null?f:y)?new re(le.mul(Pe).toFixed(0)):ke.amountA.amount,ye=g?J(g,o,ve).publicKey:void 0;return ye&&h.addInstruction({instructions:[Ot(this.scope.ownerPubKey,ye,g,o)]}),h.addInstruction({instructions:[Vl(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,x,K,L.vaultA,L.vaultB,i,o,n,ve,di(e,L.platformId,o).publicKey,pi(e,L.creator,o).publicKey,p,Ae,b,ye)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:Ae}})}async createPlatformConfig({programId:e=st,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:i,cpConfigId:o,migrateCpLockNftScale:s,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:A}=Ea(e,t);return g.addInstruction({instructions:[El(e,t,n,i,A,o,a,s,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:A}})}async updatePlatformConfig({programId:e=st,platformAdmin:t,platformId:n,updateInfo:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Ea(e,t).publicKey;return u.addInstruction({instructions:[Wl(e,t,l,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimPlatformFee({programId:e=st,authProgramId:t,platformId:n,poolId:i,platformClaimFeeWallet:o,mintB:s,vaultB:a,mintBProgram:c=ve,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:pn(e).publicKey;let f=s,y=a;if(!f){let A=await this.scope.connection.getAccountInfo(i,{commitment:"processed"});A||this.logAndCreateError("cannot found pool:",i.toBase58());let k=sn.decode(A.data),T=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Gn.decode(T.data).mintB,y=y!=null?y:k.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=J(this.scope.ownerPubKey,f,ve).publicKey;return p.addInstruction({instructions:[Ot(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Ga(e,o,t,i,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=st,authProgramId:t,platformId:n,platformClaimFeeWallet:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:pn(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:sn.span},{memcmp:{offset:sn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=sn.decode(m.account.data);if(d.platformFee.lte(new re(0)))return;let p=J(this.scope.ownerPubKey,d.mintB,ve).publicKey;u.addInstruction({instructions:[Ot(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Ga(e,i,t,m.pubkey,n,d.vaultB,p,d.mintB,ve)]})}),u.addTipInstruction(a),o===0?u.sizeCheckBuildV0({computeBudgetConfig:s}):u.sizeCheckBuild({computeBudgetConfig:s})}async createVesting({programId:e=st,poolId:t,beneficiary:n,shareAmount:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});i.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=Uo(e,t,n).publicKey;return u.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,n,t,m,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async createMultipleVesting({programId:e=st,poolId:t,beneficiaryList:n,txVersion:i,computeBudgetConfig:o,feePayer:s}){let a=this.createTxBuilder(s);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=Uo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),i===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}async claimVesting({programId:e=st,poolId:t,poolInfo:n,vestingRecord:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=pn(e).publicKey,m=i||Uo(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=sn.decode(f.data)}let p=J(this.scope.ownerPubKey,d.mintA,ve).publicKey;return u.addInstruction({instructions:[Ot(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[qa(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,ve)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimMultiVesting({programId:e=st,poolIdList:t,poolsInfo:n={},vestingRecords:i={},txVersion:o,computeBudgetConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=pn(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=i[p]||Uo(e,d,this.scope.ownerPubKey).publicKey,b=J(this.scope.ownerPubKey,f.mintA,ve).publicKey;c.addInstruction({instructions:[Ot(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[qa(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,ve)]})}),o===0?c.sizeCheckBuildV0({computeBudgetConfig:s}):c.sizeCheckBuild({computeBudgetConfig:s})}async claimVaultPlatformFee({programId:e=st,platformId:t,mintB:n,mintBProgram:i=ve,claimFeeWallet:o,txVersion:s,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=di(e,t,n).publicKey,d=Wa(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,i);return l.addInstruction({instructions:[Ot(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,i),Xa(e,t,o!=null?o:this.scope.ownerPubKey,d,m,p,n,i)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:s})}async claimMultipleVaultPlatformFee({programId:e=st,platformList:t,unwrapSol:n=!0,txVersion:i,computeBudgetConfig:o,feePayer:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(s),l={};return t.forEach(async m=>{var b,g;let d=Wa(e).publicKey,p=di(e,m.id,m.mintB).publicKey,f=m.mintB.equals(xn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});A&&(y=A),u.addInstruction(k||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Xa(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:ve)]})}),i===0?u.sizeCheckBuildV0({computeBudgetConfig:o}):u.sizeCheckBuild({computeBudgetConfig:o})}async claimCreatorFee({programId:e=st,mintB:t,mintBProgram:n=ve,txVersion:i,computeBudgetConfig:o,txTipConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=pi(e,this.scope.ownerPubKey,t).publicKey,l=Da(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Ot(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),za(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(o),c.addTipInstruction(s),c.versionBuild({txVersion:i})}async claimMultipleCreatorFee({programId:e=st,mintBList:t,txVersion:n,computeBudgetConfig:i,feePayer:o}){let s=this.createTxBuilder(o);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:ve,l=pi(e,this.scope.ownerPubKey,c).publicKey,m=Da(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);s.addInstruction({instructions:[Ot(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),za(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?s.sizeCheckBuildV0({computeBudgetConfig:i}):s.sizeCheckBuild({computeBudgetConfig:i})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Oe(this.scope.connection,e.map(c=>({pubkey:c})),t),i={},o=[];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=sn.decode(u.accountInfo.data);i[e[c].toBase58()]=q(_({},l),{poolId:u.accountInfo.owner}),o.push(l.configId)}let s=await Oe(this.scope.connection,o.map(c=>({pubkey:c})),t),a={};for(let c=0;c<o.length;c++){let u=s[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+o[c].toBase58());let l=Gn.decode(u.accountInfo.data);a[o[c].toBase58()]=q(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(i).reduce((c,u)=>q(_({},c),{[u]:q(_({},i[u]),{configInfo:a[i[u].configId.toBase58()]})}),{})}}};import{PublicKey as Qf}from"@solana/web3.js";import{MintLayout as Hf,TOKEN_2022_PROGRAM_ID as Ya,TOKEN_PROGRAM_ID as Qa}from"@solana/spl-token";var Yo=class extends _e{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:i="strict"}=t||{},{mintList:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(s),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Nn.address,Nn),this._mintGroup.official.add(Nn.address),o.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ya.toBase58():Qa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ya.toBase58():Qa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ya.toBase58():Qa.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(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Nn;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(_({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Qf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Hf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.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 rs=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new tn(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=o,this._apiCacheTime=c||5*60*1e3,this.logger=we("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new so({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ro({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Yo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new No({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Eo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Ht({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Oi({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new _i({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new zo({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=jf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,c=new wr({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),u=new rs(q(_({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(kr);return this._owner.publicKey}setOwner(e){return this._owner=e?new tn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(zu);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(i=>q(_({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.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{rs as Raydium};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=raydium.mjs.map
|