@raydium-io/raydium-sdk-v2 0.2.6-alpha → 0.2.7-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/api/api.d.ts +1 -1
- package/lib/api/index.d.ts +1 -1
- package/lib/api/type.d.ts +1 -1
- package/lib/{api-c81dd6be.d.ts → api-92e9adc3.d.ts} +3 -3
- package/lib/common/accountInfo.d.ts +1 -1
- package/lib/common/bignumber.d.ts +1 -1
- package/lib/common/constant.d.ts +1 -1
- package/lib/common/fractionUtil.d.ts +1 -1
- package/lib/common/index.d.ts +1 -1
- package/lib/common/transfer.d.ts +1 -1
- package/lib/common/txTool/txTool.d.ts +1 -1
- package/lib/common/txTool/txUtils.d.ts +1 -1
- package/lib/common/utility.d.ts +1 -1
- package/lib/index.d.ts +3 -3
- 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/module/amount.d.ts +1 -1
- package/lib/module/fraction.d.ts +1 -1
- package/lib/module/index.d.ts +1 -1
- package/lib/module/percent.d.ts +1 -1
- package/lib/module/price.d.ts +1 -1
- package/lib/raydium/account/account.d.ts +3 -3
- package/lib/raydium/account/index.d.ts +1 -1
- package/lib/raydium/account/instruction.d.ts +1 -1
- package/lib/raydium/account/types.d.ts +1 -1
- package/lib/raydium/account/util.d.ts +1 -1
- package/lib/raydium/clmm/clmm.d.ts +3 -3
- package/lib/raydium/clmm/index.d.ts +3 -3
- package/lib/raydium/clmm/instrument.d.ts +2 -2
- package/lib/raydium/clmm/layout.d.ts +5 -5
- package/lib/raydium/clmm/type.d.ts +2 -2
- package/lib/raydium/clmm/utils/math.d.ts +2 -2
- package/lib/raydium/clmm/utils/pool.d.ts +2 -2
- package/lib/raydium/clmm/utils/position.d.ts +2 -2
- package/lib/raydium/clmm/utils/tick.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
- package/lib/raydium/cpmm/cpmm.d.ts +3 -3
- 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/curve/calculator.d.ts +1 -1
- package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
- package/lib/raydium/cpmm/index.d.ts +1 -1
- package/lib/raydium/cpmm/instruction.d.ts +1 -1
- package/lib/raydium/cpmm/type.d.ts +1 -1
- package/lib/raydium/farm/config.d.ts +1 -1
- package/lib/raydium/farm/farm.d.ts +3 -3
- package/lib/raydium/farm/index.d.ts +1 -1
- package/lib/raydium/farm/instruction.d.ts +1 -1
- package/lib/raydium/farm/layout.d.ts +1 -1
- package/lib/raydium/farm/type.d.ts +1 -1
- package/lib/raydium/farm/util.d.ts +1 -1
- package/lib/raydium/ido/ido.d.ts +3 -3
- package/lib/raydium/ido/index.d.ts +3 -3
- package/lib/raydium/ido/instruction.d.ts +1 -1
- package/lib/raydium/ido/type.d.ts +1 -1
- package/lib/raydium/index.d.ts +3 -3
- 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/curve/curve.d.ts +1 -1
- package/lib/raydium/launchpad/index.d.ts +3 -3
- package/lib/raydium/launchpad/launchpad.d.ts +3 -3
- package/lib/raydium/launchpad/layout.d.ts +2 -2
- package/lib/raydium/launchpad/pda.d.ts +1 -1
- package/lib/raydium/launchpad/type.d.ts +1 -1
- package/lib/raydium/liquidity/index.d.ts +1 -1
- package/lib/raydium/liquidity/instruction.d.ts +1 -1
- package/lib/raydium/liquidity/liquidity.d.ts +3 -3
- package/lib/raydium/liquidity/type.d.ts +1 -1
- package/lib/raydium/liquidity/utils.d.ts +1 -1
- package/lib/raydium/marketV2/createMarket.d.ts +3 -3
- package/lib/raydium/marketV2/index.d.ts +3 -3
- package/lib/raydium/moduleBase.d.ts +3 -3
- package/lib/raydium/raydium.d.ts +3 -3
- 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/constant.d.ts +1 -1
- package/lib/raydium/token/index.d.ts +1 -1
- package/lib/raydium/token/token.d.ts +3 -3
- package/lib/raydium/token/type.d.ts +1 -1
- package/lib/raydium/token/utils.d.ts +1 -1
- package/lib/raydium/tradeV2/index.d.ts +2 -2
- package/lib/raydium/tradeV2/instrument.d.ts +2 -2
- package/lib/raydium/tradeV2/trade.d.ts +3 -3
- package/lib/raydium/tradeV2/type.d.ts +2 -2
- package/lib/raydium/type.d.ts +1 -1
- package/lib/raydium/utils1216/index.d.ts +3 -3
- package/lib/raydium/utils1216/utils1216.d.ts +3 -3
- package/lib/{raydium-0ce2c946.d.ts → raydium-bd752ae1.d.ts} +2 -2
- package/lib/{type-dabc7a99.d.ts → type-f95c297a.d.ts} +1 -1
- package/package.json +1 -1
- package/src/raydium/cpmm/cpmm.ts +70 -65
package/lib/raydium/raydium.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Ol=Object.defineProperty,Ml=Object.defineProperties;var vl=Object.getOwnPropertyDescriptors;var Do=Object.getOwnPropertySymbols;var Qa=Object.prototype.hasOwnProperty,Ha=Object.prototype.propertyIsEnumerable;var za=(r,e,t)=>e in r?Ol(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,v=(r,e)=>{for(var t in e||(e={}))Qa.call(e,t)&&za(r,t,e[t]);if(Do)for(var t of Do(e))Ha.call(e,t)&&za(r,t,e[t]);return r},q=(r,e)=>Ml(r,vl(e));var Ue=(r,e)=>{var t={};for(var n in r)Qa.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Do)for(var n of Do(r))e.indexOf(n)<0&&Ha.call(r,n)&&(t[n]=r[n]);return t};import{merge as vf}from"lodash";import Mu from"axios";import{PublicKey as Za}from"@solana/web3.js";import{get as ja,set as _l}from"lodash";var os=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}},Ya={},Fl={};function Pe(r){let e=ja(Ya,r);if(!e){let t=ja(Fl,r);e=new os({name:r,logLevel:t}),_l(Ya,r,e)}return e}import{MINT_SIZE as El,TOKEN_PROGRAM_ID as Vl,getTransferFeeConfig as Dl,unpackMint as Wl}from"@solana/spl-token";var rs=Pe("Raydium_accountInfo_util");async function Ht(r,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:o=100}=v({batchRequest:!1},t),s=ss(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=ss(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&rs.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:b,owner:y,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&rs.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:b,owner:new Za(y),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&rs.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Oe(r,e,t){let n=await Ht(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>q(v({},i),{accountInfo:n[o]}))}async function pi({connection:r,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await Oe(r,e.map(c=>({pubkey:pt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<El){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Wl(c.pubkey,c.accountInfo,(o=c.accountInfo)==null?void 0:o.owner);i[c.pubkey.toString()]=q(v({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Vl,feeConfig:(a=Dl(u))!=null?a:void 0})}return i[Za.default.toBase58()]=i[Y.toBase58()],i}import un from"bn.js";var fi=9e15,Kn=1e9,as="0123456789abcdef",qo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Uo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",us={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-fi,maxE:fi,crypto:!1},tu,fn,pe=!0,Xo="[DecimalError] ",xn=Xo+"Invalid argument: ",nu=Xo+"Precision limit exceeded",iu=Xo+"crypto unavailable",ou="[object Decimal]",ft=Math.floor,tt=Math.pow,ql=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Ul=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Gl=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ru=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Yt=1e7,re=7,Xl=9007199254740991,zl=qo.length-1,cs=Uo.length-1,U={toStringTag:ou};U.absoluteValue=U.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),te(r)};U.ceil=function(){return te(new this.constructor(this),this.e+1,2)};U.clampedTo=U.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(xn+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};U.comparedTo=U.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};U.cosine=U.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())+re,n.rounding=1,t=Ql(n,lu(n,t)),n.precision=r,n.rounding=e,te(fn==2||fn==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};U.cubeRoot=U.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(pe=!1,o=l.s*tt(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=ut(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=tt(t,1/3),r=ft((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),ut(a.d).slice(0,s)===(t=ut(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(te(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")&&(te(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return pe=!0,te(n,r,m.rounding,e)};U.decimalPlaces=U.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-ft(this.e/re))*re,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};U.dividedBy=U.div=function(r){return Ne(this,new this.constructor(r))};U.dividedToIntegerBy=U.divToInt=function(r){var e=this,t=e.constructor;return te(Ne(e,new t(r),0,1,1),t.precision,t.rounding)};U.equals=U.eq=function(r){return this.cmp(r)===0};U.floor=function(){return te(new this.constructor(this),this.e+1,3)};U.greaterThan=U.gt=function(r){return this.cmp(r)>0};U.greaterThanOrEqualTo=U.gte=function(r){var e=this.cmp(r);return e==1||e===0};U.hyperbolicCosine=U.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/Qo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=bi(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 te(o,s.precision=t,s.rounding=n,!0)};U.hyperbolicSine=U.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=bi(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/Qo(5,r)),i=bi(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,te(i,e,t,!0)};U.hyperbolicTangent=U.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)};U.inverseCosine=U.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))};U.inverseHyperbolicCosine=U.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,pe=!1,t=t.times(t).minus(1).sqrt().plus(t),pe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};U.inverseHyperbolicSine=U.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,pe=!1,t=t.times(t).plus(1).sqrt().plus(t),pe=!0,n.precision=r,n.rounding=e,t.ln())};U.inverseHyperbolicTangent=U.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?te(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)};U.inverseSine=U.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)))};U.inverseTangent=U.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<=cs)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<=cs)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/re+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(pe=!1,e=Math.ceil(a/re),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)),pe=!0,te(s,l.precision=m,l.rounding=d,!0)};U.isFinite=function(){return!!this.d};U.isInteger=U.isInt=function(){return!!this.d&&ft(this.e/re)>this.d.length-2};U.isNaN=function(){return!this.s};U.isNegative=U.isNeg=function(){return this.s<0};U.isPositive=U.isPos=function(){return this.s>0};U.isZero=function(){return!!this.d&&this.d[0]===0};U.lessThan=U.lt=function(r){return this.cmp(r)<0};U.lessThanOrEqualTo=U.lte=function(r){return this.cmp(r)<1};U.logarithm=U.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(pe=!1,a=m+p,s=Sn(u,a),n=e?Go(l,a+10):Sn(r,a),c=Ne(s,n,a,1),Di(c.d,i=m,d))do if(a+=10,s=Sn(u,a),n=e?Go(l,a+10):Sn(r,a),c=Ne(s,n,a,1),!o){+ut(c.d).slice(i+1,i+15)+1==1e14&&(c=te(c,m+1,0));break}while(Di(c.d,i+=10,d));return pe=!0,te(c,m,d)};U.minus=U.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 pe?te(r,a,c):r}if(t=ft(r.e/re),l=ft(p.e/re),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/re),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]=Yt-1;--u[i],u[n]+=Yt}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=zo(u,t),pe?te(r,a,c):r):new f(c===3?-0:0)};U.modulo=U.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]?te(new n(t),n.precision,n.rounding):(pe=!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),pe=!0,t.minus(e))};U.naturalExponential=U.exp=function(){return ls(this)};U.naturalLogarithm=U.ln=function(){return Sn(this)};U.negated=U.neg=function(){var r=new this.constructor(this);return r.s=-r.s,te(r)};U.plus=U.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)),pe?te(r,a,c):r;if(o=ft(m.e/re),n=ft(r.e/re),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/re),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)/Yt|0,u[i]%=Yt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=zo(u,n),pe?te(r,a,c):r};U.precision=U.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(xn+r);return t.d?(e=su(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};U.round=function(){var r=this,e=r.constructor;return te(new e(r),r.e+1,e.rounding)};U.sine=U.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())+re,n.rounding=1,t=jl(n,lu(n,t)),n.precision=r,n.rounding=e,te(fn>2?t.neg():t,r,e,!0)):new n(NaN)};U.squareRoot=U.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(pe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=ut(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=ft((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),ut(o.d).slice(0,t)===(e=ut(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(te(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")&&(te(n,c+1,1),r=!n.times(n).eq(s));break}return pe=!0,te(n,c,l.rounding,r)};U.tangent=U.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,te(fn==2||fn==4?t.neg():t,r,e,!0)):new n(NaN)};U.times=U.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=ft(l.e/re)+ft(r.e/re),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%Yt|0,e=a/Yt|0;o[i]=(o[i]+e)%Yt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=zo(o,t),pe?te(r,m.precision,m.rounding):r};U.toBinary=function(r,e){return ds(this,2,r,e)};U.toDecimalPlaces=U.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(Tt(r,0,Kn),e===void 0?e=n.rounding:Tt(e,0,8),te(t,r+t.e+1,e))};U.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=an(n,!0):(Tt(r,0,Kn),e===void 0?e=i.rounding:Tt(e,0,8),n=te(new i(n),r+1,e),t=an(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};U.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=an(i):(Tt(r,0,Kn),e===void 0?e=o.rounding:Tt(e,0,8),n=te(new o(i),r+i.e+1,e),t=an(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};U.toFraction=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.d,b=p.constructor;if(!f)return new b(p);if(u=t=new b(1),n=c=new b(0),e=new b(n),o=e.e=su(f)-p.e-1,s=o%re,e.d[0]=tt(10,s<0?re+s:s),r==null)r=o>0?e:u;else{if(a=new b(r),!a.isInt()||a.lt(u))throw Error(xn+a);r=a.gt(e)?o>0?e:u:a}for(pe=!1,a=new b(ut(f)),l=b.precision,b.precision=o=f.length*re*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],b.precision=l,pe=!0,d};U.toHexadecimal=U.toHex=function(r,e){return ds(this,16,r,e)};U.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:Tt(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]?(pe=!1,t=Ne(t,r,0,e,1).times(r),pe=!0,te(t)):(r.s=t.s,t=r),t};U.toNumber=function(){return+this};U.toOctal=function(r,e){return ds(this,8,r,e)};U.toPower=U.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(tt(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,o=c.rounding,r.eq(1))return te(a,n,o);if(e=ft(r.e/re),e>=r.d.length-1&&(t=u<0?-u:u)<=Xl)return i=au(c,a,t,n),r.s<0?new c(1).div(i):te(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=tt(+a,u),e=t==0||!isFinite(t)?ft(u*(Math.log("0."+ut(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):(pe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=ls(r.times(Sn(a,n+t)),n),i.d&&(i=te(i,n+5,1),Di(i.d,n,o)&&(e=n+10,i=te(ls(r.times(Sn(a,e+t)),e),e+5,1),+ut(i.d).slice(n+1,n+15)+1==1e14&&(i=te(i,n+1,0)))),i.s=s,pe=!0,c.rounding=o,te(i,n,o))};U.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=an(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(Tt(r,1,Kn),e===void 0?e=i.rounding:Tt(e,0,8),n=te(new i(n),r,e),t=an(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};U.toSignificantDigits=U.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(Tt(r,1,Kn),e===void 0?e=n.rounding:Tt(e,0,8)),te(new n(t),r,e)};U.toString=function(){var r=this,e=r.constructor,t=an(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};U.truncated=U.trunc=function(){return te(new this.constructor(this),this.e+1,1)};U.valueOf=U.toJSON=function(){var r=this,e=r.constructor,t=an(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function ut(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=re-n.length,t&&(o+=Bn(t)),o+=n;s=r[e],n=s+"",t=re-n.length,t&&(o+=Bn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function Tt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(xn+r)}function Di(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=re,i=0):(i=Math.ceil((e+1)/re),e%=re),o=tt(10,re-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)==tt(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)==tt(10,e-3)-1,s}function Wo(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]+=as.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 Ql(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Qo(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=bi(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,b,y,g,P,k,I,h,w,x,S,K,T,C,_,M=n.constructor,R=n.s==i.s?1:-1,L=n.d,F=i.d;if(!L||!L[0]||!F||!F[0])return new M(!n.s||!i.s||(L?F&&L[0]==F[0]:!F)?NaN:L&&L[0]==0||!F?R*0:R/0);for(c?(p=1,l=n.e-i.e):(c=Yt,p=re,l=ft(n.e/p)-ft(i.e/p)),C=F.length,K=L.length,g=new M(R),P=g.d=[],m=0;F[m]==(L[m]||0);m++);if(F[m]>(L[m]||0)&&l--,o==null?(w=o=M.precision,s=M.rounding):a?w=o+(n.e-i.e)+1:w=o,w<0)P.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,F=F[0],w++;(m<K||d)&&w--;m++)x=d*c+(L[m]||0),P[m]=x/F|0,d=x%F|0;f=d||m<K}else{for(d=c/(F[0]+1)|0,d>1&&(F=r(F,d,c),L=r(L,d,c),C=F.length,K=L.length),S=C,k=L.slice(0,C),I=k.length;I<C;)k[I++]=0;_=F.slice(),_.unshift(0),T=F[0],F[1]>=c/2&&++T;do d=0,u=e(F,k,C,I),u<0?(h=k[0],C!=I&&(h=h*c+(k[1]||0)),d=h/T|0,d>1?(d>=c&&(d=c-1),b=r(F,d,c),y=b.length,I=k.length,u=e(b,k,y,I),u==1&&(d--,t(b,C<y?_:F,y,c))):(d==0&&(u=d=1),b=F.slice()),y=b.length,y<I&&b.unshift(0),t(k,b,I,c),u==-1&&(I=k.length,u=e(F,k,C,I),u<1&&(d++,t(k,C<I?_:F,I,c))),I=k.length):u===0&&(d++,k=[0]),P[m++]=d,u&&k[0]?k[I++]=L[S]||0:(k=[L[S]],I=1);while((S++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,tu=f;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,te(g,a?o+g.e+1:o,s,f)}return g}}();function te(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+=re,s=e,l=m[d=0],c=l/tt(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/re),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,o%=re,s=o-re+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=re,s=o-re+i,c=s<0?0:l/tt(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%tt(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/tt(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]=tt(10,(re-e%re)%re),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=tt(10,re-o),m[d]=s>0?(l/tt(10,i-s)%tt(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]==Yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Yt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return pe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function an(r,e,t){if(!r.isFinite())return cu(r);var n,i=r.e,o=ut(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Bn(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+Bn(-i-1)+o,t&&(n=t-s)>0&&(o+=Bn(n))):i>=s?(o+=Bn(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+Bn(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=Bn(n))),o}function zo(r,e){var t=r[0];for(e*=re;t>=10;t/=10)e++;return e}function Go(r,e,t){if(e>zl)throw pe=!0,t&&(r.precision=t),Error(nu);return te(new r(qo),e,1,!0)}function jt(r,e,t){if(e>cs)throw Error(nu);return te(new r(Uo),e,t,!0)}function su(r){var e=r.length-1,t=e*re+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 Bn(r){for(var e="";r--;)e+="0";return e}function au(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/re+4);for(pe=!1;;){if(t%2&&(o=o.times(e),Ja(o.d,s)&&(i=!0)),t=ft(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),Ja(e.d,s)}return pe=!0,o}function $a(r){return r.d[r.d.length-1]&1}function uu(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 ls(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?(pe=!1,c=f):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(tt(2,m))/Math.LN10*2+5|0,c+=n,t=o=s=new d(1),d.precision=c;;){if(o=te(o.times(r),c,1),t=t.times(++l),a=s.plus(Ne(o,t,c,1)),ut(a.d).slice(0,c)===ut(s.d).slice(0,c)){for(i=m;i--;)s=te(s.times(s),c,1);if(e==null)if(u<3&&Di(s.d,c-n,p,u))d.precision=c+=10,t=o=a=new d(1),l=0,u++;else return te(s,d.precision=f,p,pe=!0);else return d.precision=f,s}s=a}}function Sn(r,e){var t,n,i,o,s,a,c,u,l,m,d,p=1,f=10,b=r,y=b.d,g=b.constructor,P=g.rounding,k=g.precision;if(b.s<0||!y||!y[0]||!b.e&&y[0]==1&&y.length==1)return new g(y&&!y[0]?-1/0:b.s!=1?NaN:y?0:b);if(e==null?(pe=!1,l=k):l=e,g.precision=l+=f,t=ut(y),n=t.charAt(0),Math.abs(o=b.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)b=b.times(r),t=ut(b.d),n=t.charAt(0),p++;o=b.e,n>1?(b=new g("0."+t),o++):b=new g(n+"."+t.slice(1))}else return u=Go(g,l+2,k).times(o+""),b=Sn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?te(b,k,P,pe=!0):b;for(m=b,c=s=b=Ne(b.minus(1),b.plus(1),l,1),d=te(b.times(b),l,1),i=3;;){if(s=te(s.times(d),l,1),u=c.plus(Ne(s,new g(i),l,1)),ut(u.d).slice(0,l)===ut(c.d).slice(0,l))if(c=c.times(2),o!==0&&(c=c.plus(Go(g,l+2,k).times(o+""))),c=Ne(c,new g(p),l,1),e==null)if(Di(c.d,l-f,P,a))g.precision=l+=f,u=s=b=Ne(m.minus(1),m.plus(1),l,1),d=te(b.times(b),l,1),i=a=1;else return te(c,g.precision=k,P,pe=!0);else return g.precision=k,c;c=u,i+=2}}function cu(r){return String(r.s*r.s/0)}function ms(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)%re,t<0&&(n+=re),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=re;n<i;)r.d.push(+e.slice(n,n+=re));e=e.slice(n),n=re-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),pe&&(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 Hl(r,e){var t,n,i,o,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ru.test(e))return ms(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(Ul.test(e))t=16,e=e.toLowerCase();else if(ql.test(e))t=2;else if(Gl.test(e))t=8;else throw Error(xn+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=au(n,new n(t),o,o*2)),u=Wo(e,t,Yt),l=u.length-1,o=l;u[o]===0;--o)u.pop();return o<0?new n(r.s*0):(r.e=zo(u,l),r.d=u,pe=!1,s&&(r=Ne(r,i,a*4)),c&&(r=r.times(Math.abs(c)<54?tt(2,c):Wi.pow(2,c))),pe=!0,r)}function jl(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:bi(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Qo(5,t)),e=bi(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 bi(r,e,t,n,i){var o,s,a,c,u=1,l=r.precision,m=Math.ceil(l/re);for(pe=!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 pe=!0,s.d.length=m+1,s}function Qo(r,e){for(var t=r;--e;)t*=r;return t}function lu(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 fn=n?4:1,e;if(t=e.divToInt(i),t.isZero())fn=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return fn=$a(t)?n?2:3:n?4:1,e;fn=$a(t)?n?1:4:n?3:2}return e.minus(i).abs()}function ds(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor,f=t!==void 0;if(f?(Tt(t,1,Kn),n===void 0?n=p.rounding:Tt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=cu(r);else{for(l=an(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=Wo(an(d),10,i),d.e=d.d.length),m=Wo(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=tu),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+=as.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=Wo(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=as.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 Ja(r,e){if(r.length>e)return r.length=e,!0}function Yl(r){return new this(r).abs()}function Zl(r){return new this(r).acos()}function $l(r){return new this(r).acosh()}function Jl(r,e){return new this(r).plus(e)}function em(r){return new this(r).asin()}function tm(r){return new this(r).asinh()}function nm(r){return new this(r).atan()}function im(r){return new this(r).atanh()}function om(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 rm(r){return new this(r).cbrt()}function sm(r){return te(r=new this(r),r.e+1,2)}function am(r,e,t){return new this(r).clamp(e,t)}function um(r){if(!r||typeof r!="object")throw Error(Xo+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Kn,"rounding",0,8,"toExpNeg",-fi,0,"toExpPos",0,fi,"maxE",0,fi,"minE",-fi,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=us[t]),(n=r[t])!==void 0)if(ft(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(xn+t+": "+n);if(t="crypto",i&&(this[t]=us[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(iu);else this[t]=!1;else throw Error(xn+t+": "+n);return this}function cm(r){return new this(r).cos()}function lm(r){return new this(r).cosh()}function mu(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,eu(o)){u.s=o.s,pe?!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++;pe?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 ms(u,o.toString())}else if(c!=="string")throw Error(xn+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),ru.test(o)?ms(u,o):Hl(u,o)}if(i.prototype=U,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=um,i.clone=mu,i.isDecimal=eu,i.abs=Yl,i.acos=Zl,i.acosh=$l,i.add=Jl,i.asin=em,i.asinh=tm,i.atan=nm,i.atanh=im,i.atan2=om,i.cbrt=rm,i.ceil=sm,i.clamp=am,i.cos=cm,i.cosh=lm,i.div=mm,i.exp=dm,i.floor=pm,i.hypot=fm,i.ln=bm,i.log=ym,i.log10=Am,i.log2=gm,i.max=Pm,i.min=wm,i.mod=km,i.mul=hm,i.pow=Tm,i.random=Im,i.round=Bm,i.sign=Sm,i.sin=xm,i.sinh=Km,i.sqrt=Cm,i.sub=Rm,i.sum=Lm,i.tan=Nm,i.tanh=Om,i.trunc=Mm,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 mm(r,e){return new this(r).div(e)}function dm(r){return new this(r).exp()}function pm(r){return te(r=new this(r),r.e+1,3)}function fm(){var r,e,t=new this(0);for(pe=!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 pe=!0,new this(1/0);t=e}return pe=!0,t.sqrt()}function eu(r){return r instanceof Wi||r&&r.toStringTag===ou||!1}function bm(r){return new this(r).ln()}function ym(r,e){return new this(r).log(e)}function gm(r){return new this(r).log(2)}function Am(r){return new this(r).log(10)}function Pm(){return uu(this,arguments,"lt")}function wm(){return uu(this,arguments,"gt")}function km(r,e){return new this(r).mod(e)}function hm(r,e){return new this(r).mul(e)}function Tm(r,e){return new this(r).pow(e)}function Im(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:Tt(r,1,Kn),n=Math.ceil(r/re),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(iu);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=re,n&&r&&(i=tt(10,re-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-=re)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<re&&(t-=re-n)}return s.e=t,s.d=a,s}function Bm(r){return te(r=new this(r),r.e+1,this.rounding)}function Sm(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function xm(r){return new this(r).sin()}function Km(r){return new this(r).sinh()}function Cm(r){return new this(r).sqrt()}function Rm(r,e){return new this(r).sub(e)}function Lm(){var r=0,e=arguments,t=new this(e[r]);for(pe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return pe=!0,te(t,this.precision,this.rounding)}function Nm(r){return new this(r).tan()}function Om(r){return new this(r).tanh()}function Mm(r){return te(r=new this(r),r.e+1,1)}U[Symbol.for("nodejs.util.inspect.custom")]=U.toString;U[Symbol.toStringTag]="Decimal";var Wi=U.constructor=mu(us);qo=new Wi(qo);Uo=new Wi(Uo);var O=Wi;import qm from"big.js";import Yo from"bn.js";import vm from"toformat";var _m=vm,qi=_m;import jo from"big.js";import Em from"bn.js";import Vm from"decimal.js-light";import Ui from"bn.js";var du=9007199254740991;function J(r){let e=Pe("Raydium_parseBigNumberish");if(r instanceof Ui)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new Ui(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=du||r<=-du)&&e.logWithError(`BigNumberish number overflow: ${r}`),new Ui(String(r))):typeof r=="bigint"?new Ui(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new Ui(0))}var Ho=Pe("module/fraction"),ps=qi(jo),Gi=qi(Vm),Dm={[0]:Gi.ROUND_DOWN,[1]:Gi.ROUND_HALF_UP,[2]:Gi.ROUND_UP},Wm={[0]:jo.roundDown,[1]:jo.roundHalfUp,[2]:jo.roundUp},Be=class{constructor(e,t=new Em(1)){this.numerator=J(e),this.denominator=J(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Be(this.denominator,this.numerator)}add(e){let t=e instanceof Be?e:new Be(J(e));return this.denominator.eq(t.denominator)?new Be(this.numerator.add(t.numerator),this.denominator):new Be(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Be?e:new Be(J(e));return this.denominator.eq(t.denominator)?new Be(this.numerator.sub(t.numerator),this.denominator):new Be(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Be?e:new Be(J(e));return new Be(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Be?e:new Be(J(e));return new Be(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<=0&&Ho.logWithError(`${e} is not positive.`),Gi.set({precision:e+1,rounding:Dm[n]});let i=new Gi(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)||Ho.logWithError(`${e} is not an integer.`),e<0&&Ho.logWithError(`${e} is negative.`),ps.DP=e,ps.RM=Wm[n]||1,new ps(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Um=Pe("Raydium_amount"),pu=qi(qm);function Gm(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")):Um.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var Ke=class extends Be{constructor(t,n,i=!0,o){let s=new Yo(0),a=fs.pow(new Yo(t.decimals));if(i)s=J(n);else{let c=new Yo(0),u=new Yo(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Gm(n.toString(),t.decimals);c=J(l),u=J(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=Pe(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 pu.DP=this.token.decimals,new pu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as Xm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as fu}from"@solana/spl-token";var Cn={chainId:101,address:Xm.default.toBase58(),programId:fu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},bt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:fu.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Ps}from"@solana/web3.js";import{PublicKey as De,SystemProgram as bu,SYSVAR_RENT_PUBKEY as zm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qm}from"@solana/spl-token";function B({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var bs=[B({pubkey:Qm,isWritable:!1}),B({pubkey:bu.programId,isWritable:!1}),B({pubkey:zm,isWritable:!1})];function ys({publicKey:r,transformSol:e}){let t=gs(r.toString());if(t instanceof De)return e&&t.equals(ot)?Y:t;if(e&&t.toString()===ot.toBase58())return Y;if(typeof t=="string"){if(t===De.default.toBase58())return De.default;try{return new De(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function gs(r){try{return new De(r)}catch{return r}}var Zo=new De("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Rn=new De("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ct=new De("SysvarRent111111111111111111111111111111111"),yu=new De("SysvarC1ock11111111111111111111111111111111"),Zt=new De("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Hm=new De("Sysvar1nstructions1111111111111111111111111"),As=bu.programId,Ib=new De("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Bb=new De("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Sb=new De("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),xb=new De("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Kb=new De("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Cb=new De("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Rb=new De("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Lb=new De("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Nb=new De("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Ob=new De("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Mb=new De("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Y=new De("So11111111111111111111111111111111111111112"),ot=De.default;function pt(r){return ys({publicKey:r,transformSol:!0})}var ws=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===ot.toBase58()||e instanceof Ps&&ot.equals(e)){this.decimals=bt.decimals,this.symbol=bt.symbol,this.name=bt.name,this.mint=new Ps(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?Ps.default:ys({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},We=ws;We.WSOL=new ws(q(v({},bt),{mint:bt.address}));var ks=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},$o=ks;$o.SOL=new ks(Cn);import jm from"bn.js";var gu=new Be(new jm(100)),rt=class extends Be{toSignificant(e=5,t,n){return this.mul(gu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(gu).toFixed(e,t,n)}};var Ym=Pe("Raydium_price"),It=class extends Be{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new Be(hs(n.decimals),hs(i.decimals))}get raw(){return new Be(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new It({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ym.logWithError("mul token not equals");let n=super.mul(t);return new It({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 Zm}from"@solana/web3.js";import $m from"bn.js";function Au(r){return typeof r=="object"&&r!==null&&![We,Ke,Zm,Be,$m,It,rt].some(e=>typeof e=="object"&&r instanceof e)}function lt(r){return typeof r=="string"?gs(r):Array.isArray(r)?r.map(e=>lt(e)):Au(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,lt(t)])):r}var Bt=new un(0),Pu=new un(1),Cy=new un(2),Ry=new un(3),Ly=new un(5),fs=new un(10),Ny=new un(100),Oy=new un(1e3),My=new un(1e4);function hs(r){return fs.pow(J(r))}function Jo(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 er(r,e,t){return r.mul(e).add(t).sub(new un(1)).div(t)}function Ts(r,e,t){return r.mul(e).div(t)}function ss(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var $t=class{constructor(e){this._owner=e}get publicKey(){return $t.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return $t.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return $t.isKeyPair(this._owner)}get isPublicKey(){return $t.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!$t.isKeyPair(e)}};import{PublicKey as od}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rd}from"@solana/spl-token";import{ComputeBudgetProgram as wu,Keypair as hu,PublicKey as Jm,Transaction as Tu,TransactionMessage as ed,VersionedTransaction as Iu}from"@solana/web3.js";var G={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 td}from"@solana/spl-token";var ku=Pe("Raydium_txUtil"),Bu=1644;function tr(r){let e=[],t=[];return r.microLamports&&(e.push(wu.setComputeUnitPrice({microLamports:r.microLamports})),t.push(G.SetComputeUnitPrice)),r.units&&(e.push(wu.setComputeUnitLimit({units:r.units})),t.push(G.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function yi(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 nr(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 Is(r,e){r.length<1&&ku.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&ku.logWithError(`no signers provided:, ${e.toString()}`);let t=new Tu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Bu}catch{return!1}}function le(r,e){let[t,n]=Jm.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function Xi({instructions:r,payer:e,signers:t}){return Is(r,[e,...t])}function zi({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=hu.generate().publicKey.toString()}){let o=new ed({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Iu(o).serialize()).toString("base64").length<Bu}catch{return!1}}var nd=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),id=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof Iu&&(e=nd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Gn(r){let e=[];return r.forEach(t=>{t instanceof Tu&&(t.recentBlockhash||(t.recentBlockhash=td.toBase58()),t.feePayer||(t.feePayer=hu.generate().publicKey)),e.push(id(t))}),console.log("simulate tx string:",e),e}function ee(r,e,t){return le([r.toBuffer(),(t!=null?t:rd).toBuffer(),e.toBuffer()],new od("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var Su=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),xu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Ku=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Qi=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),tg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Cu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Bs=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ir=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),ng=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ru=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Xn=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Hi=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),or=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),zn=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ig=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Lu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),sd=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ad=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),ud=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),cd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),rr=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Nu=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),og=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ar=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),mt=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),rg=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),sg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),ag=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),ug=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),cg=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ji={IDO_PROGRAM_ID_V1:sd,IDO_PROGRAM_ID_V2:ad,IDO_PROGRAM_ID_V3:ud,IDO_PROGRAM_ID_V4:cd};var bn={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 ve from"bn.js";var cn=1e4;function Ce(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=q(v({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new ve(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===cn){let c=new ve(o.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=Jt(r.mul(new ve(cn)),new ve(cn-o.transferFeeBasisPoints)),u=new ve(o.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=Jt(l.mul(new ve(o.transferFeeBasisPoints)),new ve(cn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Jt(r.mul(new ve(o.transferFeeBasisPoints)),new ve(cn)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function en(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function Jt(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new ve(0))?t.add(new ve(1)):t}function Qn(r,e){if(r.isZero())return new ve(0);let t=r.div(e);return t.isZero()?new ve(1):r.mod(e).gt(new ve(0))?t.add(new ve(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 ve(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Jt(r.mul(new ve(i.transferFeeBasisPoints)),new ve(cn)),c=a.gt(o)?o:a;return{amount:r,fee:c,expirationTime:s}}function xs(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 ve(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(i.transferFeeBasisPoints===cn){let a=new ve(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=Jt(r.mul(new ve(cn)),new ve(cn-i.transferFeeBasisPoints)),c=new ve(i.maximumFee.toString()),u=a.sub(r).gt(c)?r.add(c):a,l=Jt(u.mul(new ve(i.transferFeeBasisPoints)),new ve(cn)),m=l.gt(o)?o:l;return{amount:u,fee:m,expirationTime:s}}}import{PublicKey as Ks,AddressLookupTableAccount as Ai}from"@solana/web3.js";async function Cs({connection:r,address:e,cluster:t="mainnet"}){let n=await Ht(r,[...new Set(e.map(o=>o.toString()))].map(o=>new Ks(o))),i={};for(let o=0;o<e.length;o++){let s=n[o],a=e[o];if(!s)continue;let c=new Ai({key:a,state:Ai.deserialize(s.data)});i[a.toString()]=c,t==="devnet"?gi[a.toString()]=c:ur[a.toString()]=c}return i}var ur={AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU:new Ai({key:new Ks("AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU"),state:Ai.deserialize(Buffer.from("AQAAAP//////////I1rcEwAAAAAvAQYwun9CU6c5Ikm2pAj+D9IEnCOR45nK+SFTGSdpd6J6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpBt324e51j94YQl285GzN2rYa/E2DuQ0n/r35KNihi/wFSlNQ+F3IgtYUpVZyeIopbd8eq6vQpgZ4iEky9O72oAVKU1qZKSEGTSTocWDaOHx8NbXdvJK7geQfqEBBBUSNBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvBkX2T9y7AHdNGviJAqQNtlDUDCnauQRWybsLji6nPM8Qkw5asQRvCdB3MbX6IEBwytOrpM32l4jQygKG9TKgR0vZScQ2AsM/IHeQ7RajUkyhuZdc8SGiqQz/7H34torNR/Wir3sl0ruUrVxJWEZfUg+QLNAxxODdBi53/OP7Ioil1cqeBM9dtZC3FLov4yyxWRM/wcGStyJX/QfTnLBAHqkqWotPKVlShCVQqpP9W5W1rOao65IMk5QuQ2kMIOxzDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu/YsA/yfEEFGcr8Z57VKDw8uQzpiru7g4lvjnfapW62W030syevD8k07SGoxUHiuT/ai7gAHWWhDsVmg/C63ajgpkH7Sn3GdutArDTfyqOkdqv4/IPC/EFFy7mGkfDd2C57N5a/4jC+BbmJy7wQaSEZr0CQU88lPtUxIVvzGjC95b8Ooss2TqmkrayGKofkPMGQn7Ux+9lfwBSNfxwH8NgbpqC/7LNlV4I7nCvsXf3p+ohQk9NrAJb2KAFpUqEIJ9ZBV7BYDzHF/ORKYlgtvPnXjudZQ6CEo5OzUDaNIomTCCsvhD16TxJjsbgne1kGnQPCFSoaxUbq2V1bPMFQ3VYP6wDZ9bKStCFKx9A3tNbwZFC5ZGAN83MFK7XoTy+OmmcFEr6rLOjfSuTfPvHJkSVxW6Qllwkl67XcBi5v00u2gQsbu+38sp+rd5pA/LvyWj4P94ZGZwc1tE2P88xekCLcAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAn+HWRkdcPKyFFMnVwEoD7vnD0jCKFIU1sImubYCxNTSVzsKpaQX+fzNxrLAI3L14JQnJx/D6Uk2LADIHGqnGELzjEbkBDAlaM77NkXMPfqXNLSveCkWI7UEgNs31WEWB6XHSYI/v5DklHOb4QTtDOR804PVbi3fjloZeLR2F8d4FuZmMMO7ck3Fnkn2zEMG5gOmqsygb6PjTitArVl52NhcSznTxVnguaIJxiZkAnurDmn3MWR0PC2GLghp2KJqHCc6QQ85odeIjFHKOlRlJyeSXVJmL8vb1UgOzsbJPVP8p6zM4M3C1Sd7uWIHP33G42AP2Zg8ucn/n6meQjjD266JgCWdxZD6PXs9CsnIeL7SSG0/6lGb9xfP0ZcWkCXB/3hjxHYVXjra/GPOeXGk0fLLKjCbk+mgs2w6d2oCwimBipTzuoZ30GiI8ij8VRzD5CzMWtu2m21eDBIfjGAEo4pQeNNonKcqzV/cleX8ySZLOHsz8PtBCrLqF+VkLm9hOzIT+6i/nIf6keR4GWKMOD4AvqfpjHoD4DuhBpz8P28+DxkGrDXXr/nr20x291VPvcTU/b+b+o2kC9G0kcXeTlLjU6a2TQXWlZ4gBUdBl1jgT7mObSTpLblNiXZsLkbmVXZwvFKXua5cUKlWed/w30skmEUraTuQqtqr5fHZPW9n57EmeTif6LjHL2YJFZkQU+TrJmFzqzmF4/b8OwrPQAprl8mX3q4LUIdAS/a+11B6DWD1Xk2++Sn94dLC4xjkO4Wtlw8c4XuzciVbepHOmnoWzVu/0y3KCrLCSfQxQ3br8DJCoVzhgtPsS2nZZjsBGIZgnU0QpMv+2MnRsnKwdp1VsrCX84j/qvaZn4WhKunippgTbN2EUs0tPTP55Qfgj+nKmjtWW5IYs72FrEwJKYoNfsmqaF4o5pf4v9zgPwVwY/5I4XJKUL2L25m9kAQcW/K+H1RTFEUoj8Z4ajpOmAB/dG0COmCphVMW2CCMvnxhcGiSgPnpDuWu6qiJ7NG7ye5kvHgefgqPLeicspNJ5EpL3XiRNLM2tmJLI1awAwOyd6iHv0dCkMYRKaa6rcaZeYwmKCkckm0kM2JNmnmmAaBQQ7mwmIM0IMxX4f5W6j9PqZWcJxF7r17T/lQBAmcjoupRiJifbnXCNUv9GhpRF19WcBdeKbivRJVlGop6I2RS6lGImJ9udcI1S/0aGlEXX1ZwF14puK9ElWUainojZFYVHLHD6dIP2ESjqBzg3ol1/wB7+/ylGwd9LS7wSZ2A630CJSVKwH47K9P4bB8PEQP8BwjMFa7xQHOqZFP1XqaQ==","base64"))})},gi={},Rs=async r=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(gi[e])return gi;let t=new Ks(e),n=await r.getAccountInfo(t);return n&&(gi[e]=new Ai({key:t,state:Ai.deserialize(n.data)})),gi};import{PublicKey as Pi,sendAndConfirmTransaction as Ls,SystemProgram as ld,Transaction as Yi,TransactionMessage as Zi,VersionedTransaction as $i}from"@solana/web3.js";import md from"axios";var cr=2e3,lr=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 md.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}=tr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(ld.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Pi(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(G.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!==Pi.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(v({},t||{})):this.build(t)}build(e){var n;let t=new Yi;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 yi(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Gn([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Ls(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:b=!0}=l||{},y=f!=null?f:await yi(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],k=0;for(let I of s){if(++k,k<=p)continue;let h=await Ls(this.connection,I,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});P.push(h)}return{txIds:P,signedTxs:s}}return{txIds:await await Promise.all(s.map(async P=>(P.recentBlockhash=y,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:b})))),signedTxs:s}}if(this.signAllTransactions){let P=s.map((I,h)=>(I.recentBlockhash=y,a[h].length&&I.sign(...a[h]),I));Gn(P);let k=await this.signAllTransactions(P);if(m){let I=0,h=[],w=async()=>{if(!k[I])return;let x=await this.connection.sendRawTransaction(k[I].serialize(),{skipPreflight:b});h.push({txId:x,status:"sent",signedTx:k[I]}),d==null||d([...h]),I++;let S=!1,K=null,T=null,C=_=>{K!==null&&clearInterval(K),T!==null&&this.connection.removeSignatureListener(T);let M=h.findIndex(R=>R.txId===x);if(M>-1){if(h[M].status==="error"||h[M].status==="success")return;h[M].status=_.err?"error":"success"}d==null||d([...h]),_.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var _;if(S){clearInterval(K);return}try{let M=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});M&&(S=!0,clearInterval(K),C({err:((_=M.meta)==null?void 0:_.err)||null}),console.log("tx status from getTransaction:",x))}catch(M){S=!0,clearInterval(K),console.error("getTransaction timeout:",M,x)}},cr)),T=this.connection.onSignature(x,_=>{if(S){this.connection.removeSignatureListener(T);return}S=!0,C(_)},"confirmed"),this.connection.getSignatureStatus(x)};return await w(),{txIds:h.map(x=>x.txId),signedTxs:k}}else{let I=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:b});I.push(w)}return{txIds:I,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 b;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:o}=f,s=Ue(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=v(v({},this.cluster==="devnet"?await Rs(this.connection):ur),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of c)a[y]===void 0&&u.push(new Pi(y));let l=await Cs({connection:this.connection,address:u});for(let[y,g]of Object.entries(l))a[y]=g;let m=i?Pi.default.toBase58():o!=null?o:await yi(this.connection,this.blockhashCommitment),d=new Zi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((b=this.owner)==null?void 0:b.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new $i(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var I;let{skipPreflight:g=!0,sendAndConfirm:P,notSendToRpc:k}=y||{};if(Gn([p]),(I=this.owner)!=null&&I.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await nr(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 b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(y=>y.message.recentBlockhash=p),Gn(s),(b=this.owner)!=null&&b.isKeyPair){if(m){let y=[];for(let g of s){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await nr(this.connection,P),y.push(P)}return{txIds:y,signedTxs:s}}return{txIds:await Promise.all(s.map(async y=>await this.connection.sendTransaction(y,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let y=await this.signAllTransactions(s);if(m){let g=0,P=[],k=async()=>{if(!y[g])return;let I=await this.connection.sendTransaction(y[g],{skipPreflight:f});P.push({txId:I,status:"sent",signedTx:y[g]}),d==null||d([...P]),g++;let h=!1,w=null,x=null,S=K=>{w!==null&&clearInterval(w),x!==null&&this.connection.removeSignatureListener(x);let T=P.findIndex(C=>C.txId===I);if(T>-1){if(P[T].status==="error"||P[T].status==="success")return;P[T].status=K.err?"error":"success"}d==null||d([...P]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let T=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});T&&(h=!0,clearInterval(w),S({err:((K=T.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",I))}catch(T){h=!0,clearInterval(w),console.error("getTransaction timeout:",T,I)}},cr)),x=this.connection.onSignature(I,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,S(K)},"confirmed"),this.connection.getSignatureStatus(I)};return k(),{txIds:[],signedTxs:y}}else{let g=[];for(let P=0;P<y.length;P+=1){let k=await this.connection.sendTransaction(y[P],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:y}}}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=Ue(m,["splitIns","computeBudgetConfig"]),o=n?tr(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>q(v({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],b=n?[...o.instructions,...f]:f,g=[...new Set(f.map(P=>P.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(P=>new Pi(P));if(p!==t[l]&&u.length<12&&(Xi({instructions:b,payer:this.feePayer,signers:g})||Xi({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,Xi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Yi().add(...o.instructions,...u)):a.push(new Yi().add(...u)),c.push(Array.from(new Set(u.map(P=>P.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(P=>s[P]).filter(P=>P!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(b=>b.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(b=>s[b]).filter(b=>b!==void 0);Xi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(b=>b.publicKey)})?a.push(new Yi().add(...o.instructions,...u)):a.push(new Yi().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 I;let{sequentially:f,onTxUpdate:b,skipTxCount:y=0,recentBlockHash:g,skipPreflight:P=!0}=p||{},k=g!=null?g:await yi(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),Gn(a),(I=this.owner)!=null&&I.isKeyPair){if(f){let h=0,w=[];for(let x of a){if(++h,h<=y){w.push("tx skipped");continue}let S=await Ls(this.connection,x,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});w.push(S)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(y,a.length)),w=[...a.slice(0,y),...h];if(f){let x=0,S=[],K=async()=>{if(!w[x])return;x<y&&(S.push({txId:"",status:"success",signedTx:w[x]}),b==null||b([...S]),x++,K());let T=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:P});S.push({txId:T,status:"sent",signedTx:w[x]}),b==null||b([...S]),x++;let C=!1,_=null,M=null,R=L=>{_!==null&&clearInterval(_),M!==null&&this.connection.removeSignatureListener(M);let F=S.findIndex(Q=>Q.txId===T);if(F>-1){if(S[F].status==="error"||S[F].status==="success")return;S[F].status=L.err?"error":"success"}b==null||b([...S]),L.err||K()};this.loopMultiTxStatus&&(_=setInterval(async()=>{var L;if(C){clearInterval(_);return}try{let F=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});F&&(C=!0,clearInterval(_),R({err:((L=F.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",T))}catch(F){C=!0,clearInterval(_),console.error("getTransaction timeout:",F,T)}},cr)),M=this.connection.onSignature(T,L=>{if(C){this.connection.removeSignatureListener(M);return}C=!0,R(L)},"confirmed"),this.connection.getSignatureStatus(T)};return await K(),{txIds:S.map(T=>T.txId),signedTxs:w}}else{let x=[];for(let S=0;S<w.length;S+=1){let K=await this.connection.sendRawTransaction(w[S].serialize(),{skipPreflight:P});x.push(K)}return{txIds:x,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let P=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:o=[]}=P,s=Ue(P,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=v(v({},this.cluster==="devnet"?await Rs(this.connection):ur),i),c=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let I of c)a[I]===void 0&&u.push(new Pi(I));let l=await Cs({connection:this.connection,address:u});for(let[I,h]of Object.entries(l))a[I]=h;let m=t?tr(t):{instructions:[],instructionTypes:[]},d=await yi(this.connection,this.blockhashCommitment),p=this.signers.reduce((I,h)=>q(v({},I),{[h.publicKey.toBase58()]:h}),{}),f=[],b=[],y=[],g=0;if(this.allInstructions.forEach(I=>{let h=[...y,I],w=t?[...m.instructions,...h]:h;if(I!==n[g]&&y.length<12&&(zi({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||zi({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})))y.push(I);else{if(y.length===0)throw Error("item ins too big");g+=I===n[g]?1:0;let x={};for(let S of[...new Set(c)])a[S]!==void 0&&(x[S]=a[S]);if(t&&zi({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let S=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new $i(S))}else{let S=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new $i(S))}b.push(Array.from(new Set(y.map(S=>S.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(S=>p[S]).filter(S=>S!==void 0)),y=[I]}}),y.length>0){let h=[...new Set(y.map(w=>w.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&zi({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new $i(w))}else{let w=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new $i(w))}b.push(h)}return(k=this.owner)!=null&&k.signer&&b.forEach(I=>{I.some(h=>h.publicKey.equals(this.owner.publicKey))||I.push(this.owner.signer)}),f.forEach((I,h)=>{I.sign(b[h])}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async I=>{var T;let{sequentially:h,onTxUpdate:w,skipTxCount:x=0,recentBlockHash:S,skipPreflight:K=!0}=I||{};if(f.map(async(C,_)=>{b[_].length&&C.sign(b[_]),S&&(C.message.recentBlockhash=S)}),Gn(f),(T=this.owner)!=null&&T.isKeyPair){if(h){let C=0,_=[];for(let M of f){if(++C,C<=x){console.log("skip tx: ",C),_.push("tx skipped");continue}let R=await this.connection.sendTransaction(M,{skipPreflight:K});await nr(this.connection,R),_.push(R)}return{txIds:_,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(x,f.length)),_=[...f.slice(0,x),...C];if(h){let M=0,R=[],L=async()=>{if(!_[M])return;if(M<x){R.push({txId:"",status:"success",signedTx:_[M]}),w==null||w([...R]),M++,L();return}let F=await this.connection.sendTransaction(_[M],{skipPreflight:K});R.push({txId:F,status:"sent",signedTx:_[M]}),w==null||w([...R]),M++;let Q=!1,$=null,ce=null,ke=de=>{$!==null&&clearInterval($),ce!==null&&this.connection.removeSignatureListener(ce);let ye=R.findIndex(Ae=>Ae.txId===F);if(ye>-1){if(R[ye].status==="error"||R[ye].status==="success")return;R[ye].status=de.err?"error":"success"}w==null||w([...R]),de.err||L()};this.loopMultiTxStatus&&($=setInterval(async()=>{var de;if(Q){clearInterval($);return}try{let ye=await this.connection.getTransaction(F,{commitment:"confirmed",maxSupportedTransactionVersion:0});ye&&(Q=!0,clearInterval($),ke({err:((de=ye.meta)==null?void 0:de.err)||null}),console.log("tx status from getTransaction:",F))}catch(ye){Q=!0,clearInterval($),console.error("getTransaction timeout:",ye,F)}},cr)),ce=this.connection.onSignature(F,de=>{if(Q){this.connection.removeSignatureListener(ce);return}Q=!0,ke(de)},"confirmed"),this.connection.getSignatureStatus(F)};return L(),{txIds:[],signedTxs:_}}else{let M=[];for(let R=0;R<_.length;R+=1){let L=await this.connection.sendTransaction(_[R],{skipPreflight:K});M.push(L)}return{txIds:M,signedTxs:_}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};import dd from"bn.js";var tn=new dd(1e6);var st={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"},Zg=v({},st);var Ou="ray_tab_hash",Ns="ray_req_hash",pd=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Ou);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Ou,r)),r},mr=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Ue(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(Ns)||"[]").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(v({},t),{time:Date.now(),session:pd()}));try{localStorage.setItem(Ns,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(Ns,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(c=>c())}return mr(q(v({},t),{logCount:r,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as fd,TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";var dr=Pe("Raydium_Api"),Os=new Map;var pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Mu.create({baseURL:this.urlConfigs.BASE_HOST||st.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return dr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(dr.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&&mr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),dr.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&&mr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),dr.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||st.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||st.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||st.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Mu.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||st.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||st.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||st.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||st.JUP_TOKEN_LIST})).map(t=>q(v({},t),{chainId:101,programId:t.tags.includes("token-2022")?fd.toBase58():bd.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||st.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||st.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||st.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Os.has(s)?(n.push(Os.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||st.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{Os.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&&pt(t).toBase58(),n&&n!=="undefined"?pt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||st.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||st.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||st.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||st.CHECK_AVAILABILITY)).data}};var fr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",vu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as kr,SystemProgram as zd}from"@solana/web3.js";import{AccountLayout as Ti,createAssociatedTokenAccountIdempotentInstruction as Us,TOKEN_PROGRAM_ID as Mn,TOKEN_2022_PROGRAM_ID as Qd}from"@solana/spl-token";var Ms=(...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=Pe(t)}createTxBuilder(e){return this.scope.checkOwner(),new lr({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(Ms(e))}logInfo(...e){this.logger.info(Ms(e))}logAndCreateError(...e){let t=Ms(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Dd,SystemProgram as Wd}from"@solana/web3.js";import qd from"bn.js";import{createCloseAccountInstruction as Ud,createInitializeAccountInstruction as Gd,createTransferInstruction as Xd,TOKEN_PROGRAM_ID as hi}from"@solana/spl-token";import{Keypair as _d,PublicKey as Yu}from"@solana/web3.js";import Fd from"bn.js";import{TOKEN_PROGRAM_ID as Ed}from"@solana/spl-token";function yd(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function vs(r,...e){if(!yd(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 _s(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 _u(r,e){vs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var yr=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),nn=(r,e)=>r<<32-e|r>>>e;var _A=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function gd(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Fs(r){return typeof r=="string"&&(r=gd(r)),vs(r),r}var br=class{clone(){return this._cloneInto()}},FA={}.toString;function Fu(r){let e=n=>r().update(Fs(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Ad(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 Eu=(r,e,t)=>r&e^~r&t,Vu=(r,e,t)=>r&e^r&t^e&t,gr=class extends br{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=yr(this.buffer)}update(e){_s(this);let{view:t,buffer:n,blockLen:i}=this;e=Fs(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=yr(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){_s(this),_u(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;Ad(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=yr(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 Pd=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]),Ln=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Nn=new Uint32Array(64),Es=class extends gr{constructor(){super(64,32,8,!1),this.A=Ln[0]|0,this.B=Ln[1]|0,this.C=Ln[2]|0,this.D=Ln[3]|0,this.E=Ln[4]|0,this.F=Ln[5]|0,this.G=Ln[6]|0,this.H=Ln[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)Nn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Nn[m-15],p=Nn[m-2],f=nn(d,7)^nn(d,18)^d>>>3,b=nn(p,17)^nn(p,19)^p>>>10;Nn[m]=b+Nn[m-7]+f+Nn[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=nn(a,6)^nn(a,11)^nn(a,25),p=l+d+Eu(a,c,u)+Pd[m]+Nn[m]|0,b=(nn(n,2)^nn(n,13)^nn(n,22))+Vu(n,i,o)|0;l=u,u=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+b|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(){Nn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Du=Fu(()=>new Es);import{PublicKey as Nd}from"@solana/web3.js";import zu,{isBN as Qu}from"bn.js";import{bits as wd,BitStructure as zA,blob as kd,Blob as QA,cstr as HA,f32 as jA,f32be as YA,f64 as ZA,f64be as $A,greedy as JA,Layout as hd,ns64 as eP,ns64be as tP,nu64 as Td,nu64be as nP,offset as Id,s16 as iP,s16be as oP,s24 as rP,s24be as sP,s32 as Bd,s32be as aP,s40 as uP,s40be as cP,s48 as lP,s48be as mP,s8 as dP,seq as Sd,struct as pP,Structure as xd,u16 as Kd,u16be as fP,u24 as bP,u24be as yP,u32 as Cd,u32be as gP,u40 as AP,u40be as PP,u48 as wP,u48be as kP,u8 as Rd,UInt as Ld,union as hP,Union as TP,unionLayoutDiscriminator as IP,utf8 as BP}from"@solana/buffer-layout";var Ar=hd,Wu=xd;var Vs=Ld;var qu=Rd,Ct=Kd;var Pr=Cd;var Uu=Td;var Fe=Bd;var Gu=Sd;var Se=kd;var Ds=wd,Xu=Id;var jn=class extends Ar{constructor(t,n,i){super(t,i);this.blob=Se(t),this.signed=n}decode(t,n=0){let i=new zu(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 zu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},wr=class extends Ar{constructor(t){super(8,t);this._lower=Ds(Pr(),!1),this._upper=Ds(Pr(),!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 v(v({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function W(r){return new Vs(1,r)}function yt(r){return new Vs(4,r)}function A(r){return new jn(8,!1,r)}function oe(r){return new jn(16,!1,r)}function Hu(r){return new jn(1,!0,r)}function ki(r){return new jn(8,!0,r)}function ju(r){return new jn(16,!0,r)}var wi=class extends Ar{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 N(r){return new wi(Se(32),e=>new Nd(e),e=>e.toBuffer(),r)}function Ge(r){return new wi(qu(),Od,Md,r)}function Od(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function Md(r){return r?1:0}function vd(r){let e=Pr("length"),t=E([e,Se(Xu(e,-e.span),"data")]);return new wi(t,({data:n})=>n,n=>({data:n}),r)}function St(r){return new wi(vd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}var Ws=class extends Wu{decode(e,t){return super.decode(e,t)}};function E(r,e,t){return new Ws(r,e,t)}function j(r,e,t){let n,i=typeof e=="number"?e:Qu(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Qu(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 Gu(r,i,t)}var Yn=E([N("mint"),N("owner"),A("amount"),yt("delegateOption"),N("delegate"),W("state"),yt("isNativeOption"),A("isNative"),A("delegatedAmount"),yt("closeAuthorityOption"),N("closeAuthority")]);var zP=Pe("Raydium_Util");function Zu({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Yn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:o,mint:c,amount:u,isAssociated:ee(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:Yu.default,amount:new Fd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function je({fromPublicKey:r,programId:e=Ed,assignSeed:t}){let n=t?btoa(t).slice(0,32):_d.generate().publicKey.toBase58().slice(0,32);return{publicKey:Vd(r,n,e),seed:n}}function Vd(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Du(n);return new Yu(i)}function qs(r){let{mint:e,tokenAccount:t,owner:n,programId:i=hi}=r;return Gd(t,e,n,i)}function yn(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=hi}=r;return Ud(e,t,i,n,o)}async function On(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Yn.span,n),c=J(t).add(new qd(a)),u=je({fromPublicKey:i,programId:hi});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Wd.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Yn.span,programId:hi}),qs({mint:new Dd(bt.address),tokenAccount:u.publicKey,owner:o,programId:hi})],instructionTypes:[G.CreateAccount,G.InitAccount],endInstructionTypes:s?[]:[G.CloseAccount],endInstructions:s?[]:[yn({tokenAccount:u.publicKey,payer:i,owner:o})]}}function $u({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=hi}){return Xd(r,e,t,BigInt(String(n)),i,o)}var Ji=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 ee(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=v(v({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Mn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Qd},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Zu({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=Mn,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 b,y,g,P;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 kr(t.tokenProgram||Mn),d=this.getAssociatedTokenAccount(n,new kr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!o||k.pubkey.equals(d))).sort((k,I)=>k.accountInfo.amount.lt(I.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=Us(s,d,s,n,m),I=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(b=f.instructions)==null||b.push(k),f.instructionTypes.push(G.CreateATA);else if(!(h.owner.equals(m)&&Ti.decode(h.data).mint.equals(n)&&Ti.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else I===void 0&&(f.instructions.push(k),f.instructionTypes.push(G.CreateATA));if(n.equals(Y)&&i.amount){let h=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(y=i.amount)!=null?y: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($u({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:Mn})),f.instructionTypes.push(G.TransferAmount))}return!c&&I===void 0&&(f.endInstructions.push(yn({owner:s,payer:i.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(G.CloseAccount)),{account:d,instructionParams:f}}else{let k=je({fromPublicKey:s,programId:m,assignSeed:l}),I=await this.scope.connection.getMinimumBalanceForRentExemption(Ti.span),h=zd.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:I+Number((P=(g=i.amount)==null?void 0:g.toString())!=null?P:0),space:Ti.span,programId:m});return f.instructions.push(h,qs({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(G.CreateAccount),f.instructionTypes.push(G.InitAccount),c||(f.endInstructions.push(yn({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(G.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Mn,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 Us(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[G.CreateATA],o=u}return i&&Y.toBase58()===t.toBase58()&&(a.endInstructions=[yn({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[G.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=Mn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new kr(Y).equals(o)){let p=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return v({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Us(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let b=await this.scope.connection.getAccountInfo(d);if(b===null)p.push(f);else if(!(b.owner.equals(Mn)&&Ti.decode(b.data).mint.equals(o)&&Ti.decode(b.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:[G.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=Mn,amount:o,useSOLBalance:s,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new kr(Y))&&s){let m=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=m,f=Ue(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=Ue(d,["tokenAccount"]);u=p,l.addInstruction(f)}return v({tokenAccount:u},l.AllTxData)}};import{PublicKey as xe,SystemProgram as lp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as fc}from"@solana/spl-token";import{PublicKey as Ys}from"@solana/web3.js";var Gs=E([W("instruction")]),Xs=E([W("instruction")]),Hd=E([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),oe("accRewardPerShare"),N("rewardVault"),N("rewardMint"),N("rewardSender"),A("rewardType"),j(A(),15,"padding")]),jd=E([A("state"),A("nonce"),N("lpVault"),N("rewardVault"),N(),N(),A(),A(),A("totalReward"),oe("perShareReward"),A("lastSlot"),A("perSlotReward")]),Yd=E([A("state"),A("nonce"),N("lpVault"),N("rewardVaultA"),A("totalRewardA"),oe("perShareRewardA"),A("perSlotRewardA"),W("option"),N("rewardVaultB"),Se(7),A("totalRewardB"),oe("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),N()]),Zd=E([A(),A("state"),A("nonce"),A("validRewardTokenNum"),oe("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),N("lpMint"),N("lpVault"),j(Hd,5,"rewardInfos"),N("creator"),N(),j(A(),32,"padding")]),$d=new Proxy(jd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(v({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),Jd=new Proxy(Yd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(v({},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)}}),hr=new Proxy(Zd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return q(v({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return q(v({},o),{rewardType:((s=Object.entries(vn).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),ep=E([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),zs=E([W("instruction"),A("nonce"),j(ep,5,"rewardTimeInfo")]),Qs=E([W("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Hs=E([W("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Iw=E([A("state"),N("id"),N("owner"),A("deposited"),j(A(),1,"rewardDebts")]),js=E([A("state"),N("id"),N("owner"),A("deposited"),j(oe(),1,"rewardDebts"),A(""),A("voteLockedBalance"),j(A(),15)]),Bw=E([A("state"),N("id"),N("owner"),A("deposited"),j(A(),2,"rewardDebts")]),Ju=E([A("state"),N("id"),N("owner"),A("deposited"),j(oe(),2,"rewardDebts"),j(A(),17)]),ec=E([A(),A("state"),N("id"),N("owner"),A("deposited"),j(oe(),5,"rewardDebts"),j(A(),16)]),Rt=E([W("instruction"),A("amount")]),tp=E([N("mint"),N("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),Hu("digitShift"),j(W(),7,"reserved1"),j(A(),7,"reserved2")]),np=E([Se(8),N("governanceProgramId"),N("realm"),N("realmGoverningTokenMint"),N("realmAuthority"),j(W(),32,"reserved1"),j(tp,4,"votingMints"),ki("timeOffset"),W("bump"),j(W(),7,"reserved2"),j(A(),11,"reserved3")]),ip=E([ki("startTime"),ki("endTime"),W("kind"),j(W(),15,"reserved")]),op=E([j(ip,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Ge("isUsed"),Ge("allowClawback"),W("votingMintConfigIdx"),j(W(),29,"reserved")]),rp=E([Se(8),N("voterAuthority"),N("registrar"),j(op,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),j(W(),94,"reserved")]);import{NATIVE_MINT as Mw}from"@solana/spl-token";var vw=Pe("Raydium_farm_config"),tc=new Ys("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),nc=new Ys("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var _w=new Ys("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var ic={3:js,5:Ju,6:ec},Zs=r=>[3,4,5,6].indexOf(r)!==-1,$s=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)},vn={"Standard SPL":0,"Option tokens":1},Ft={[Su.toString()]:3,[xu.toString()]:4,[Ku.toString()]:5,[Qi.toString()]:6,[bn.FARM_PROGRAM_ID_V3.toString()]:3,[bn.FARM_PROGRAM_ID_V4.toString()]:4,[bn.FARM_PROGRAM_ID_V5.toString()]:5,[bn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as ge,SystemProgram as sc,SYSVAR_CLOCK_PUBKEY as no,SYSVAR_RENT_PUBKEY as up,TransactionInstruction as Vt}from"@solana/web3.js";import ac from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as fk,createAssociatedTokenAccountIdempotentInstruction as bk,TOKEN_PROGRAM_ID as gn}from"@solana/spl-token";import sp from"bn.js";var ap=Pe("Raydium.farm.util");function eo({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function Et({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var oc=({programId:r,poolId:e})=>le([e.toBuffer()],r);function rc(r){return{isSet:new sp(1),rewardPerSecond:J(r.perSecond),rewardOpenTime:J(r.openTime),rewardEndTime:J(r.endTime),rewardType:J(vn[r.rewardType])}}function Js(r){return J(r.endTime).sub(J(r.openTime)).mul(J(r.perSecond))}function to(r){let e=ic[r];return e||ap.logWithError("invalid version",r),e}var cp=Pe("Raydium_farm_instruction"),Sk={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 io(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||cp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Gs.span);Gs.encode({instruction:s},a);let c=[B({pubkey:t}),B({pubkey:n}),B({pubkey:o,isWritable:!1}),B({pubkey:sc.programId,isWritable:!1}),B({pubkey:up,isWritable:!1})];return{instruction:new Vt({programId:i,keys:c,data:a}),instructionType:G.FarmV3CreateLedger}}function uc(r){var n;let e=Buffer.alloc(zs.span);zs.encode({instruction:0,nonce:new ac(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...bs,B({pubkey:r.farmId}),B({pubkey:r.farmAuthority,isWritable:!1}),B({pubkey:r.lpVault}),B({pubkey:r.lpMint,isWritable:!1}),B({pubkey:r.lockVault}),B({pubkey:r.lockMint,isWritable:!1}),B({pubkey:(n=r.lockUserAccount)!=null?n:ot}),B({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(B({pubkey:i.rewardMint,isWritable:!1}),B({pubkey:i.rewardVault}),B({pubkey:i.userRewardToken}));return{instruction:new Vt({programId:r.programId,keys:t,data:e}),instructionType:G.FarmV6Create}}function cc(r){let e=Buffer.alloc(Xs.span);Xs.encode({instruction:5},e);let t=[B({pubkey:gn,isWritable:!1}),B({pubkey:r.id}),B({pubkey:r.authority,isWritable:!1}),B({pubkey:r.lpVault,isWritable:!1}),B({pubkey:r.rewardVault}),B({pubkey:r.userRewardToken}),B({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Vt({programId:r.programId,keys:t,data:e}),instructionType:G.FarmV6CreatorWithdraw}}function ea({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(Qs.span);Qs.encode({instruction:3,rewardReopenTime:J(i.openTime),rewardEndTime:J(i.endTime),rewardPerSecond:J(i.perSecond)},o);let s=[B({pubkey:gn,isWritable:!1}),B({pubkey:n.id}),B({pubkey:n.lpVault,isWritable:!1}),B({pubkey:e}),B({pubkey:t}),B({pubkey:r,isWritable:!1,isSigner:!0})];return new Vt({programId:n.programId,keys:s,data:o})}function ta({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Hs.span);Hs.encode({instruction:4,isSet:new ac(1),rewardPerSecond:J(i.perSecond),rewardOpenTime:J(i.openTime),rewardEndTime:J(i.endTime),rewardType:J(vn[i.rewardType])},o);let s=[...bs,B({pubkey:t.id}),B({pubkey:t.authority,isWritable:!1}),B({pubkey:i.mint,isWritable:!1}),B({pubkey:n}),B({pubkey:e}),B({pubkey:r,isWritable:!1,isSigner:!0})];return new Vt({programId:t.programId,keys:s,data:o})}function oo(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=Et({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(Rt.span);Rt.encode({instruction:2,amount:J(s)},l);let m=[B({pubkey:gn,isWritable:!1}),B({pubkey:c}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:new ge(t.lpVault)}),B({pubkey:u}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(B({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(B({pubkey:i[d]}));return new Vt({programId:a,keys:m,data:l})}function ro(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=Et({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:12,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(B({pubkey:i[p]})),d.push(B({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function lc(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=E([W("instruction"),A("amount")]),m=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:a[0]}),B({pubkey:o,isSigner:!0,isWritable:!1}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1}),B({pubkey:i[1]}),B({pubkey:new ge(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Vt({keys:m,programId:c,data:d})}function so(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=Et({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:11,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function mc(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=Et({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:10,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function dc(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=Et({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:11,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(B({pubkey:i[p]})),d.push(B({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function pc(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=Et({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(Rt.span);Rt.encode({instruction:1,amount:J(s)},l);let m=[B({pubkey:gn,isWritable:!1}),B({pubkey:sc.programId,isWritable:!1}),B({pubkey:c}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:new ge(t.lpVault)}),B({pubkey:u}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(B({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(B({pubkey:i[d]}));return new Vt({programId:a,keys:m,data:l})}var ao=class extends _e{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ot)){let n=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Js(q(v({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Qi,txVersion:o,feePayer:s,lockProgram:a}){var x,S;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new xe(e.lpMint.address),lockInfo:{lockMint:(x=a==null?void 0:a.mint)!=null?x:tc,lockVault:(S=a==null?void 0:a.vault)!=null?S:nc},version:6,rewardInfos:t,programId:i},l=this.createTxBuilder(s),m=n!=null?n:this.scope.ownerPubKey,d=je({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(hr.span);l.addInstruction({instructions:[lp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:hr.span,programId:u.programId})]});let{publicKey:f,nonce:b}=oc({programId:new xe(u.programId),poolId:d.publicKey}),y=eo({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(vn[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(rc(K));let{rewardPubKey:T,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let _=K.mint.equals(ot)?new xe(bt.address):K.mint;P.push({rewardMint:_,rewardVault:eo({programId:u.programId,poolId:d.publicKey,mint:_,type:"rewardVault"}),userRewardToken:T})}let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new xe(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});I&&l.addInstruction(I),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=uc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:y,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:b});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:o,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:y,lockUserAccount:k,nonce:b}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i,feePayer:o}){var g;let s=Ft[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=lt((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(ot)?new xe(bt.address):n.mint,m=c.rewardInfos.findIndex(P=>new xe(P.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:ot,f=this.createTxBuilder(o),{rewardPubKey:b,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return y&&f.addInstruction(y),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[ea({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:b,farmKeys:c,rewardInfo:n})],instructionTypes:[G.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i,feePayer:o}){var m;let s=Ft[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=lt((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(ot)?new xe(bt.address):d.mint,f=c.rewardInfos.findIndex(I=>new xe(I.mint.address).equals(p)),b=a.rewardInfos[f];b||this.logAndCreateError("configuration does not exist","rewardMint",p);let y=(m=b.vault)!=null?m:ot,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:d,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ea({payer:this.scope.ownerPubKey,rewardVault:y,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[G.FarmV6Restart]})}return l.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o,feePayer:s}=e,a=Ft[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=lt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,l=this.createTxBuilder(s),m=i.mint.equals(ot)?new xe(bt.address):i.mint,d=eo({programId:new xe(n.programId),poolId:new xe(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:[ta({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:i})],instructionTypes:[G.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o,feePayer:s}=e,a=Ft[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=lt((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(ot)?new xe(bt.address):m.mint,p=eo({programId:new xe(n.programId),poolId:new xe(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:m,payer:u});b&&l.addInstruction(b),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let y=ta({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(v({},m),{mint:d})});l.addInstruction({instructions:[y],instructionTypes:[G.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=Ft[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Zs(f)||this.logAndCreateError("invalid farm program:",n.programId);let[b,y]=[new xe(n.programId),new xe(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=Et({programId:b,poolId:y,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(o);k.addCustomComputeBudget(l),k.addTipInstruction(m);let I={};for(let R of this.scope.account.tokenAccounts)if(a){let L=ee(this.scope.ownerPubKey,R.mint,R.programId).publicKey;R.publicKey&&L.equals(R.publicKey)&&(I[R.mint.toString()]=R.publicKey)}else I[R.mint.toString()]=R.publicKey;let h=g.lpMint,w=I[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",I);let x=[];for(let R of d){let L=s&&R.mint.address===Y.toString(),F=I[R.mint.address];if(!F){let{account:Q,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new xe(R.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:a,checkCreateATAOwner:c});F=Q,$&&k.addInstruction($)}I[R.mint.address]=F,x.push(F)}let S,K=await this.scope.connection.getAccountInfo(P);if(K&&(S=to(f).decode(K.data)),n.programId!==Qi.toString()&&n.programId!==bn.FARM_PROGRAM_ID_V6.toString()&&!S){let{instruction:R,instructionType:L}=io({id:y,programId:b,version:f,ledger:P,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[R],instructionTypes:[L]})}let T=$s({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});T&&this.logAndCreateError(T);let C={amount:J(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(R=>new xe(R))},_=f===6?pc(C):f===5?dc(C):mc(C),M={3:G.FarmV3Deposit,5:G.FarmV5Deposit,6:G.FarmV6Deposit};return k.addInstruction({instructions:[_],instructionTypes:[M[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=Ft[n.programId];Zs(f)||this.logAndCreateError("invalid farm program:",n.programId);let b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],y=this.createTxBuilder(a);y.addCustomComputeBudget(m),y.addTipInstruction(d);let g={};for(let T of this.scope.account.tokenAccounts)if(c){let C=ee(this.scope.ownerPubKey,T.mint).publicKey;T.publicKey&&C.equals(T.publicKey)&&(g[T.mint.toString()]=T.publicKey)}else g[T.mint.toString()]=T.publicKey;if(f!==4){let T=Et({programId:new xe(n.programId),poolId:new xe(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(T);if(C)to(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:_,instructionType:M}=io({id:new xe(b.id),programId:new xe(b.programId),version:f,ledger:T,owner:this.scope.ownerPubKey});y.addInstruction({instructions:[_],instructionTypes:[M]})}}o&&o.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=b.lpMint.address,k=s&&P===Y.toString(),I=g[P.toString()];if(!I){let{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.lpMint.programId,mint:new xe(P),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});I=T,C&&y.addInstruction(C)}g[P.toString()]=I;let h=[];for(let T of p){let C=s&&T.mint.address===Y.toString(),_=g[T.mint.address];if(!_){let{account:M,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T.mint.programId,mint:new xe(T.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});_=M,R&&y.addInstruction(R)}g[T.mint.address]=_,h.push(_)}let w=$s({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let x={amount:J(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(T=>new xe(T))},S=f===6?oo(x):f===5?ro(x):f===4?lc(x):so(x),K={3:G.FarmV3Withdraw,4:G.FarmV4Withdraw,5:G.FarmV5Withdraw,6:G.FarmV6Withdraw};return y.addInstruction({instructions:[S],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:i,txTipConfig:o,feePayer:s}){var b;this.scope.checkOwner();let a=lt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=Ft[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(y=>pt(y.mint.address).equals(pt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(b=u==null?void 0:u.vault)!=null?b:ot,m=this.createTxBuilder(s),d;if(t.equals(ot)||t.equals(xe.default)){let y=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Js(q(v({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new O(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=y.addresses.newAccount,m.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[fc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[G.CreateATA]})):d=y}let{instruction:p,instructionType:f}=cc({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 b=ee(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&b.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,b)=>q(v({},f),{[b.id]:b}),{});for(let f of Object.values(t)){let{programId:b,lpMint:y,rewardInfos:g,id:P}=f,k=Ft[b],I=y.address,h=n&&I===Y.toString(),w=m[I];if(!w){let{account:_,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.programId,mint:new xe(I),notUseTokenAccount:h,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:o,checkCreateATAOwner:s});w=_,M&&l.addInstruction(M)}m[I.toString()]=w;let x=[];for(let _ of g){let M=n&&_.mint.address===Y.toString(),R=m[_.mint.address];if(!R)if(M){let{account:L,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:_.mint.programId,mint:new xe(_.mint.address),notUseTokenAccount:M,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!M,associatedOnly:M?!1:o,checkCreateATAOwner:s});R=L,F&&l.addInstruction(F)}else{let L=new xe(_.mint.address);R=this.scope.account.getAssociatedTokenAccount(L),l.addInstruction({instructions:[fc(this.scope.ownerPubKey,R,this.scope.ownerPubKey,L)]})}m[_.mint.address]=R,x.push(R)}let S=p[P],K={amount:Bt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:S,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(_=>new xe(_))},T=k===6?oo(K):k===5?ro(K):so(K),C={3:G.FarmV3Withdraw,5:G.FarmV5Withdraw,6:G.FarmV6Withdraw};l.addInstruction({instructions:[T],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as Je}from"@solana/web3.js";import{AccountLayout as Zp,NATIVE_MINT as vr,TOKEN_PROGRAM_ID as Fn}from"@solana/spl-token";import{Keypair as Kr,PublicKey as X,SystemProgram as kn,TransactionInstruction as dt}from"@solana/web3.js";import da from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as yo,TOKEN_2022_PROGRAM_ID as Xe,TOKEN_PROGRAM_ID as Re}from"@solana/spl-token";import wp from"bn.js";import Dt from"bn.js";var qe=new Dt(0),Lt=new Dt(1),An=new Dt(-1),nt=new Dt(1).shln(64),Tr=new Dt(1).shln(128),uo=nt.sub(Lt),co=64,bc=Tr.subn(1),gt=-443636,wt=-gt,Wt=new Dt("4295048016"),qt=new Dt("79226673521066979257578248091"),Ir=new Dt("4295048017"),Br=new Dt("79226673521066979257578248090"),yc=16,gc="59543866431248",Ac="184467440737095516",Pc="15793534762490258745",Sr=new Dt(10).pow(new Dt(6));var wc={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:[]},ih=new Dt("18446744073700000000");import be from"bn.js";function xr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function na(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function ia(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function lo(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function kc(r,e){return lo(r,e)?null:na(r,e)}function hc(r,e){return lo(r,e)?null:ia(r,e)}var uh=Buffer.from("amm_config","utf8"),oa=Buffer.from("pool","utf8"),ra=Buffer.from("pool_vault","utf8"),dp=Buffer.from("pool_reward_vault","utf8"),Tc=Buffer.from("position","utf8"),pp=Buffer.from("tick_array","utf8"),fp=Buffer.from("operation","utf8"),bp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),yp=Buffer.from("observation","utf8");function Ic(r,e,t,n){return le([oa,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function sa(r,e,t){return le([ra,e.toBuffer(),t.toBuffer()],r)}function Bc(r,e,t){return le([dp,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return le([pp,e.toBuffer(),xr(t)],r)}function on(r,e,t,n){return le([Tc,e.toBuffer(),xr(t),xr(n)],r)}function kt(r,e){return le([Tc,e.toBuffer()],r)}function Pn(r){return le([Buffer.from("metadata","utf8"),Zt.toBuffer(),r.toBuffer()],Zt)}function mo(r){return le([fp],r)}function Ye(r,e){return le([bp,e.toBuffer()],r)}function Sc(r,e){return le([yp,e.toBuffer()],r)}var xc=Buffer.from("locked_position","utf8");function aa(r,e){return le([xc,e.toBuffer()],r)}function Ii(r,e){return le([xc,e.toBuffer()],r)}var gp=Buffer.from("support_mint","utf8");function ua(r,e){return le([gp,e.toBuffer()],r)}import{PublicKey as Nt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Kc}from"@solana/spl-token";import Ee from"bn.js";import ln from"bn.js";var po=class{static getfeeGrowthInside(e,t,n){let i=new ln(0),o=new ln(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 ln(0),a=new ln(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=me.wrappingSubU128(me.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=me.wrappingSubU128(me.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=me.mulDivFloor(me.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,nt),c=t.tokenFeesOwedA.add(a),u=me.mulDivFloor(me.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,nt),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=me.mulDivFloor(me.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,nt),c=t.tokenFeesOwedA.add(a),u=me.mulDivFloor(me.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,nt),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=me.wrappingSubU128(c,u.growthInsideLastX64),m=me.mulDivFloor(l,t.liquidity,nt),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=me.wrappingSubU128(c,u.growthInsideLastX64),m=me.mulDivFloor(l,t.liquidity,nt),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 ln(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 ln(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(me.wrappingSubU128(me.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 ln(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 ln(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(me.wrappingSubU128(me.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var y,g,P,k;let a=ue.priceToSqrtPriceX64(new O(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,(y=e.mintA.extensions)==null?void 0:y.feeConfig,s,!0),Ce(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,b]=[Ce(new ln(new O(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Ce(new ln(new O(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:b,expirationTime:en(d.expirationTime,p.expirationTime)}}};var Ap=15,he=class{static async getTickArrays(e,t,n,i,o,s,a){let c=[],u=Z.getTickArrayStartIndexByTick(i,o),l=Z.getInitializedTickArrayInRange(s,a,o,u,Math.floor(Ap/2));for(let p=0;p<l.length;p++){let{publicKey:f}=we(t,n,l[p]);c.push(f)}let m=(await Ht(e,c)).map(p=>p!==null?fo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(v({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,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=Z.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/he.tickCount(t)),a=n?Z.searchLowBitFromStart(i,o,s-1,1,t):Z.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=it-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<it;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=Z.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<it;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=we(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(Z.checkIsOutOfBoundary(e)){if(e>wt)return!1;let n=Z.getTickArrayStartIndexByTick(gt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return it*e}};var ca=14,wn=class{static maxTickInTickarrayBitmap(e){return e*it*Zn}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(!he.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-he.tickCount(n):t+he.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*it,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=kc(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=hc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-he.tickCount(n)}}}},bo=class{static getBitmapOffset(e,t){if(!he.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(wt<=t)throw Error(`extensionTickBoundary check error: ${wt}, ${t}`);if(n<=gt)throw Error(`extensionTickBoundary check error: ${n}, ${gt}`);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:Z.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=he.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=Z.mergeTickArrayBitmap(e).shln(Zn-1-a),u=lo(512,c)?null:na(512,c);if(u!==null){let l=t-u*he.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let c=Z.mergeTickArrayBitmap(e).shrn(a),u=lo(512,c)?null:ia(512,c);if(u!==null){let l=t+u*he.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-he.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%wn.maxTickInTickarrayBitmap(t),i=Math.floor(n/he.tickCount(t));return e<0&&n!=0&&(i=Zn-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:b,feeAmount:y}=$n.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(An),remainingAccounts:c,executionPrice:b,feeAmount:y}}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 b=this.preInitializedTickArrayStartIndex(e,s);if(b.isExist){let{publicKey:y}=we(e.programId,e.id,b.nextStartIndex);a.push(y)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=$n.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(An),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])?bo.checkTickArrayIsInit(he.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Z.checkTickArrayIsInitialized(Z.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,he.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=we(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/he.tickCount(e.tickSpacing)),i=t?Z.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Z.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=he.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=wn.nextInitializedTickArrayStartIndex(Z.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=bo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<gt||t>wt)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(v({},m),{perSecond:me.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Nt(d)});if(p.tokenMint.equals(Nt.default))continue;if(n<=p.openTime.toNumber()||i.eq(qe)){s.push(p);continue}let f=new Ee(Math.min(p.endTime.toNumber(),n)),b=f.sub(p.lastUpdateTime),y=me.mulDivFloor(b,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(y),P=me.mulDivFloor(b,p.emissionsPerSecondX64,nt),k=p.rewardTotalEmissioned.add(P);s.push(q(v({},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=Z.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=wn.maxTickInTickarrayBitmap(e),n=-t;return t>wt&&(t=he.getArrayStartIndex(wt,e)+he.tickCount(e)),n<gt&&(n=he.getArrayStartIndex(gt,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!he.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/he.tickCount(t)*Zn}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()]=Rc.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=Z.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Z.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=we(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=fo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(v({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest: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(kt(p,d).publicKey);let l=await Ht(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Bi.decode(d.data),f=p.poolId.toString(),b=e.find(S=>S.state.id.toBase58()===f);if(b===void 0)continue;let y=b.state,g=Z._getTickPriceLegacy({poolInfo:y,tick:p.tickLower,baseIn:!0}),P=Z._getTickPriceLegacy({poolInfo:y,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:I}=Ie.getAmountsFromLiquidity(y.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));b.positionAccount=[...(a=b.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:k,amountB:I,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(S=>q(v({},S),{pendingReward:new Ee(0)})),leverage:h,tokenFeeAmountA:new Ee(0),tokenFeeAmountB:new Ee(0)}];let w=await Z.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickLower,b.state.tickSpacing),x=await Z.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickUpper,b.state.tickSpacing);m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(o){let d=Object.values(m),p=await Ht(t,d,{batchRequest:i}),f={};for(let b=0;b<d.length;b++){let y=p[b];if(y===null)continue;let g=d[b].toString();f[g]=fo.decode(y.data)}for(let{state:b,positionAccount:y}of e)if(!!y)for(let g of y){let P=`${b.programId.toString()}-${b.id.toString()}-${g.tickLower}`,k=`${b.programId.toString()}-${b.id.toString()}-${g.tickUpper}`,I=f[m[P].toString()],h=f[m[k].toString()],w=I.ticks[Z.getTickOffsetInArray(g.tickLower,b.tickSpacing)],x=h.ticks[Z.getTickOffsetInArray(g.tickUpper,b.tickSpacing)],{tokenFeeAmountA:S,tokenFeeAmountB:K}=await po.GetPositionFees(b,g,w,x),T=await po.GetPositionRewards(b,g,w,x);g.tokenFeeAmountA=S.gte(new Ee(0))?S:new Ee(0),g.tokenFeeAmountB=K.gte(new Ee(0))?K:new Ee(0);for(let C=0;C<T.length;C++)g.rewardInfos[C].pendingReward=T[C].gte(new Ee(0))?T[C]:new Ee(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var _;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 O(0))?u=l?Wt.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:b,remainingAccounts:y,executionPrice:g,feeAmount:P}=Me.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((_=p.fee)!=null?_:qe),u,c),k=Ce(b,d,i,!1),I=ue.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?I:new O(1).div(I),w=b.mul(new Ee(Math.floor((1-s)*1e10))).div(new Ee(1e10)),x=Ce(w,d,i,!1),S=l?e.currentPrice:new O(1).div(e.currentPrice),K=new O(h).sub(S).abs(),T=S,C=new rt(new O(K).mul(10**15).toFixed(0),new O(T).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:x,expirationTime:en(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:P,remainingAccounts:y,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 We(q(v({},u),{mint:u.address,isToken2022:u.programId===Kc.toBase58()})),new We(q(v({},l),{mint:l.address,isToken2022:l.programId===Kc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:b,minAmountOut:y,expirationTime:g,currentPrice:P,executionPrice:k,priceImpact:I,fee:h,remainingAccounts:w,executionPriceX64:x}=Me.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Nt(u.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),S=q(v({},f),{amount:new Ke(m,f.amount),fee:f.fee===void 0?void 0:new Ke(m,f.fee)}),K=q(v({},b),{amount:new Ke(d,b.amount),fee:b.fee===void 0?void 0:new Ke(d,b.fee)}),T=q(v({},y),{amount:new Ke(d,y.amount),fee:y.fee===void 0?void 0:new Ke(d,y.fee)}),C=new It({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:P.mul(new O(10**(20+d.decimals))).toFixed(0)}),_=new It({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:k.mul(new O(10**(20+d.decimals))).toFixed(0)}),M=new Ke(m,h);return{allTrade:p,realAmountIn:S,amountOut:K,minAmountOut:T,expirationTime:g,currentPrice:C,executionPrice:_,priceImpact:I,fee:M,remainingAccounts:w,executionPriceX64:x}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:o,slippage:s,priceLimit:a=new O(0)}){var T;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 O(0))?l=c?qt.sub(new Ee(1)):Wt.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:b}=Me.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((T=m.fee)!=null?T:qe),l),y=c?e.mintB.address:e.mintA.address,g=Ce(d,u[y],i,!1),P=ue.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?P:new O(1).div(P),I=d.mul(new Ee(Math.floor((1+s)*1e10))).div(new Ee(1e10)),h=Ce(I,u[y],i,!0),w=c?e.currentPrice:new O(1).div(e.currentPrice),x=new O(k).sub(w).abs(),S=w,K=new rt(new O(x).mul(10**15).toFixed(0),new O(S).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:en(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:b,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,b,y;let o=e[t],s=Z.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Z.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,((b=o.rewardApr[1])!=null?b:0)*p,((y=o.rewardApr[2])!=null?y: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[pt(e.mintA.address).toString()],d=i[pt(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 b=ue.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),y=ue.getSqrtPriceX64FromTick(s),g=ue.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(b,y,g,t,!1,!1,0),{amountSlippageA:I,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(b,y,g,o,!1,!1,0),w=new O(P.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(k.toString()).div(new O(10).pow(f)).mul(d.value)),x=new O(I.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(h.toString()).div(new O(10).pow(f)).mul(d.value)),S=new O(1).div(w.add(x)),T=new O(l.volumeFee).mul(365).div(u).mul(S).mul(100).toNumber(),C=3600*24*365,_=e.rewardDefaultInfos.map(M=>{var F,Q;let R=M.mint.decimals,L=i[M.mint.address];return c<((F=M.startTime)!=null?F:0)||c>((Q=M.endTime)!=null?Q:0)||!M.perSecond||!L||R===void 0?0:new O(L.value).mul(new O(M.perSecond).mul(C)).div(new O(10).pow(R)).mul(S).mul(100).toNumber()});return{feeApr:T,rewardsApr:_,apr:T+_.reduce((M,R)=>M+R,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=ue.priceToSqrtPriceX64(new O(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 O(p.amount.sub((P=p.fee)!=null?P:qe).toString()).toFixed(0)),b;if(l.lte(m))b=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ee(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),I=Ie.getLiquidityFromTokenAmountB(m,l,f);b=t?k:I}else b=t?new Ee(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let y=await Me.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a});return{liquidity:b,amountA:t?p:y.amountA,amountB:t?y.amountB:p,amountSlippageA:t?p:y.amountSlippageA,amountSlippageB:t?y.amountSlippageB:p,expirationTime:y.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var y,g,P,k;let c=ue.getSqrtPriceX64FromTick(n),u=ue.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=Ie.getAmountsFromLiquidity(ue.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,o,a),[d,p]=[Ce(m.amountA,(y=t.mintA.extensions)==null?void 0:y.feeConfig,e,!0),Ce(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,b]=[Ce(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.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:b,expirationTime:en(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new Nt(c.id));(await Ht(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=Jn.decode(c.data))});let s=t.map(c=>Ye(new Nt(c.programId),new Nt(c.id)).publicKey),a=await Me.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>q(v({},c),{[u.id]:q(v({},n[u.id]),{id:new Nt(u.id),version:6,programId:new Nt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(v({},u.config),{id:new Nt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapAccount:Ye(new Nt(u.programId),new Nt(u.id)).publicKey,exBitmapInfo:a[Ye(new Nt(u.programId),new Nt(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 la={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Cc(r){return q(v({},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:la,week:la,month:la,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(v({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var me=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(qe)||(o=o.add(Lt)),o}static mulDivFloor(e,t,n){if(n.eq(qe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(qe))throw new Error("division by 0");return e.mul(t).add(n.sub(Lt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new be(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Tr).sub(t).mod(Tr)}};function at(r,e){return ma(r.mul(e),64,256)}function Pp(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ma(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 me.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return me.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(qe))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(qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(qe))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(qe))return e;let o=t.shln(co);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?me.mulDivCeil(s,e,a):me.mulDivRoundingUp(s,Lt,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 me.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(co);if(i)return e.add(o.div(t));{let s=me.mulDivRoundingUp(o,Lt,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<gt||e>wt)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=at(n,new be("18444899583751176192"))),(t&4)!=0&&(n=at(n,new be("18443055278223355904"))),(t&8)!=0&&(n=at(n,new be("18439367220385607680"))),(t&16)!=0&&(n=at(n,new be("18431993317065453568"))),(t&32)!=0&&(n=at(n,new be("18417254355718170624"))),(t&64)!=0&&(n=at(n,new be("18387811781193609216"))),(t&128)!=0&&(n=at(n,new be("18329067761203558400"))),(t&256)!=0&&(n=at(n,new be("18212142134806163456"))),(t&512)!=0&&(n=at(n,new be("17980523815641700352"))),(t&1024)!=0&&(n=at(n,new be("17526086738831433728"))),(t&2048)!=0&&(n=at(n,new be("16651378430235570176"))),(t&4096)!=0&&(n=at(n,new be("15030750278694412288"))),(t&8192)!=0&&(n=at(n,new be("12247334978884435968"))),(t&16384)!=0&&(n=at(n,new be("8131365268886854656"))),(t&32768)!=0&&(n=at(n,new be("3584323654725218816"))),(t&65536)!=0&&(n=at(n,new be("696457651848324352"))),(t&131072)!=0&&(n=at(n,new be("26294789957507116"))),(t&262144)!=0&&(n=at(n,new be("37481735321082"))),e>0&&(n=bc.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(Wt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new be(t-64),i=Pp(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<yc;){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(gc)),d=ma(m.sub(new be(Ac)),64,128).toNumber(),p=ma(m.add(new be(Pc)),64,128).toNumber();return d==p?d:ue.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ei=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=ei.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(qe))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(co),s=t.sub(e);return i?me.mulDivRoundingUp(me.mulDivCeil(o,s,t),Lt,e):me.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(qe))throw new Error("sqrtPriceX64A must greater than 0");return i?me.mulDivCeil(n,t.sub(e),nt):me.mulDivFloor(n,t.sub(e),nt)}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?me.mulDivRoundingUp(a,Lt,uo):a.shrn(co)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),me.mulDivFloor(n,uo,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 O(c.toString()).mul(l).toFixed(0)),d=new be(new O(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 P,k,I,h;let u=ue.priceToSqrtPriceX64(new O(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,b]=[Ce(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),Ce(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[y,g]=[Ce(new be(new O(p.amountA.toString()).mul(d).toFixed(0)),(I=e.mintA.extensions)==null?void 0:I.feeConfig,a,c),Ce(new be(new O(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:b,amountSlippageA:y,amountSlippageB:g,expirationTime:en(f.expirationTime,b.expirationTime)}}},$n=class{static swapCompute(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b=!1){if(d.eq(qe))throw new Error("amountSpecified must not be 0");if(f||(f=s?Wt.add(Lt):qt.sub(Lt)),s){if(f.lt(Wt))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 y=d.gt(qe),g={amountSpecifiedRemaining:d,amountCalculated:qe,sqrtPriceX64:m,tick:u>p?Math.min(p+he.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new be(0)},P=p,k=n[p],I=0,h=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(qe)&&!g.sqrtPriceX64.eq(f);){I>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let x=Z.nextInitTick(k,g.tick,l,s,h),S=x||null,K=null;if(!(S!=null&&S.liquidityGross.gtn(0))){let C=Me.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},P,s);if(!C.isExist){if(b)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")}P=C.nextStartIndex;let{publicKey:_}=we(e,t,P);K=_,k=n[P];try{S=Z.firstInitializedTick(k,s)}catch{throw Error("not found next tick info")}}w.tickNext=S.tick,w.initialized=S.liquidityGross.gtn(0),p!==P&&K&&(g.accounts.push(K),p=P),w.tickNext<gt?w.tickNext=gt:w.tickNext>wt&&(w.tickNext=wt),w.sqrtPriceNextX64=ue.getSqrtPriceX64FromTick(w.tickNext);let T;if(s&&w.sqrtPriceNextX64.lt(f)||!s&&w.sqrtPriceNextX64.gt(f)?T=f:T=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=$n.swapStepCompute(g.sqrtPriceX64,T,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(w.feeAmount),y?(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=S.liquidityNet;s&&(C=C.mul(An)),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}++I}try{let{nextStartIndex:w,isExist:x}=he.nextInitializedTickArray(g.tick,l,s,i,o);x&&p!==w&&(g.accounts.push(we(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:qe,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(qe);if(c){let l=me.mulDivFloor(i,Sr.sub(new be(o.toString())),Sr);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(An).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromOutput(e,n,i.mul(An),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(An))&&(a.amountOut=i.mul(An)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=i.sub(a.amountIn):a.feeAmount=me.mulDivCeil(a.amountIn,new be(o),Sr.sub(new be(o))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var it=60,Zn=512,Z=class{static getTickArrayAddressByTick(e,t,n,i){let o=Z.getTickArrayStartIndexByTick(n,i),{publicKey:s}=we(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Z.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=it)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=he.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)*he.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*it,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*it,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*it:e+t*it}static mergeTickArrayBitmap(e){let t=new wp(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*it));return[...Z.searchLowBitFromStart(e,t,s-1,o,n),...Z.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Z.searchHightBitFromStart(e,t,-7680,Zn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=Z.getAllInitializedTickArrayStartIndex(n,i,o);for(let c of a){let{publicKey:u}=we(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=>Z.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=he.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=>Z.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=he.tickCount(o);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<gt||e>wt}static nextInitTick(e,t,n,i,o){if(he.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<it;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=it-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<it;){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 O(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),o=ei.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 O(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 O(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),o=ei.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 O(1).div(a)}}};var Lc=E([Se(8),W("bump"),Ct("index"),N(""),yt("protocolFeeRate"),yt("tradeFeeRate"),Ct("tickSpacing"),j(A(),8,"")]),kp=E([yt("blockTimestamp"),ki("tickCumulative"),j(A(),4)]),Nc=E([Se(8),Ge("initialized"),A("recentEpoch"),Ct("observationIndex"),N("poolId"),j(kp,100,"observations"),j(A(),4)]),hp=E([W("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),oe("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),N("tokenMint"),N("tokenVault"),N("creator"),oe("rewardGrowthGlobalX64")]),Jn=E([Se(8),W("bump"),N("ammConfig"),N("creator"),N("mintA"),N("mintB"),N("vaultA"),N("vaultB"),N("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Ct("tickSpacing"),oe("liquidity"),oe("sqrtPriceX64"),Fe("tickCurrent"),yt(),oe("feeGrowthGlobalX64A"),oe("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),oe("swapInAmountTokenA"),oe("swapOutAmountTokenB"),oe("swapInAmountTokenB"),oe("swapOutAmountTokenA"),W("status"),j(W(),7,""),j(hp,3,"rewardInfos"),j(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),j(A(),15*4-3,"padding")]),Tp=E([oe("growthInsideLastX64"),A("rewardAmountOwed")]),Bi=E([Se(8),W("bump"),N("nftMint"),N("poolId"),Fe("tickLower"),Fe("tickUpper"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(Tp,3,"rewardInfos"),j(A(),8,"")]),yT=E([Se(8),W("bump"),N("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(oe(),3,"rewardGrowthInside"),j(A(),8,"")]),Ip=E([Fe("tick"),ju("liquidityNet"),oe("liquidityGross"),oe("feeGrowthOutsideX64A"),oe("feeGrowthOutsideX64B"),j(oe(),3,"rewardGrowthsOutsideX64"),j(yt(),13,"")]),fo=E([Se(8),N("poolId"),Fe("startTickIndex"),j(Ip,it,"ticks"),W("initializedTickCount"),j(W(),115,"")]),Oc=E([Se(329),j(N(),100,"whitelistMints")]),Rc=E([Se(8),N("poolId"),j(j(A(),8),ca,"positiveTickArrayBitmap"),j(j(A(),8),ca,"negativeTickArrayBitmap")]),gT=E([A(),W("bump"),N("owner"),N("poolId"),N("positionId"),N("nftAccount"),j(A(),8)]),Mc=E([Se(8),W("bump"),N("lockOwner"),N("poolId"),N("positionId"),N("nftAccount"),N("lockNftMint"),A("recentEpoch"),j(A(),8)]);Nc.span;var vc=Pe("Raydium_Clmm"),Ot={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]},_c=[188,37,179,131,82,150,84,73],Fc=[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 b=E([oe("sqrtPriceX64"),A("zero")]),y=[{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:ct,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(b.span);b.encode({sqrtPriceX64:p,zero:qe},g);let P=Buffer.from([...Ot.createPool,...g]);return new dt({keys:y,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:o,ammConfigId:s,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new X(i.address),new X(o.address)],{publicKey:m}=Ic(t,s,u,l),{publicKey:d}=Sc(t,m),{publicKey:p}=sa(t,m,u),{publicKey:f}=sa(t,m,l),b=Ye(t,m).publicKey,y=[this.createPoolInstruction(t,m,n,s,d,u,p,new X(i.programId||Re),l,f,new X(o.programId||Re),b,a,c)];return{signers:[],instructions:y,instructionTypes:[G.CreateAccount,G.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:b,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K,T){let C=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),_=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[]],M=[{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:b,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},..._],R=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:k,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:x,amountMaxB:S,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},R);let L=Buffer.from([...Ot.openPosition,...R]);return new dt({keys:M,programId:e,data:L})}static openPositionFromLiquidityInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K){let T=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],_=[{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:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...C],M=Buffer.alloc(T.span);T.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:h,amountMaxA:w,amountMaxB:x,withMetadata:S==="create",baseFlag:!1,optionBaseFlag:0},M);let R=Buffer.from([...Ot.openPositionWithTokenEx,...M]);return new dt({keys:_,programId:e,data:R})}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 X(e.programId),new X(e.id)],b;if(l)b=new X((await l(1))[0]);else{let K=Kr.generate();d.push(K),b=K.publicKey}let y=Z.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Z.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:P}=we(p,f,y),{publicKey:k}=we(p,f,g),{publicKey:I}=m?ee(n.wallet,b,Xe):ee(n.wallet,b,Re),{publicKey:h}=Pn(b),{publicKey:w}=kt(p,b),{publicKey:x}=on(p,f,i,o),S=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,b,I,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,b,I,h,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0);return{signers:d,instructions:[S],instructionTypes:[G.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:P,tickArrayUpper:k,positionNftAccount:I,metadataAccount:h,personalPosition:w,protocolPosition:x}}}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 X(e.programId),new X(e.id)],b;if(l)b=new X((await l(1))[0]);else{let K=Kr.generate();d.push(K),b=K.publicKey}let y=Z.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Z.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:P}=we(p,f,y),{publicKey:k}=we(p,f,g),{publicKey:I}=m?ee(n.wallet,b,Xe):ee(n.wallet,b,Re),{publicKey:h}=Pn(b),{publicKey:w}=kt(p,b),{publicKey:x}=on(p,f,i,o),S=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,b,I,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,b,I,h,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:P,tickArrayUpper:k,positionNftAccount:I,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[S],signers:d,instructionTypes:[G.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K,T){let C=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),_=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[]],M=[{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:b,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},..._],R=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:k,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:h,liquidity:new da(0),amountMaxA:x==="MintA"?S:K,amountMaxB:x==="MintA"?K:S,withMetadata:w==="create",baseFlag:x==="MintA",optionBaseFlag:1},R);let L=Buffer.from([...Ot.openPosition,...R]);return new dt({keys:M,programId:e,data:L})}static openPositionFromBaseInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K){let T=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],_=[{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:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...C],M=Buffer.alloc(T.span);T.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new da(0),amountMaxA:w==="MintA"?x:S,amountMaxB:w==="MintA"?S:x,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},M);let R=Buffer.from([...Ot.openPositionWithTokenEx,...M]);return new dt({keys:_,programId:e,data:R})}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 X((await l(1))[0]);else{let K=Kr.generate();p.push(K),d=K.publicKey}let[f,b]=[new X(e.programId),new X(e.id)],y=Z.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Z.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:P}=we(f,b,y),{publicKey:k}=we(f,b,g),{publicKey:I}=m?ee(n.wallet,d,Xe):ee(n.wallet,d,Re),{publicKey:h}=Pn(d),{publicKey:w}=kt(f,d),{publicKey:x}=on(f,b,i,o),S=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,b,n.wallet,d,I,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(t.mintA.address),new X(t.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(f,b).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,b,n.wallet,d,I,h,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(t.mintA.address),new X(t.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(f,b).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:P,tickArrayUpper:k,positionNftAccount:I,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[S],signers:p,instructionTypes:[G.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o,s){let a=E([]),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?Xe:Re,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Ot.closePosition,...u]);return new dt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:o}){let s=new X(e.programId),a=o?ee(n.wallet,i.nftMint,Xe).publicKey:ee(n.wallet,i.nftMint,Re).publicKey,{publicKey:c}=kt(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:[G.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P){let k=E([oe("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),I=[...P?[{pubkey:P,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:Xe,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],w=Buffer.alloc(k.span);k.encode({liquidity:b,amountMaxA:y,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let x=Buffer.from([...Ot.increaseLiquidity,...w]);return new dt({keys:h,programId:e,data:x})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new X(e.programId),new X(e.id)],m=Z.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Z.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:f}=we(u,l,d),{publicKey:b}=c?ee(i.wallet,n.nftMint,Xe):ee(i.wallet,n.nftMint,Re),{publicKey:y}=kt(u,n.nftMint),{publicKey:g}=on(u,l,n.tickLower,n.tickUpper),P=this.increasePositionFromLiquidityInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),o,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Ye(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[G.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 X(e.programId),new X(e.id)],m=Z.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Z.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:f}=we(u,l,d),{publicKey:b}=c?ee(i.wallet,n.nftMint,Xe):ee(i.wallet,n.nftMint,Re),{publicKey:y}=kt(u,n.nftMint),{publicKey:g}=on(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),o,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Ye(u,l).publicKey:void 0)],signers:[],instructionTypes:[G.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P){let k=E([oe("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),I=[...P?[{pubkey:P,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:Xe,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],w=Buffer.alloc(k.span);k.encode({liquidity:new da(0),amountMaxA:b==="MintA"?y:g,amountMaxB:b==="MintA"?g:y,baseFlag:b==="MintA",optionBaseFlag:1},w);let x=Buffer.from([...Ot.increaseLiquidity,...w]);return new dt({keys:h,programId:e,data:x})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([oe("liquidity"),A("amountMinA"),A("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...b.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:Xe,isSigner:!1,isWritable:!1},{pubkey:Zo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],x=Buffer.alloc(I.span);I.encode({liquidity:y,amountMinA:g,amountMinB:P},x);let S=Buffer.from([...Ot.decreaseLiquidity,...x]);return new dt({keys:w,programId:e,data:S})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new X(e.programId),new X(e.id)],d=Z.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=Z.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=we(l,m,d),{publicKey:b}=we(l,m,p),{publicKey:y}=u?ee(i.wallet,n.nftMint,Xe):ee(i.wallet,n.nftMint,c),{publicKey:g}=kt(l,n.nftMint),{publicKey:P}=on(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new X(t.rewardInfos[w].vault),ownerRewardVault:i.rewardAccounts[w],rewardMint:new X(e.rewardDefaultInfos[w].mint.address)});let I=[],h=this.decreaseLiquidityInstruction(l,i.wallet,y,g,m,P,f,b,i.tokenAccountA,i.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),k,o,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Ye(l,m).publicKey:void 0);return I.push(h),{address:{tickArrayLower:f,tickArrayUpper:b,positionNftAccount:y,personalPosition:g,protocolPosition:P},signers:[],instructions:I,instructionTypes:[G.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g){let P=E([A("amount"),A("otherAmountThreshold"),oe("sqrtPriceLimitX64"),Ge("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(x=>({pubkey:x,isSigner:!1,isWritable:!0}))],I=[{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:Xe,isSigner:!1,isWritable:!1},{pubkey:Zo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:b,isBaseInput:y},h);let w=Buffer.from([...Ot.swap,...h]);return new dt({keys:I,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 X(e.programId),new X(e.id)],[d,p]=[new X(t.vault.A),new X(t.vault.B)],[f,b]=[new X(e.mintA.address),new X(e.mintB.address)],y=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new X(e.config.id),y?i.tokenAccountA:i.tokenAccountB,y?i.tokenAccountB:i.tokenAccountA,y?d:p,y?p:d,y?f:b,y?b:f,u,n,s,a,c,!0,Ye(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[G.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 X(e.programId),new X(e.id)],[d,p]=[new X(t.vault.A),new X(t.vault.B)],[f,b]=[new X(e.mintA.address),new X(e.mintB.address)],y=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new X(e.config.id),y?i.tokenAccountB:i.tokenAccountA,y?i.tokenAccountA:i.tokenAccountB,y?p:d,y?d:p,y?b:f,y?f:b,u,n,s,a,c,!1,Ye(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[G.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([A("openTime"),A("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:ct,isSigner:!1,isWritable:!1}],b=Buffer.alloc(p.span);p.encode({openTime:J(l),endTime:J(m),emissionsPerSecondX64:d},b);let y=Buffer.from([...Ot.initReward,...b]);return new dt({keys:f,programId:e,data:y})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new X(e.programId),new X(e.id)],a=Bc(o,s,i.mint).publicKey,c=mo(o).publicKey,u=[this.initRewardInstruction(o,n.wallet,s,c,new X(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:[G.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([W("rewardIndex"),oe("emissionsPerSecondX64"),A("openTime"),A("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:Xe,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],b=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:J(l),endTime:J(m)},b);let y=Buffer.from([...Ot.setRewardEmissions,...b]);return new dt({keys:f,programId:e,data:y})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new X(e.programId),new X(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 X(t.rewardInfos[d].vault),u=new X(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&vc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=mo(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new X(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[G.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let c=E([W("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:Xe,isSigner:!1,isWritable:!1},{pubkey:Zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Ot.collectReward,...l]);return new dt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new X(e.programId),new X(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new X(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&vc.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:[G.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 X((await c(1))[0]);else{let g=Kr.generate();u.push(g),l=g.publicKey}let m=a?ee(o,s,Xe).publicKey:ee(o,s,Re).publicKey,{publicKey:d}=kt(n,s),p=Ii(e,l).publicKey,f=ee(o,l,Re).publicKey,b=Pn(l).publicKey,y=Le.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:o,lockOwner:o,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:b,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ee(t,s,a?Xe:Re).publicKey,positionNftProgram:a?Xe:Re});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:b},instructions:[y],signers:u,instructionTypes:[G.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:b}){let y=[{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:Zt,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}],g=E([Ge("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:b},P);let k=Buffer.from([..._c,...P]);return new dt({keys:y,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:o}){let{publicKey:s}=ee(i,o,Re),{publicKey:a}=kt(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:aa(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}];return new dt({keys:c,programId:e,data:Buffer.from(_c)})}static harvestLockPositionInstruction(e){let[t,n]=[new X(e.poolKeys.programId),new X(e.poolKeys.id)],i=Z.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),o=Z.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=we(t,n,i),{publicKey:a}=we(t,n,o),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Re),{publicKey:u}=kt(t,e.ownerPosition.nftMint),{publicKey:l}=on(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new X(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new X(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:aa(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 X(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new X(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:Xe,isSigner:!1,isWritable:!1},{pubkey:Rn,isSigner:!1,isWritable:!1},{pubkey:new X(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new X(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new dt({keys:p,programId:e.programId,data:Buffer.from(Fc)})}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:b,userVaultA:y,userVaultB:g,mintA:P,mintB:k,rewardAccounts:I,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...I.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],x=[{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:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:Rn,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new dt({keys:x,programId:e,data:Buffer.from(Fc)})}};var Bp=E([yt("mintAuthorityOption"),N("mintAuthority"),A("supply"),W("decimals"),W("isInitialized"),yt("freezeAuthorityOption"),N("freezeAuthority")]);import{PublicKey as ET}from"@solana/web3.js";import{MintLayout as DT,TOKEN_PROGRAM_ID as qT}from"@solana/spl-token";var Cr=r=>new We({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),go=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Ue(o,["amount","isRaw","name"]);return new Ke(new We({mint:pt(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=Ue(o,["address","programId","decimals"]);return v({chainId:101,address:pt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},_n=r=>r?q(v({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:q(v({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(v({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import Ec from"bn.js";var pa=new Ec(25),Rr=new Ec(1e4);import{PublicKey as mn,SystemProgram as xp,SYSVAR_RENT_PUBKEY as aI,TransactionInstruction as Si}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Kp,TOKEN_PROGRAM_ID as Po}from"@solana/spl-token";var fa=E([W("instruction"),A("amountIn"),A("minAmountOut")]),ba=E([W("instruction"),A("maxAmountIn"),A("amountOut")]),iI=E([W("instruction"),W("nonce")]),Sp=E([W("instruction"),W("nonce"),A("startTime")]),Ao=E([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),A("swapBase2QuoteFee"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),A("swapQuote2BaseFee"),N("baseVault"),N("quoteVault"),N("baseMint"),N("quoteMint"),N("lpMint"),N("openOrders"),N("marketId"),N("marketProgramId"),N("targetOrders"),N("withdrawQueue"),N("lpVault"),N("owner"),A("lpReserve"),j(A(),3,"padding")]),oI=E([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),N("baseVault"),N("quoteVault"),N("baseMint"),N("quoteMint"),N("lpMint"),N("modelDataAccount"),N("openOrders"),N("marketId"),N("marketProgramId"),N("targetOrders"),N("owner"),j(A(),64,"padding")]),ya=E([W("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),ga=E([W("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var Vc=E([A("fee")]);var Dc=Pe("Raydium_liquidity_instruction");function Wc(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s,otherAmountMin:a,modelDataPubKey:c=zn}=r,u=Buffer.alloc(ya.span);ya.encode({instruction:3,baseAmountIn:J(i),quoteAmountIn:J(o),otherAmountMin:J(a),fixedSide:s==="base"?Bt:Pu},u);let l=[B({pubkey:Po,isWritable:!1}),B({pubkey:new mn(e.id)}),B({pubkey:new mn(t.authority),isWritable:!1}),B({pubkey:new mn(t.openOrders),isWritable:!1}),B({pubkey:new mn(t.targetOrders)}),B({pubkey:new mn(e.lpMint.address)}),B({pubkey:new mn(t.vault.A)}),B({pubkey:new mn(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(B({pubkey:c})),l.push(B({pubkey:new mn(e.marketId),isWritable:!1}),B({pubkey:n.baseTokenAccount}),B({pubkey:n.quoteTokenAccount}),B({pubkey:n.lpTokenAccount}),B({pubkey:n.owner,isWritable:!1,isSigner:!0}),B({pubkey:new mn(t.marketEventQueue),isWritable:!1})),new Si({programId:new mn(e.programId),keys:l,data:u})}function Aa(r){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:o,quoteAmountMin:s,modelDataPubKey:a=zn}=r,c=lt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(ga.span);ga.encode({instruction:4,lpAmount:J(i),baseAmountMin:J(o),quoteAmountMin:J(s)},l);let m=[B({pubkey:Po,isWritable:!1}),B({pubkey:c.id}),B({pubkey:c.authority,isWritable:!1}),B({pubkey:c.openOrders}),B({pubkey:c.targetOrders}),B({pubkey:c.mintLp.address}),B({pubkey:c.vault.A}),B({pubkey:c.vault.B})];return u===5?m.push(B({pubkey:a})):(m.push(B({pubkey:c.id})),m.push(B({pubkey:c.id}))),m.push(B({pubkey:c.marketProgramId,isWritable:!1}),B({pubkey:c.marketId}),B({pubkey:c.marketBaseVault}),B({pubkey:c.marketQuoteVault}),B({pubkey:c.marketAuthority,isWritable:!1}),B({pubkey:n.lpTokenAccount}),B({pubkey:n.baseTokenAccount}),B({pubkey:n.quoteTokenAccount}),B({pubkey:n.owner,isWritable:!1,isSigner:!0}),B({pubkey:c.marketEventQueue}),B({pubkey:c.marketBids}),B({pubkey:c.marketAsks})),new Si({programId:c.programId,keys:m,data:l})}return new Si({programId:c.programId,keys:[]})}function Pa({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:b,userPcVault:y,userLpVault:g,nonce:P,openTime:k,coinAmount:I,pcAmount:h,ammConfigId:w,feeDestinationId:x}){let S=E([W("instruction"),W("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),K=[{pubkey:Po,isSigner:!1,isWritable:!1},{pubkey:Kp,isSigner:!1,isWritable:!1},{pubkey:xp.programId,isSigner:!1,isWritable:!1},{pubkey:ct,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:x,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],T=Buffer.alloc(S.span);return S.encode({instruction:1,nonce:P,openTime:k,coinAmount:I,pcAmount:h},T),{instruction:new Si({keys:K,programId:r,data:T}),instructionType:G.AmmV4CreatePool}}function Cp({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:i=zn},o){let s=lt(r),a=Buffer.alloc(fa.span);fa.encode({instruction:9,amountIn:J(t),minAmountOut:J(n)},a);let c=[B({pubkey:Po,isWritable:!1}),B({pubkey:s.id}),B({pubkey:s.authority,isWritable:!1}),B({pubkey:s.openOrders})];return o===4&&c.push(B({pubkey:s.targetOrders})),c.push(B({pubkey:s.vault.A}),B({pubkey:s.vault.B})),o===5&&c.push(B({pubkey:i})),c.push(B({pubkey:s.marketProgramId,isWritable:!1}),B({pubkey:s.marketId}),B({pubkey:s.marketBids}),B({pubkey:s.marketAsks}),B({pubkey:s.marketEventQueue}),B({pubkey:s.marketBaseVault}),B({pubkey:s.marketQuoteVault}),B({pubkey:s.marketAuthority,isWritable:!1}),B({pubkey:e.tokenAccountIn}),B({pubkey:e.tokenAccountOut}),B({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Si({programId:s.programId,keys:c,data:a})}function Rp({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:i=zn},o){let s=lt(r),a=Buffer.alloc(ba.span);ba.encode({instruction:11,maxAmountIn:J(t),amountOut:J(n)},a);let c=[B({pubkey:Po,isWritable:!1}),B({pubkey:s.id}),B({pubkey:s.authority,isWritable:!1}),B({pubkey:s.openOrders}),B({pubkey:s.targetOrders}),B({pubkey:s.vault.A}),B({pubkey:s.vault.B})];return o===5&&c.push(B({pubkey:i})),c.push(B({pubkey:s.marketProgramId,isWritable:!1}),B({pubkey:s.marketId}),B({pubkey:s.marketBids}),B({pubkey:s.marketAsks}),B({pubkey:s.marketEventQueue}),B({pubkey:s.marketBaseVault}),B({pubkey:s.marketQuoteVault}),B({pubkey:s.marketAuthority,isWritable:!1}),B({pubkey:e.tokenAccountIn}),B({pubkey:e.tokenAccountOut}),B({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Si({programId:s.programId,keys:c,data:a})}function Lr(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 Cp(q(v({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Rp(q(v({},a),{maxAmountIn:i,amountOut:o}),t);Dc.logWithError("invalid params","params",r)}throw Dc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var ni=5e4,Lp=E([A("x"),A("y"),A("price")]),Np=E([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),j(Lp,ni,"DataElement")]);function Op(r,e){return[0,ni-2]}function Mp(r){return[0,ni-2]}function vp(r){return[0,ni-2]}function _p(r,e,t){let[n,i]=Op(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>=ni-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 wa(r,e,t){let[n,i,o]=_p(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 ti(r,e,t){return e*r.multiplier/t}function qc(r,e,t){return e*t/r.multiplier}function Fp(r,e){let[t,n]=Mp(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ni-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 Ep(r,e){let[t,n]=vp(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ni-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 Uc(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Fp(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,b;return n?(f=l+(m-l)*(e-c)/(u-c),b=d-(i-c)*r.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),b=p+(u-i)*r.multiplier/l),[f,b,!1,a]}}}function Vp(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Ep(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,b;return n?(f=l+(m-l)*(d-e)/(d-p),b=c+m*(d-i)/r.multiplier):(f=l+(m-l)*(d-e)/(d-p),b=u-l*(i-p)/r.multiplier),[f,b,!1,a]}}}function Dp(r,e){let t=Uc(r,e,0,!1);return t[3]?t[0]:0}function Gc(r,e,t,n){let i=wa(r,e,t),o=ti(r,e,i),s=ti(r,t,i),a=ti(r,n,i),c=!0,[u,l,m,d]=Uc(r,o,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return qc(r,p,i)}}function Xc(r,e,t,n){let i=wa(r,e,t),o=ti(r,e,i),s=ti(r,t,i),a=ti(r,n,i),c=!1,[u,l,m,d]=Vp(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=o-l;return qc(r,p,i)}}function Wp(r){let e=Np.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 zc(r,e,t,n){let i=Dp(r,ti(r,e,wa(r,e,t)))/r.multiplier;return n?i:1/i}var wo=class{constructor({connection:e,modelDataPubKey:t=zn}){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=Wp(e==null?void 0:e.data))}}};import{PublicKey as Gp}from"@solana/web3.js";import FI from"bn.js";import{TOKEN_PROGRAM_ID as Xp}from"@solana/spl-token";import{PublicKey as qp}from"@solana/web3.js";var Up=Pe("Raydium_liquidity_serum");function Qc({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=qp.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw Up.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 Nr({programId:r}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function ii({name:r,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function zp({programId:r,marketId:e}){let{publicKey:t}=le([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function ha({programId:r}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Ta({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:c}){let u=ii({name:"amm_associated_seed",programId:a,marketId:t}),l=ii({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=ha({programId:a}),p=ii({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=ii({name:"pc_vault_associated_seed",programId:a,marketId:t}),b=ii({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),y=zp({programId:a,marketId:t}),g=ii({name:"target_associated_seed",programId:a,marketId:t}),P=ii({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=Qc({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:b,openOrders:y,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:Gp.default,configId:Nr({programId:a})}}var ka={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Or=r=>{let e={},t=Xp.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 O(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new O(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:ka,week:ka,month:ka,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Nr({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:new O(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 ze from"bn.js";import{PublicKey as ko}from"@solana/web3.js";import ho from"bn.js";import{TOKEN_PROGRAM_ID as Zc}from"@solana/spl-token";import{SystemProgram as oi,SYSVAR_RENT_PUBKEY as Hp,Transaction as Hc,TransactionInstruction as jp}from"@solana/web3.js";import{createInitializeAccountInstruction as jc,TOKEN_PROGRAM_ID as Yc}from"@solana/spl-token";function Qp(r="accountFlags"){let e=new wr(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 Ia=E([Se(5),Qp("accountFlags"),N("ownAddress"),A("vaultSignerNonce"),N("baseMint"),N("quoteMint"),N("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),N("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),N("requestQueue"),N("eventQueue"),N("bids"),N("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Se(7)]);function Yp({programId:r,marketInfo:e}){let t=E([W("version"),yt("instruction"),A("baseLotSize"),A("quoteLotSize"),Ct("feeRateBps"),A("vaultSignerNonce"),A("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:Hp,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 jp({keys:n,programId:r,data:i})}async function Mr({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Hc,i=await r.getMinimumBalanceForRentExemption(165);n.add(oi.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Yc}),oi.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Yc}),jc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),jc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),oi.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(Ia.span),space:Ia.span,programId:t.programId}));let o=new Hc;return o.add(oi.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}),oi.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}),oi.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}),oi.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}),Yp({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:[G.CreateAccount,G.CreateAccount,G.InitAccount,G.InitAccount]},{transaction:o,signer:[],instructionTypes:[G.CreateAccount,G.CreateAccount,G.CreateAccount,G.CreateAccount,G.CreateAccount,G.InitMarket]}]}var xi=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 b=this.scope.ownerPubKey,y=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-market`}),P=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-request`}),k=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-event`}),I=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-bids`}),h=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-asks`}),w=je({fromPublicKey:b,programId:Zc,assignSeed:y&&`${y}-baseVault`}),x=je({fromPublicKey:b,programId:Zc,assignSeed:y&&`${y}-quoteVault`}),S=0,K=new ho(100);function T(){let Q=new ho(0);for(;;)try{return{vaultOwner:ko.createProgramAddressSync([g.publicKey.toBuffer(),Q.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:Q}}catch{if(Q.iaddn(1),Q.gt(new ho(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:_}=T(),M=new ho(Math.round(10**e.decimals*n)),R=new ho(Math.round(n*10**t.decimals*i));if(M.eq(Bt))throw Error("lot size is too small");if(R.eq(Bt))throw Error("tick size or lot size is too small");let L=await Mr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:x,vaultOwner:C,requestQueue:P,eventQueue:k,bids:I,asks:h,feeRateBps:S,quoteDustThreshold:K,vaultSignerNonce:_,baseLotSize:M,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),F=this.createTxBuilder(f);F.addInstruction({instructions:L[0].transaction.instructions,signers:L[0].signer});for await(let Q of L.slice(1,L.length))F.addInstruction({instructions:Q.transaction.instructions,signers:Q.signer,instructionTypes:Q.instructionTypes});return m===0?F.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:k.publicKey,bids:I.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new ko(e.mint),quoteMint:new ko(t.mint)}}):F.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:k.publicKey,bids:I.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new ko(e.mint),quoteMint:new ko(t.mint)}})}};var To=class extends _e{constructor(t){super(t);this.stableLayout=new wo({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:bn.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 ze(new O(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=Cr(t[o?"mintB":"mintA"]),[c,u]=[new ze(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new ze(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new ze(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.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=Bt;s.isZero()||(d=m==="base"?Jo(s.mul(u),c):Jo(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Jo(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new rt(new ze(1)).add(i),b=new rt(new ze(1)).sub(i),y=f.mul(d).quotient,g=b.mul(d).quotient,P=new Ke(a,d),k=new Ke(a,y),I=new Ke(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:P,maxAnotherAmount:k,minAnotherAmount:I,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:b,checkCreateATAOwner:y}=v({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[o.token,s.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),I=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!k&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new Je(n.lpMint.address)}),w=[g,P],x=[k,I],S=[o.raw,s.raw],K=o.token.mint.toBase58()===n.mintA.address?"base":"quote",T="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),x.reverse(),S.reverse(),T=c==="a"?"quote":"base"):K==="base"&&(T=c==="a"?"base":"quote");let[C,_]=w,[M,R]=x,[L,F]=S,Q=i!=null?i:await this.getAmmPoolKeys(n.id),$=this.createTxBuilder(p),ne=await f.handleTokenAccount({side:"in",amount:L,mint:C.mint,tokenAccount:M,bypassAssociatedCheck:b,checkCreateATAOwner:y}),{tokenAccount:ce}=ne,ke=Ue(ne,["tokenAccount"]);$.addInstruction(ke);let Ve=await f.handleTokenAccount({side:"in",amount:F,mint:_.mint,tokenAccount:R,bypassAssociatedCheck:b,checkCreateATAOwner:y}),{tokenAccount:de}=Ve,ye=Ue(Ve,["tokenAccount"]);$.addInstruction(ye);let Te=await f.handleTokenAccount({side:"out",amount:0,mint:new Je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:b,checkCreateATAOwner:y}),{tokenAccount:Ae}=Te,fe=Ue(Te,["tokenAccount"]);return $.addInstruction(fe),$.addInstruction({instructions:[Wc({poolInfo:n,poolKeys:Q,userKeys:{baseTokenAccount:ce,quoteTokenAccount:de,lpTokenAccount:Ae,owner:this.scope.ownerPubKey},baseAmountIn:L,quoteAmountIn:F,otherAmountMin:a.raw,fixedSide:T})],instructionTypes:[n.pooltype.includes("StablePool")?G.AmmV5AddLiquidity:G.AmmV4AddLiquidity],lookupTableAddress:Q.lookupTableAccount?[Q.lookupTableAccount]:[]}),$.addCustomComputeBudget(m),$.addTipInstruction(d),l===0?await $.buildV0():$.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,b,y]=[new Je(n.mintA.address),new Je(n.mintB.address),new Je(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,P=await g.getCreatedTokenAccount({mint:y,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),I=await g.getCreatedTokenAccount({mint:b}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:x}=v({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),_=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:S}=_,K=Ue(_,["tokenAccount"]);h.addInstruction(K);let M=await g.handleTokenAccount({side:"out",amount:0,mint:b,tokenAccount:I,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:T}=M,C=Ue(M,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Aa({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:P,baseTokenAccount:S,quoteTokenAccount:T,owner:this.scope.ownerPubKey},lpAmount:o,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?G.AmmV5RemoveLiquidity:G.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=Fn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:b,feePayer:y}){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(y),P={};for(let Q of this.scope.account.tokenAccountRawInfos)(P[Q.accountInfo.mint.toString()]===void 0||ee(this.scope.ownerPubKey,Q.accountInfo.mint,Fn).publicKey.equals(Q.pubkey))&&(P[Q.accountInfo.mint.toString()]=Q.pubkey);let k=P[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let I=i.add(a!=null?a:new ze(0)),h=t.mintA.address===We.WSOL.mint.toString(),w=t.mintB.address===We.WSOL.mint.toString(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(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(S||{}),x===void 0)throw new Error("base token account not found");let{account:K,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(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(T||{}),K===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=x,P[t.mintB.address]=K,s!==void 0&&!(a!=null&&a.isZero())){let Q=Ft[s.programId],$=Et({programId:new Je(s.programId),poolId:new Je(s.id),owner:this.scope.ownerPubKey,version:Q}),ce,ke=await this.scope.connection.getAccountInfo($);if(ke&&(ce=to(Q).decode(ke.data)),Q!==6&&!ce){let{instruction:Te,instructionType:He}=io({id:new Je(s.id),programId:new Je(s.programId),version:Q,ledger:$,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Te],instructionTypes:[He]})}let de=[];for(let Te of s.rewardInfos){let He=Te.mint.address===We.WSOL.mint.toString();if(P[Te.mint.address])de.push(P[Te.mint.address]);else{let{account:Un,instructionParams:pn}=await this.scope.account.getOrCreateTokenAccount({mint:new Je(Te.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!He,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Un||this.logAndCreateError("farm reward account not found:",Te.mint.address),pn&&g.addInstruction(pn),de.push(Un)}}let ye=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ae={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:ye,lpAccount:k,rewardAccounts:de},fe=Ft[s.programId],ne=fe===6?oo(Ae):fe===5?ro(Ae):so(Ae),Ve={3:G.FarmV3Withdraw,5:G.FarmV5Withdraw,6:G.FarmV6Withdraw};g.addInstruction({instructions:[ne],instructionTypes:[Ve[fe]]})}let C=await this.getAmmPoolKeys(t.id),_=Aa({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:I,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[_],instructionTypes:[t.pooltype.includes("StablePool")?G.AmmV5RemoveLiquidity:G.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[M,R]=t.mintA.address===n.mintA.address?[x,K]:[K,x],L=await this.scope.clmm.getClmmPoolKeys(n.id),F=await Le.openPositionFromBaseInstructions(q(v({poolInfo:n,poolKeys:L,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:M,tokenAccountB:R},withMetadata:"create"},o),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...F.instructions],signers:F.signers,instructionTypes:[...F.instructionTypes],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),b===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:b,txTipConfig:y,feePayer:g}){var R;let P=u.feePayer||((R=this.scope.owner)==null?void 0:R.publicKey),k=u.useSOLBalance&&i.mint.equals(vr),I=u.useSOLBalance&&o.mint.equals(vr),h=this.createTxBuilder(g),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:P,amount:s}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(x||{});let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:I?{payer:P,amount:a}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||S===void 0)throw Error("you don't has some token account");let T=Ta({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:T.id,ammAuthority:T.authority,ammOpenOrders:T.openOrders,lpMint:T.lpMint,coinMint:T.baseMint,pcMint:T.quoteMint,coinVault:T.baseVault,pcVault:T.quoteVault,withdrawQueue:T.withdrawQueue,ammTargetOrders:T.targetOrders,poolTempLp:T.lpVault,marketProgramId:T.marketProgramId,marketId:T.marketId,ammConfigId:T.configId,feeDestinationId:f},{instruction:_,instructionType:M}=Pa(q(v({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:S,userLpVault:ee(this.scope.ownerPubKey,T.lpMint,d).publicKey,nonce:T.nonce,openTime:c,coinAmount:s,pcAmount:a}));return h.addInstruction({instructions:[_],instructionTypes:[M]}),h.addCustomComputeBudget(b),h.addTipInstruction(y),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ir,marketProgram:n=Cu,feeDestinationId:i=Lu,tokenProgram:o,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:b=!1,lotSize:y=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:k,txTipConfig:I,feePayer:h}){var Fi,Ei,Vi;let w=this.scope.ownerPubKey,x=m.feePayer||((Fi=this.scope.owner)==null?void 0:Fi.publicKey),S=m.useSOLBalance&&s.mint.equals(vr),K=m.useSOLBalance&&a.mint.equals(vr),T=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-market`}),_=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-request`}),M=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-event`}),R=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-bids`}),L=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-asks`}),F=je({fromPublicKey:w,programId:Fn,assignSeed:T&&`${T}-baseVault`}),Q=je({fromPublicKey:w,programId:Fn,assignSeed:T&&`${T}-quoteVault`}),$=0,ce=new ze(100);function ke(){let Kt=new ze(0);for(;;)try{return{vaultOwner:Je.createProgramAddressSync([C.publicKey.toBuffer(),Kt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Kt}}catch{if(Kt.iaddn(1),Kt.gt(new ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:de,vaultSignerNonce:ye}=ke(),Ae=new ze(Math.round(10**s.decimals*y)),fe=new ze(Math.round(y*10**a.decimals*g));if(Ae.eq(Bt))throw Error("lot size is too small");if(fe.eq(Bt))throw Error("tick size or lot size is too small");let ne=await Mr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:de,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:F,quoteVault:Q,requestQueue:_,eventQueue:M,bids:R,asks:L,feeRateBps:$,quoteDustThreshold:ce,vaultSignerNonce:ye,baseLotSize:Ae,quoteLotSize:fe,lowestFeeMarket:d}}),Ve=this.createTxBuilder(h);Ve.addInstruction({instructions:ne[0].transaction.instructions,signers:ne[0].signer});for await(let Kt of ne.slice(1,ne.length))Ve.addInstruction({instructions:Kt.transaction.instructions,signers:Kt.signer,instructionTypes:Kt.instructionTypes});let{account:Te,instructionParams:He}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:x,amount:c}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:b,assignSeed:S&&T?`${T}-wsol`:void 0});Ve.addInstruction(He||{});let{account:Un,instructionParams:pn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:x,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:b,assignSeed:K&&T?`${T}-wsol`:void 0});if(Ve.addInstruction(pn||{}),Te===void 0)throw Error("you don't has base token account");if(Un===void 0)throw Error("you don't has quote token account");let et=Ta({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),In={programId:t,ammId:et.id,ammAuthority:et.authority,ammOpenOrders:et.openOrders,lpMint:et.lpMint,coinMint:et.baseMint,pcMint:et.quoteMint,coinVault:et.baseVault,pcVault:et.quoteVault,withdrawQueue:et.withdrawQueue,ammTargetOrders:et.targetOrders,poolTempLp:et.lpVault,marketProgramId:et.marketProgramId,marketId:et.marketId,ammConfigId:et.configId,feeDestinationId:i},{instruction:Mi,instructionType:vi}=Pa(q(v({},In),{userWallet:this.scope.ownerPubKey,userCoinVault:Te,userPcVault:Un,userLpVault:ee(this.scope.ownerPubKey,et.lpMint,o).publicKey,nonce:et.nonce,openTime:l,coinAmount:c,pcAmount:u}));Ve.addInstruction({instructions:[Mi],instructionTypes:[vi]});let _i=S||K?[((Ei=He==null?void 0:He.instructions)==null?void 0:Ei[0])||((Vi=pn==null?void 0:pn.instructions)==null?void 0:Vi[0])].filter(Kt=>!!Kt):void 0;return P===0?Ve.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:_i,address:v({requestQueue:_.publicKey,eventQueue:M.publicKey,bids:R.publicKey,asks:L.publicKey,baseVault:F.publicKey,quoteVault:Q.publicKey,baseMint:new Je(s.mint),quoteMint:new Je(a.mint)},In)}):Ve.sizeCheckBuild({computeBudgetConfig:k,splitIns:_i,address:v({requestQueue:_.publicKey,eventQueue:M.publicKey,bids:R.publicKey,asks:L.publicKey,baseVault:F.publicKey,quoteVault:Q.publicKey,baseMint:new Je(s.mint),quoteMint:new Je(a.mint)},In)})}async getCreatePoolFee({programId:t}){let n=Nr({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Vc.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,b]=m,[y,g]=d,P=t.version===4,k;if(P)k=new O(b.toString()).div(10**g).div(new O(f.toString()).div(10**y));else{let M=zc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new O(1e6).div(M*1e6):k=new O(M*1e6).div(1e6)}let I=n,h=new ze(0),w=new ze(0);if(!I.isZero())if(P){w=Jt(I.mul(pa),Rr);let M=I.sub(w),R=f.add(M);h=b.mul(M).div(R)}else{w=I.mul(new ze(2)).div(new ze(1e4));let M=I.sub(w);p==="quote"?h=new ze(Gc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),M.toNumber())):h=new ze(Xc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),M.toNumber()))}let x=new ze(new O(h.toString()).mul(1-s).toFixed(0)),S=h,K=x,T=new O(h.toString()).div(new O(I.sub(w).toString()).toFixed(0));!I.isZero()&&!h.isZero()&&(T=new O(h.toString()).div(10**g).div(new O(I.sub(w).toString()).div(10**y)));let C=k.sub(T).div(k).mul(100);return{amountOut:S,minAmountOut:K,currentPrice:k,executionPrice:T,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 O(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,b]=d,y=new O(b.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${y.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(y).toString()} ${l.symbol||l.address}`);let g=new ze(0),P=n;if(!P.isZero()){P.gt(b)&&(P=b.sub(new ze(1)));let K=b.sub(P);g=f.mul(P).div(K).mul(Rr).div(Rr.sub(pa))}let k=new ze(new O(g.toString()).mul(1+s).toFixed(0)),I=g,h=k;this.logDebug("amountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!P.isZero()&&(w=new O(P.toString()).div(10**m.decimals).div(new O(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 O(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let x=y.mul(I.toString()),S=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${S.toString()}%`),{amountIn:I,maxAmountIn:h,currentPrice:y,executionPrice:w,priceImpact:S}}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:b=!0,outputUseSolBalance:y=!0}=u||{},[g,P]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=b&&g.address===Y.toBase58(),I=y&&P.address===Y.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(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:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:f});p.addInstruction(S||{}),x===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:x,outputTokenUseSolBalance:I,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),T=4;return t.pooltype.includes("StablePool")&&(T=5),p.addInstruction({instructions:[Lr({version:T,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:i,amountOut:o,fixedSide:a})],instructionTypes:[T===4?G.AmmV4SwapBaseIn:G.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 Je(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=Ao.decode(m.accountInfo.data);o[String(t[l])]=q(v({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await Oe(this.scope.connection,s.map(l=>({pubkey:new Je(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 ze(Zp.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(v({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Or({[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 H}from"@solana/web3.js";import ht from"bn.js";import{AccountLayout as $c,createAssociatedTokenAccountIdempotentInstruction as Jc,TOKEN_2022_PROGRAM_ID as En,TOKEN_PROGRAM_ID as Io}from"@solana/spl-token";var Bo=class extends _e{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var x;let{programId:t,owner:n=((x=this.scope.owner)==null?void 0:x.publicKey)||H.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),[b,y,g]=new ht(new H(i.address).toBuffer()).gt(new ht(new H(o.address).toBuffer()))?[o,i,new O(1).div(a)]:[i,o,a],P=ue.priceToSqrtPriceX64(g,b.decimals,y.decimals),k=[],I=[];b.programId===En.toBase58()&&I.push(ua(t,new H(b.address)).publicKey),y.programId===En.toBase58()&&I.push(ua(t,new H(y.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(I)).forEach((S,K)=>{S&&k.push(I[K])});let w=await Le.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:y,ammConfigId:s.id,initialPriceX64:P,forerunCreate:!l&&u,extendMintAccount:k});return f.addInstruction(w),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(v({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:b,mintB:y,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:v({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:b,mintB:y,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},wc),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:b,txVersion:y,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let P=this.createTxBuilder(g),k=null,I=null,h=n.useSOLBalance&&e.mintA.address===Y.toString(),w=n.useSOLBalance&&e.mintB.address===Y.toString(),[x,S]=s==="MintA"?[a,c]:[c,a],{account:K,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),P.addInstruction(T||{});let{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(I=C),P.addInstruction(_||{}),(!k||!I)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:I==null?void 0:I.toBase58()});let M=t||await this.getClmmPoolKeys(e.id),R=await Le.openPositionFromBaseInstructions({poolInfo:e,poolKeys:M,ownerInfo:q(v({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:I}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return P.addInstruction(R),P.addCustomComputeBudget(f),P.addTipInstruction(b),P.versionBuild({txVersion:y,extInfo:v({},R.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:b,nft2022:y,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let P=this.createTxBuilder(g),k=null,I=null,h=n.useSOLBalance&&e.mintA.address===Y.toBase58(),w=n.useSOLBalance&&e.mintB.address===Y.toBase58(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(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});x&&(k=x),P.addInstruction(S||{});let{account:K,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(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&&(I=K),P.addInstruction(T||{}),(k===void 0||I===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),_=await Le.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:I},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:b,nft2022:y});return P.addInstruction(_),P.addCustomComputeBudget(p),P.addTipInstruction(f),P.versionBuild({txVersion:d,extInfo:{address:_.address}})}async increasePositionFromLiquidity(e){var T;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,b=this.createTxBuilder(f),y,g,P=c.useSOLBalance&&t.mintA.address===Y.toString(),k=c.useSOLBalance&&t.mintB.address===Y.toString(),{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new H(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});I&&(y=I),b.addInstruction(h||{});let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new H(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),b.addInstruction(x||{}),!y&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=n!=null?n:await this.getClmmPoolKeys(t.id),K=Le.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:g},liquidity:a,amountMaxA:o,amountMaxB:s,nft2022:(T=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:T.owner.equals(En)});return b.addInstruction(K),b.addCustomComputeBudget(m),b.addTipInstruction(d),b.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),b,y,g=a.useSOLBalance&&t.mintA.address===Y.toString(),P=a.useSOLBalance&&t.mintB.address===Y.toString(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new H(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&&(b=k),f.addInstruction(I||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new H(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});h&&(y=h),f.addInstruction(w||{}),!b&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=await this.getClmmPoolKeys(t.id),S=Le.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:x,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:y},base:i,baseAmount:o,otherAmountMax:s,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(En)});return f.addInstruction(S),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:S.address}})}async decreaseLiquidity(e){var M;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 b=this.createTxBuilder(f),y=o.useSOLBalance&&t.mintA.address===Y.toString(),g=o.useSOLBalance&&t.mintB.address===Y.toString(),P,k,{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new H(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});P=I,h&&b.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new H(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,x&&b.addInstruction(x);let S=[];for(let R of t.rewardDefaultInfos){let L=o.useSOLBalance&&R.mint.address===Y.toString(),F;if(R.mint.address===t.mintA.address)F=P;else if(R.mint.address===t.mintB.address)F=k;else{let{account:Q,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(R.mint.programId),mint:new H(R.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});F=Q,$&&b.addInstruction($)}S.push(F)}!P&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),T=(M=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:M.owner.equals(En),C=await Le.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:k,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:T});b.addInstruction({instructions:C.instructions,instructionTypes:[G.ClmmDecreasePosition]});let _=v({},C.address);if(o.closePosition){let R=await Le.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:T});b.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),_=v(v({},_),R.address)}return b.addCustomComputeBudget(m),b.addTipInstruction(d),b.versionBuild({txVersion:p,extInfo:{address:_}})}async lockPosition(e){var f;let{programId:t=Hi,authProgramId:n=or,poolProgramId:i=Xn,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(En)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=Hi,authProgramId:n=or,clmmProgram:i=Xn,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()),b=this.createTxBuilder(p),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let g=Bi.decode(y.data),P=a.useSOLBalance&&f.mintA.address===Y.toString(),k=a.useSOLBalance&&f.mintB.address===Y.toString(),I,h,{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new H(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});I=w,x&&b.addInstruction(x);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new H(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=S,K&&b.addInstruction(K);let T={},C=[];for(let de of f.rewardInfos){let ye=a.useSOLBalance&&de.mint.address===Y.toString(),Ae=T[de.mint.address];if(!Ae){let{account:fe,instructionParams:ne}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(de.mint.programId),mint:new H(de.mint.address),notUseTokenAccount:ye,owner:this.scope.ownerPubKey,skipCloseAccount:!ye,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ye?!1:c});Ae=fe,ne&&b.addInstruction(ne)}T[de.mint.address]=Ae,C.push(Ae)}let _=Ii(t,s.lockNftMint).publicKey,M=ee(this.scope.ownerPubKey,s.lockNftMint,Io).publicKey,R=Z.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),L=Z.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:F}=we(new H(f.programId),s.poolId,R),{publicKey:Q}=we(new H(f.programId),s.poolId,L),{publicKey:$}=on(new H(f.programId),s.poolId,g.tickLower,g.tickUpper),ce=[];for(let de=0;de<f.rewardInfos.length;de++)ce.push({poolRewardVault:new H(f.rewardInfos[de].vault),ownerRewardVault:C[de],rewardMint:new H(f.rewardInfos[de].mint.address)});let ke=await Le.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:_,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:M,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:$,vaultA:new H(f.vault.A),vaultB:new H(f.vault.B),tickArrayLower:F,tickArrayUpper:Q,userVaultA:I,userVaultB:h,mintA:new H(f.mintA.address),mintB:new H(f.mintB.address),rewardAccounts:ce,exTickArrayBitmap:Ye(i,s.poolId).publicKey});return b.addInstruction({instructions:[ke],instructionTypes:[G.ClmmHarvestLockPosition]}),b.addCustomComputeBudget(l),b.addTipInstruction(m),b.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(En)});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()===Y.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(n.mint.address),mint:new H(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ht(new O(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),b=Le.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new H(n.mint.programId),mint:new H(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:me.decimalToX64(n.perSecond)}});return u.addInstruction(b),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:b.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===Y.toString(),b=p.perSecond.mul(p.endTime-p.openTime),{account:y,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(p.mint.programId),mint:new H(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new O(b.toFixed(0)).gte(b)?b.toFixed(0):b.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:o,checkCreateATAOwner:s});g&&m.addInstruction(g),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let P=t!=null?t:await this.getClmmPoolKeys(e.id),k=Le.initRewardInstructions({poolInfo:e,poolKeys:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new H(p.mint.programId),mint:new H(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:me.decimalToX64(p.perSecond)}});d=v(v({},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(Y),{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 ht(new O(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),b=Le.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:me.decimalToX64(n.perSecond)}});return l.addInstruction(b),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:b.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===Y.toString(),{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(p.mint.programId),mint:new H(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new O(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});y&&m.addInstruction(y),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),P=Le.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{mint:new H(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:me.decimalToX64(p.perSecond)}});m.addInstruction(P),d=v(v({},d),P.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(Y),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(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 b=await this.getClmmPoolKeys(e.id),y=Le.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(y),m.addCustomComputeBudget(s),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:y.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(P=>P.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals(Y),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(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),b&&u.addInstruction(b);let y=await this.getClmmPoolKeys(e.id),g=Le.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=v(v({},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:b}){let y=this.createTxBuilder(b),g=n.toString()===e.mintA.address,P=c.useSOLBalance&&e.mintA.address===Y.toBase58(),k=c.useSOLBalance&&e.mintB.address===Y.toBase58(),I;!s||s.equals(new O(0))?I=g?Wt.add(new ht(1)):qt.sub(new ht(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=S,K&&y.addInstruction(K)}let w;if(!w){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(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=S,K&&y.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:P,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Le.makeSwapBaseInInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new H(n),amountIn:i,amountOutMin:o,sqrtPriceLimitX64:I,remainingAccounts:u})),y.addCustomComputeBudget(p),y.addTipInstruction(f),y.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:b}){let y=this.createTxBuilder(b),g=n.toString()===e.mintB.address,P=c.useSOLBalance&&e.mintA.address===Y.toBase58(),k=c.useSOLBalance&&e.mintB.address===Y.toBase58(),I;!s||s.equals(new O(0))?I=n.toString()===e.mintB.address?Wt.add(new ht(1)):qt.sub(new ht(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=S,K&&y.addInstruction(K)}let w;if(!w){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(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=S,K&&y.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:P,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Le.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new H(n),amountOut:i,amountInMax:o,sqrtPriceLimitX64:I,remainingAccounts:u})),y.addCustomComputeBudget(p),y.addTipInstruction(f),y.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=Hi,lockAuth:d=or,clmmProgram:p=Xn}){var k,I;let f={};for(let h of this.scope.account.tokenAccountRawInfos)o?ee(this.scope.ownerPubKey,h.accountInfo.mint,a).publicKey.equals(h.pubkey)&&(f[h.accountInfo.mint.toString()]=h.pubkey):f[h.accountInfo.mint.toString()]=h.pubkey;let b=Object.values(t).flat().map(h=>h.nftMint),y=await Oe(this.scope.connection,b.map(h=>({pubkey:h}))),g={};y.forEach(h=>{var w,x;g[h.pubkey.toBase58()]=(x=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?x:null});let P=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(R=>!R.liquidity.isZero()||R.rewardInfos.find(L=>!L.rewardAmountOwed.isZero())))continue;let w=h,x=i.useSOLBalance&&w.mintA.address===Y.toString(),S=i.useSOLBalance&&w.mintB.address===Y.toString(),K=f[w.mintA.address];if(!K)if(x){let{account:R,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new H(w.mintA.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:o,checkCreateATAOwner:s});K=R,L&&P.addInstruction(L)}else{let R=new H(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(R,new H(w.mintA.programId)),P.addInstruction({instructions:[Jc(this.scope.ownerPubKey,K,this.scope.ownerPubKey,R,new H(w.mintA.programId))]})}let T=f[w.mintB.address];if(!T)if(S){let{account:R,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new H(w.mintB.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:o,checkCreateATAOwner:s});T=R,L&&P.addInstruction(L)}else{let R=new H(w.mintB.address);T=this.scope.account.getAssociatedTokenAccount(R,new H(w.mintB.programId)),P.addInstruction({instructions:[Jc(this.scope.ownerPubKey,T,this.scope.ownerPubKey,R,new H(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=T;let C=[];for(let R of w.rewardDefaultInfos){let L=i.useSOLBalance&&R.mint.address===Y.toString(),F=f[R.mint.address];if(!F){let{account:Q,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(R.mint.programId),mint:new H(R.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:L?!1:o});F=Q,$&&P.addInstruction($)}f[R.mint.address]=F,C.push(F)}let _=await this.getClmmPoolKeys(w.id),M=[];for(let R=0;R<_.rewardInfos.length;R++)M.push({poolRewardVault:new H(_.rewardInfos[R].vault),ownerRewardVault:C[R],rewardMint:new H(_.rewardInfos[R].mint.address)});for(let R of t[h.id]){let L=(k=n==null?void 0:n[h.id])==null?void 0:k[R.nftMint.toBase58()];if(L){let F=ee(this.scope.ownerPubKey,L.lockNftMint,Io).publicKey,Q=Z.getTickArrayStartIndexByTick(R.tickLower,_.config.tickSpacing),$=Z.getTickArrayStartIndexByTick(R.tickUpper,_.config.tickSpacing),{publicKey:ce}=we(new H(_.programId),L.poolId,Q),{publicKey:ke}=we(new H(_.programId),L.poolId,$),{publicKey:de}=on(new H(_.programId),L.poolId,R.tickLower,R.tickUpper),ye=Ii(m,L.lockNftMint).publicKey,Ae=Le.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:ye,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:L.lockNftMint,lockNftAccount:F,positionNftAccount:L.nftAccount,positionId:L.positionId,poolId:L.poolId,protocolPosition:de,vaultA:new H(_.vault.A),vaultB:new H(_.vault.B),tickArrayLower:ce,tickArrayUpper:ke,userVaultA:K,userVaultB:T,mintA:new H(_.mintA.address),mintB:new H(_.mintB.address),rewardAccounts:M,exTickArrayBitmap:Ye(p,L.poolId).publicKey});P.addInstruction({instructions:[Ae],instructionTypes:[G.ClmmHarvestLockPosition],lookupTableAddress:_.lookupTableAccount?[_.lookupTableAccount]:[]})}else{let F=Le.decreaseLiquidityInstructions({poolInfo:w,poolKeys:_,ownerPosition:R,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:T,rewardAccounts:C},liquidity:new ht(0),amountMinA:new ht(0),amountMinB:new ht(0),nft2022:(I=g[R.nftMint.toBase58()])==null?void 0:I.equals(En)});P.addInstruction(F)}}}return c===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(mo(e).publicKey);return t?Oc.decode(t.data).whitelistMints.filter(i=>!i.equals(H.default)):[]}async getOwnerPositionInfo({programId:e=Xn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ht(1))).map(s=>kt(new H(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=Bi.decode(s.data);o.push(a)}),o}async getOwnerLockedPositionInfo({programId:e=Hi}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new ht(1))).map(c=>Ii(new H(e),c.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];i.forEach(c=>{if(!c)return;let u=Mc.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=Bi.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 H(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=Jn.decode(s.accountInfo.data),c=ue.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[o])]=q(v({},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 H(c)}))),o={};i.forEach(c=>{!c.accountInfo||(o[c.pubkey.toBase58()]=Lc.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()||Io.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?_n((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:At({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Io.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?_n((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:q(v({},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 pi({connection:this.scope.connection,mints:Array.from(n).map(m=>new H(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=Cc(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number($c.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number($c.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(v({},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(H.default)).map(m=>({mint:At({address:m.tokenMint.toBase58(),programId:Io.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:o[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as mf,NATIVE_MINT as Ur,TOKEN_PROGRAM_ID as Mt,createAssociatedTokenAccountIdempotentInstruction as cl}from"@solana/spl-token";import Ba from"bn.js";import Vr from"decimal.js-light";import So from"bn.js";function _r(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function $p(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=_r(r,e);return n.gt(Ki)&&(t=t.add(new So(1)),e=r.div(t),n=_r(r,t),n.gt(Ki)&&(e=e.add(new So(1)))),[t,e]}var Ki=new So(0),Fr=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s]=$p(i,o),a=n.sub(s);if(a.isZero())throw Error("destinationAmountSwapped is zero");return{destinationAmountSwapped:a}}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 _r(e.mul(n),t).gt(Ki)&&s.gt(Ki)&&(s=s.add(new So(1))),_r(e.mul(i),t).gt(Ki)&&a.gt(Ki)&&(a=a.add(new So(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Er=class{static tradingFee(e,t){return er(e,t,tn)}static protocolFee(e,t){return Ts(e,t,tn)}static fundFee(e,t){return Ts(e,t,tn)}};var Dr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let o=Er.tradingFee(e,i),s=e.sub(o),{destinationAmountSwapped:a}=Fr.swapWithoutFees(s,t,n);return{newSwapDestinationAmount:n.sub(a),sourceAmountSwapped:e,destinationAmountSwapped:a,tradeFee:o}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:o,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,o,e.decimals,t.decimals,e.address]:[o,i,t.decimals,e.decimals,t.address],p=new Vr(u.toString()).div(10**m).div(new Vr(c.toString()).div(10**l)),f=a.gte(u)?u.sub(new Ba(1)):a,b=u.sub(f),y=Jt(c.mul(f),b),g=Jt(y.mul(new Ba(1e6)),new Ba(1e6).sub(n)),P=g.sub(y),k=new Vr(f.toString()).div(10**m).div(new Vr(g.toString()).div(10**l)),I=p.isZero()?0:k.sub(p).div(p).abs().toNumber();return{amountRealOut:f,amountIn:g,amountInWithoutFee:y,tradeFee:P,priceImpact:I}}};import Ze from"bn.js";import{PublicKey as Co,TransactionInstruction as ri,Keypair as af,SystemProgram as uf}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as nl,TOKEN_2022_PROGRAM_ID as xa,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var Jp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),QS=Buffer.from("amm_config","utf8"),ef=Buffer.from("pool","utf8"),tf=Buffer.from("pool_lp_mint","utf8"),nf=Buffer.from("pool_vault","utf8"),of=Buffer.from("observation","utf8");function Ci(r){return le([Jp],r)}function Sa(r,e,t,n){return le([ef,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function rf(r,e){return le([tf,e.toBuffer()],r)}function el(r,e,t){return le([nf,e.toBuffer(),t.toBuffer()],r)}function xo(r,e){return le([of,e.toBuffer()],r)}function tl({poolId:r,programId:e,configId:t,mintA:n,mintB:i}){let o=Ci(e).publicKey,s=r||Sa(e,t,n,i).publicKey,a=rf(e,s).publicKey,c=el(e,s,n).publicKey,u=el(e,s,i).publicKey,l=xo(e,s).publicKey;return{poolId:s,configId:t,authority:o,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var sf=Buffer.from("locked_liquidity","utf8");function Ko(r,e){return le([sf,e.toBuffer()],r)}var cf=Pe("Raydium_cpmm"),si={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]};function il(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountMaxA"),A("amountMaxB"),A("openTime")]),h=Sa(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:y,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:nl,isSigner:!1,isWritable:!1},{pubkey:As,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1}],x=Buffer.alloc(I.span);return I.encode({amountMaxA:g,amountMaxB:P,openTime:k},x),new ri({keys:w,programId:r,data:Buffer.from([...si.initialize,...x])})}function ol(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),y=[{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:Vn,isSigner:!1,isWritable:!1},{pubkey:xa,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(b.span);return cf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),b.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new ri({keys:y,programId:r,data:Buffer.from([...si.deposit,...g])})}function rl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMinA"),A("amountMinB")]),y=[{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:Vn,isSigner:!1,isWritable:!1},{pubkey:xa,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Rn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);return b.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new ri({keys:y,programId:r,data:Buffer.from([...si.withdraw,...g])})}function Wr(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountIn"),A("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}],P=Buffer.alloc(y.span);return y.encode({amountIn:f,amounOutMin:b},P),new ri({keys:g,programId:r,data:Buffer.from([...si.swapBaseInput,...P])})}function sl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountInMax"),A("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}],P=Buffer.alloc(y.span);return y.encode({amountInMax:f,amountOut:b},P),new ri({keys:g,programId:r,data:Buffer.from([...si.swapBaseOutput,...P])})}async function al(r){var y;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:i,getEphemeralSigners:o}=r,s=[],[a,c]=[new Co(t.id),new Co(t.lpMint.address)],u;if(o)u=new Co((await o(1))[0]);else{let g=af.generate();s.push(g),u=g.publicKey}let{publicKey:l}=ee(i,u,Vn),{publicKey:m}=Pn(u),{publicKey:d}=Ko(r.lockProgram,u),{publicKey:p}=ee(e.wallet,c,Vn),{publicKey:f}=ee(r.lockAuthProgram,c,Vn),b=lf({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 Co(n.vault.A),poolVaultB:new Co(n.vault.B),metadataAccount:m,lpAmount:r.lpAmount,withMetadata:(y=r.withMetadata)!=null?y:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[b],signers:s,instructionTypes:[G.CpmmLockLp],lookupTableAddress:[]}}function lf({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:b,withMetadata:y}){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:ct,isSigner:!1,isWritable:!1},{pubkey:uf.programId,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:nl,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1}],P=E([A("lpAmount"),Ge("withMetadata")]),k=Buffer.alloc(P.span);P.encode({lpAmount:b,withMetadata:y},k);let I=Buffer.from([...si.lockCpLiquidity,...k]);return new ri({keys:g,programId:r,data:I})}function Ka({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:b,cpmmAuthProgram:y}){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:b!=null?b:rr,isSigner:!1,isWritable:!1},{pubkey:y!=null?y:Nu,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:Vn,isSigner:!1,isWritable:!1},{pubkey:xa,isSigner:!1,isWritable:!1},{pubkey:Rn,isSigner:!1,isWritable:!1}],P=E([A("lpFeeAmount")]),k=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},k);let I=Buffer.from([...si.collectCpFee,...k]);return new ri({keys:g,programId:r,data:I})}var ul=E([Se(8),W("bump"),Ge("disableCreatePool"),Ct("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),N("protocolOwner"),N("fundOwner"),j(A(),16)]),qr=E([Se(8),N("configId"),N("poolCreator"),N("vaultA"),N("vaultB"),N("mintLp"),N("mintA"),N("mintB"),N("mintProgramA"),N("mintProgramB"),N("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),j(A(),32)]);var Ro=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 z(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=qr.decode(d.accountInfo.data);i[String(e[m])]=q(v({},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 z(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]]=ul.decode(f.data)}}let c={},u=await Oe(this.scope.connection,s.map(m=>({pubkey:new z(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(mf.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(v({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(f.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(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(v({},n),{[i]:q(v({},o),{id:new z(i),configInfo:o.configInfo,version:7,authority:Ci(o.programId).publicKey,mintA:At({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?_n((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?_n((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await pi({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?_n(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?_n(n[t.mintB.toBase58()].feeConfig):void 0}}),s=At({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Mt.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 O(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new O(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:Ci(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:xo(t.programId,new z(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var b=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}=b,p=Ue(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var F,Q,$;let y=o.feePayer||((F=this.scope.owner)==null?void 0:F.publicKey),g=new Ze(new z(p.mintA.address).toBuffer()).lte(new Ze(new z(p.mintB.address).toBuffer())),[P,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[I,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=o.useSOLBalance&&P.address===Ur.toBase58(),x=o.useSOLBalance&&k.address===Ur.toBase58(),[S,K]=[new z(P.address),new z(k.address)],T=this.createTxBuilder(d),{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:P.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:y,amount:I}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:a});T.addInstruction(_||{});let{account:M,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new z(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:y,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:s,checkCreateATAOwner:a});if(T.addInstruction(R||{}),C===void 0||M===void 0)throw Error("you don't has some token account");let L=tl({poolId:e,programId:t,configId:new z(u.id),mintA:S,mintB:K});return T.addInstruction({instructions:[il(t,this.scope.ownerPubKey,new z(u.id),L.authority,L.poolId,S,K,L.lpMint,C,M,ee(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,n,new z((Q=P.programId)!=null?Q:Mt),new z(($=k.programId)!=null?$:Mt),L.observationId,I,h,i)],instructionTypes:[G.CpmmCreatePool]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),T.versionBuild({txVersion:c,extInfo:{address:q(v({},L),{mintA:P,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:b}=v({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(v({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new rt(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(i.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),I=k.amount,h=t.mintA.address===Ur.toString(),w=t.mintB.address===Ur.toString(),x=this.createTxBuilder(d),[S,K]=[new z(t.mintA.address),new z(t.mintB.address)],{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(o?i:I).isZero()?{payer:this.scope.ownerPubKey,amount:o?i:I}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:b});x.addInstruction(C||{});let{account:_,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(o?I:i).isZero()?{payer:this.scope.ownerPubKey,amount:o?I:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:b});x.addInstruction(M||{}),!T&&!_&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let R=await p.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:R,bypassAssociatedCheck:f,checkCreateATAOwner:b}),{tokenAccount:L}=ce,F=Ue(ce,["tokenAccount"]);x.addInstruction(F);let Q=n!=null?n:await this.getCpmmPoolKeys(t.id),$=new rt(new Ze(1)).sub(s);return x.addInstruction({instructions:[ol(new z(t.programId),this.scope.ownerPubKey,new z(Q.authority),new z(t.id),L,T,_,new z(Q.vault.A),new z(Q.vault.B),S,K,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:$.mul(g).quotient,o?P.amount:I,o?I:P.amount)],instructionTypes:[G.CpmmAddLiquidity],lookupTableAddress:Q.lookupTableAccount?[Q.lookupTableAccount]:[]}),x.addCustomComputeBudget(c),x.addTipInstruction(u),x.versionBuild({txVersion:m})}async withdrawLiquidity(e){var F,Q;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],b=await this.scope.fetchEpochInfo(),[y,g]=[Ce(p,t.mintA.extensions.feeConfig,b,!1),Ce(f,t.mintB.extensions.feeConfig,b,!1)],{account:P}=this.scope,k=this.createTxBuilder(u),[I,h]=[new z(t.mintA.address),new z(t.mintB.address)],w=I.equals(Y),x=h.equals(Y),S,K,{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});S=T,C&&k.addInstruction(C);let{account:_,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(x&&l),associatedOnly:!x,checkCreateATAOwner:!1});K=_,M&&k.addInstruction(M),(!S||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let R=await P.getCreatedTokenAccount({mint:new z(t.lpMint.address)});R||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let L=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[rl(new z(t.programId),this.scope.ownerPubKey,new z(L.authority),new z(t.id),R,S,K,new z(L.vault.A),new z(L.vault.B),I,h,new z(t.lpMint.address),i,p.sub((F=y.fee)!=null?F:new Ze(0)),f.sub((Q=g.fee)!=null?Q:new Ze(0)))],instructionTypes:[G.CpmmWithdrawLiquidity],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),k.addCustomComputeBudget(s),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,_,M,R,L,F;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:b,associatedOnly:y}=v({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[P,k]=[new z(t.mintA.address),new z(t.mintB.address)];o?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ze((1+c)*1e4)).div(new Ze(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ze((1-c)*1e4)).div(new Ze(1e4));let I=t.mintA.address===Y.toBase58(),h=t.mintB.address===Y.toBase58(),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new z((C=t.mintA.programId)!=null?C:Mt),owner:this.scope.ownerPubKey,createInfo:I||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:y,checkCreateATAOwner:b});x&&g.addInstruction(x);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new z((_=t.mintB.programId)!=null?_:Mt),owner:this.scope.ownerPubKey,createInfo:h||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:y,checkCreateATAOwner:b});K&&g.addInstruction(K),(!w||!S)&&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:S,mintAUseSOLBalance:I,mintBUseSOLBalance:h,associatedOnly:y});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[o?sl(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),i?w:S,i?S:w,new z(T.vault[i?"A":"B"]),new z(T.vault[i?"B":"A"]),new z((L=t[i?"mintA":"mintB"].programId)!=null?L:Mt),new z((F=t[i?"mintB":"mintA"].programId)!=null?F:Mt),i?P:k,i?k:P,xo(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Wr(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),i?w:S,i?S:w,new z(T.vault[i?"A":"B"]),new z(T.vault[i?"B":"A"]),new z((M=t[i?"mintA":"mintB"].programId)!=null?M:Mt),new z((R=t[i?"mintB":"mintA"].programId)!=null?R:Mt),i?P:k,i?k:P,xo(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[o?G.CpmmSwapBaseOut:G.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,b,y;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 al({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:sr,lockAuthProgram:(b=e.authProgram)!=null?b:ar,lpAmount:n,withMetadata:(y=e.withMetadata)!=null?y:!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 _;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:o=sr,authProgram:s=ar,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,b]=[new z(t.mintA.address),new z(t.mintB.address)],y=f.equals(Y),g=b.equals(Y),P,k,{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(y&&m),associatedOnly:!y,checkCreateATAOwner:!1});P=I,h&&p.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,x&&p.addInstruction(x),(!P||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:k});let S=(_=e.poolKeys)!=null?_:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,i,Mt),{publicKey:T}=Ko(o,i),{publicKey:C}=ee(s,new z(t.lpMint.address),Mt);return p.addInstruction({instructions:[Ka({programId:o,nftOwner:this.scope.ownerPubKey,auth:s,nftMint:i,nftAccount:K,lockPda:T,poolId:new z(t.id),mintLp:new z(S.mintLp.address),userVaultA:P,userVaultB:k,poolVaultA:new z(S.vault.A),poolVaultB:new z(S.vault.B),mintA:f,mintB:b,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[G.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){let{lockInfo:t,programId:n=sr,authProgram:i=ar,cpmmProgram:o,computeBudgetConfig:s,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u);return t.forEach(async m=>{var K;let{poolInfo:d,lpFeeAmount:p,nftMint:f}=m;if(p.isZero())return;let[b,y]=[new z(d.mintA.address),new z(d.mintB.address)],g=b.equals(Y),P=y.equals(Y),k,I;if(g){let{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new z(d.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});k=T,C&&l.addInstruction(C)}else{let T=new z(d.mintA.address);k=this.scope.account.getAssociatedTokenAccount(T,new z(d.mintA.programId)),l.addInstruction({instructions:[cl(this.scope.ownerPubKey,k,this.scope.ownerPubKey,T)]})}if(P){let{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new z(d.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});I=T,C&&l.addInstruction(C)}else{let T=new z(d.mintB.address);I=this.scope.account.getAssociatedTokenAccount(T,new z(d.mintB.programId)),l.addInstruction({instructions:[cl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,T)]})}(!k||!I)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:k,tokenAccountB:I});let h=(K=m.poolKeys)!=null?K:await this.getCpmmPoolKeys(d.id),{publicKey:w}=ee(u,f,Mt),{publicKey:x}=Ko(n,f),{publicKey:S}=ee(i,new z(d.lpMint.address),Mt);l.addInstruction({instructions:[Ka({programId:n,nftOwner:this.scope.ownerPubKey,auth:i,nftMint:f,nftAccount:w,lockPda:x,poolId:new z(d.id),mintLp:new z(h.mintLp.address),userVaultA:k,userVaultB:I,poolVaultA:new z(h.vault.A),poolVaultB:new z(h.vault.B),mintA:b,mintB:y,lockLpVault:S,lpFeeAmount:p,cpmmProgram:o==null?void 0:o.programId,cpmmAuthProgram:o==null?void 0:o.authProgram})],instructionTypes:[G.CpmmCollectLockFee]})}),a===0?l.sizeCheckBuildV0({computeBudgetConfig:s}):l.sizeCheckBuild({computeBudgetConfig:s})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let o=n.toString()===e.mintB.address,s=Dr.swap(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ze((1-i)*1e4)).div(new Ze(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var I,h,w,x,S,K,T,C,_;let c=1-Number(o.toSignificant())/100,u=new Ze(new O(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((I=l.fee)!=null?I:new Ze(0)),d=new Ze(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.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),b={amount:Bt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let M=df(f,t,n,d);this.logDebug("lpAmountData:",{amountA:M.amountA.toString(),amountB:M.amountB.toString()}),b=Ce(M[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let y=new rt(new Ze(1)).add(o),g=new rt(new Ze(1)).sub(o),P=Ce(y.mul(b.amount.sub((x=b.fee)!=null?x:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=Ce(g.mul(b.amount.sub((S=b.fee)!=null?S:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",b.amount.toString(),"anotherAmountFee:",(T=(K=b.fee)==null?void 0:K.toString())!=null?T:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(_=(C=P.fee)==null?void 0:C.toString())!=null?_:0),{inputAmountFee:l,anotherAmount:b,maxAnotherAmount:P,minAnotherAmount:k,liquidity:f}}};function df(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 ui}from"@solana/web3.js";import{createTransferInstruction as bl,TOKEN_PROGRAM_ID as $e,TOKEN_2022_PROGRAM_ID as zr}from"@solana/spl-token";import Qr from"bn.js";var ll={[Bs.toBase58()]:3},ml={3:Bs};var Ca=E([Se(5),Se(8),N("ownAddress"),A("vaultSignerNonce"),N("baseMint"),N("quoteMint"),N("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),N("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),N("requestQueue"),N("eventQueue"),N("bids"),N("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Se(7)]),dl={3:Ca};import{PublicKey as pl}from"@solana/web3.js";var Gr=Pe("Serum"),Xr=class{static getProgramId(e){let t=ml[e];return t||Gr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ll[t];return n||Gr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=dl[e];return t||Gr.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=pl.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Gr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:pl.default,nonce:i}}};import{PublicKey as se,SystemProgram as pf,TransactionInstruction as ff}from"@solana/web3.js";import ai from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as bf,TOKEN_2022_PROGRAM_ID as yf,TOKEN_PROGRAM_ID as gf}from"@solana/spl-token";function Af(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){var w;let b=[],y=[B({pubkey:gf,isWritable:!1}),B({pubkey:yf,isWritable:!1}),B({pubkey:bf,isWritable:!1}),B({pubkey:pf.programId,isWritable:!1}),B({pubkey:e,isSigner:!0})];y.push(B({pubkey:t})),y.push(B({pubkey:i}));let g=[c,u],P=[l,m],k=[o,s,a];for(let x=0;x<g.length;x++){let S=g[x],K=k[x]===S.mintA.address;if(y.push(B({pubkey:new se(S.programId),isWritable:!1})),x===g.length-1?y.push(B({pubkey:i})):y.push(B({pubkey:n})),y.push(B({pubkey:new se(k[x])})),y.push(B({pubkey:new se(k[x+1])})),S.version===6){let T=P[x];y.push(B({pubkey:new se(T.config.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(K?T.vault.A:T.vault.B)})),y.push(B({pubkey:new se(K?T.vault.B:T.vault.A)})),y.push(B({pubkey:new se(S.observationId)})),y.push(B({pubkey:Rn})),y.push(B({pubkey:Ye(new se(S.programId),new se(S.id)).publicKey})),b.push(Pf(S.sqrtPriceX64.toString(),K));for(let C of(w=f[x])!=null?w:[])y.push(B({pubkey:new se(C)}))}else if(S.version===5){let T=P[x];y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.authority),isWritable:!1})),y.push(B({pubkey:new se(T.marketProgramId)})),y.push(B({pubkey:new se(T.marketAuthority)})),y.push(B({pubkey:Ru,isWritable:!1})),y.push(B({pubkey:new se(T.openOrders)})),y.push(B({pubkey:new se(T.vault.A)})),y.push(B({pubkey:new se(T.vault.B)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.marketId)})),y.push(B({pubkey:new se(T.marketBids)})),y.push(B({pubkey:new se(T.marketAsks)})),y.push(B({pubkey:new se(T.marketEventQueue)})),y.push(B({pubkey:new se(T.marketBaseVault)})),y.push(B({pubkey:new se(T.marketQuoteVault)}))}else if(S.version===4){let T=P[x],C=S.status!==1;y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.authority),isWritable:!1})),y.push(B({pubkey:new se(C?T.id:T.marketProgramId)})),y.push(B({pubkey:new se(C?T.id:T.marketAuthority)})),y.push(B({pubkey:new se(C?T.id:T.openOrders)})),y.push(B({pubkey:new se(T.vault.A)})),y.push(B({pubkey:new se(T.vault.B)})),y.push(B({pubkey:new se(C?T.id:T.marketId)})),y.push(B({pubkey:new se(C?T.id:T.marketBids)})),y.push(B({pubkey:new se(C?T.id:T.marketAsks)})),y.push(B({pubkey:new se(C?T.id:T.marketEventQueue)})),y.push(B({pubkey:new se(C?T.id:T.marketBaseVault)})),y.push(B({pubkey:new se(C?T.id:T.marketQuoteVault)}))}else if(S.version===7){let T=P[x];y.push(B({pubkey:new se(T.authority)})),y.push(B({pubkey:new se(T.config.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(K?T.vault.A:T.vault.B)})),y.push(B({pubkey:new se(K?T.vault.B:T.vault.A)})),y.push(B({pubkey:new se(S.observationId)}))}else throw Error("pool type error")}let I=E([W("insId"),A("amountIn"),A("amountOut"),j(oe(),b.length,"clmmPriceLimit")]),h=Buffer.alloc(I.span);return I.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:b},h),new ff({keys:y,programId:r,data:h})}function Pf(r,e){if(r)if(e){let t=new ai(r).div(new ai(25));return t.gt(Ir)?t:Ir}else{let t=new ai(r).mul(new ai(25));return t.lt(Br)?t:Br}else return e?Ir:Br}function fl({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=lt(m),p=t.equals(d.mintA.address)?Wt.add(Lt):qt.sub(Lt);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 ai(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:[Wr(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 se(m[d?"mintA":"mintB"].address),new se(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?G.CpmmSwapBaseIn:G.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Lr({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 ai(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?G.AmmV5SwapBaseIn:G.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:[Af(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 ai(0)),n.remainingAccounts)],instructionTypes:[G.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(b=>b!==void 0),address:{}}}else throw Error("route type error")}var hn=new Qr(0),Lo=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(Y));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=J(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(a.addInstruction({instructions:[yn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):a.addInstruction({instructions:[yn({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 On({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(Y),d=l.amount.token.mint.equals(Y),p=u.amount.token.mint,f=l.amount.token.mint,{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?zr:$e,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(y&&c.addInstruction(y),b===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?zr:$e);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?zr:$e,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:[yn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:$e})],endInstructionTypes:[G.CloseAccount]});let P;if(e.routeType==="route"){let h=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?zr:$e)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),I=fl({routeProgram:o,inputMint:p,swapInfo:q(v({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:b,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[bl(b,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[G.TransferAmount]}),h.addInstruction(I);let{transactions:w}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[bl(b,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[G.TransferAmount]})}return c.addInstruction(I),s===0?c.sizeCheckBuildV0({computeBudgetConfig:i,address:I.address}):c.sizeCheckBuild({computeBudgetConfig:i,address:I.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ir,clmm:n=Xn,cpmm:i=rr}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ao.offsetOf("baseMint"),length:64}}),s=E([N("baseMint"),N("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=E([N("mintA"),N("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Jn.span}],dataSlice:{offset:Jn.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:qr.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:o}){e=e.toString()===ui.default.toString()?Y:e,t=t.toString()===ui.default.toString()?Y: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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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 b 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),b.version===6&&a[b.id.toString()]===void 0?a[b.id.toString()]=b:b.version===7&&c[b.id.toString()]===void 0?c[b.id.toString()]=b:(b.version===4||b.version===5)&&s[b.id.toString()]===void 0&&(s[b.id.toString()]=b)}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(b=>[b.mintA.toBase58(),b.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(b=>b.id)),s=Or(o),a={};Object.values(s).forEach(b=>{i.delete(b.mintA.address),a[b.mintA.address]={address:new ui(b.mintA.address),programId:$e,mintAuthority:null,supply:BigInt(0),decimals:b.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(b.mintB.address),a[b.mintB.address]={address:new ui(b.mintB.address),programId:$e,mintAuthority:null,supply:BigInt(0),decimals:b.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(b=>b.id.toBase58()),!0);Object.values(c).forEach(b=>{let[y,g]=[b.mintA.toBase58(),b.mintB.toBase58()];b.mintProgramA.equals($e)?(i.delete(y),a[y]={address:b.mintA,programId:b.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:b.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(y),b.mintProgramB.equals($e)?(i.delete(g),a[g]={address:b.mintB,programId:b.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:b.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 pi({connection:this.scope.connection,mints:Array.from(i).map(b=>new ui(b))});a=v(v({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(b=>b.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((b,y)=>q(v({},b),{[y]:q(v({},e.routePathDict[y]),{mintProgram:a[y].programId,mDecimals:a[y].decimals,in:e.routePathDict[y].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[y].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,P,k,I,h,w,x,S,K;let m=l===void 0?new Qr(0):e.raw.mul(new Qr(l.feeBps.toNumber())).div(new Qr(1e4)),d=e.raw.sub(m),p=new Ke(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},b=q(v({},t),{address:pt(t.address).toString()}),y=[];for(let T of n)try{y.push(q(v({},this.computeAmountOut({itemPool:T,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",T.version,T.id.toString(),C.message)}this.logDebug("direct done");for(let[T,C]of Object.entries(i)){let _={chainId:101,address:T,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},M=C.in.map(L=>{try{return{pool:L,data:this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:_,amountIn:p})}}catch(F){this.logDebug("route in error",L.version,L.id.toString(),F.message);return}}).sort((L,F)=>{var ce,ke,de,ye;let Q=L===void 0?hn:L.data.amountOut.amount.raw.sub((ke=(ce=L.data.amountOut.fee)==null?void 0:ce.raw)!=null?ke:hn),$=F===void 0?hn:F.data.amountOut.amount.raw.sub((ye=(de=F.data.amountOut.fee)==null?void 0:de.raw)!=null?ye:hn);return Q.lt($)?1:-1})[0];if(M===void 0)continue;let R=new Ke(Cr(_),M.data.amountOut.amount.raw.sub((P=(g=M.data.amountOut.fee)==null?void 0:g.raw)!=null?P:hn));for(let L of C.out)try{let F=this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:R});y.push(q(v({},F),{allTrade:!!(M.data.allTrade&&F.allTrade),amountIn:M.data.amountIn,amountOut:F.amountOut,minAmountOut:F.minAmountOut,currentPrice:void 0,executionPrice:new O(new It({baseToken:M.data.amountIn.amount.token,denominator:M.data.amountIn.amount.raw,quoteToken:F.amountOut.amount.token,numerator:F.amountOut.amount.raw.sub((I=(k=F.amountOut.fee)==null?void 0:k.raw)!=null?I:hn)}).toFixed()),priceImpact:new O(M.data.priceImpact.add(F.priceImpact).toFixed()),fee:[M.data.fee[0],F.fee[0]],routeType:"route",poolInfoList:[M.pool,L],remainingAccounts:[M.data.remainingAccounts[0],F.remainingAccounts[0]],minMiddleAmountFee:(h=F.amountOut.fee)!=null&&h.raw?new Ke(M.data.amountOut.amount.token,((x=(w=M.data.amountOut.fee)==null?void 0:w.raw)!=null?x:hn).add((K=(S=F.amountOut.fee)==null?void 0:S.raw)!=null?K:hn)):void 0,middleToken:M.data.amountOut.amount.token,poolReady:M.data.poolReady&&F.poolReady,poolType:[M.data.poolType,F.poolType],feeConfig:f,expirationTime:en(M.data.expirationTime,F.expirationTime)}))}catch(F){this.logDebug("route out error",L.version,L.id.toString(),F.message)}}return y.filter(T=>(T.allTrade||this.logDebug(`pool ${T.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),T.allTrade)).sort((T,C)=>T.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(hn)?-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:b,priceImpact:y,fee:g,remainingAccounts:P,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 O(f.toFixed()),executionPrice:new O(b.toFixed()),priceImpact:new O(y.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:en(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:go(q(v({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:go(q(v({},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:go(q(v({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:go(q(v({},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 ui(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Ca.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Xr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:q(v({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=v({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:ha({programId:new ui(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:Ci(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:At({address:u.mintLp.toBase58(),programId:$e.toBase58(),decimals:u.lpDecimals}),config:q(v({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as wf,Transaction as Ra,TransactionInstruction as kf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hf}from"@solana/spl-token";import yl from"bn.js";var Pt=class extends _e{static getPdaPoolId(e,t){return le([Pt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return le([Pt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new yl(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=>Pt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Pt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Pt.getPdaOwnerId(t,m,i,l).publicKey));let c=await Ht(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],b=c[d],y=c[n.length+l];if(!(b&&y)||b.data.length!==Pt.POOL_LAYOUT.span||y.data.length!==Pt.OWNER_LAYOUT.span)continue;let g=Pt.POOL_LAYOUT.decode(b.data),P=Pt.OWNER_LAYOUT.decode(y.data),k=g.openTime.toNumber(),I=g.endTime.toNumber(),h=P.tokenInfo.map(S=>S.debtAmount.gt(new yl(0))).filter(S=>!S).length!==3,w=o>k&&o<I&&g.status===1,x=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:Pt.VERSION_PROJECT[m],openTime:k,endTime:I,canClaim:x,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((S,K)=>({mintAddress:S.mintAddress,mintVault:S.mintVault,mintDecimals:S.mintDecimals,perLpLoss:S.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.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(We.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!u.mintAddress.equals(We.WSOL.mint),associatedOnly:u.mintAddress.equals(We.WSOL.mint)?!1:t.associatedOnly});m&&i.addInstruction(m),s.push(l)}i.addInstruction({instructions:[Pt.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(We.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!d.mintAddress.equals(We.WSOL.mint),associatedOnly:d.mintAddress.equals(We.WSOL.mint)?!1:t.associatedOnly});f&&i.addInstruction(f),p&&(s[d.mintAddress.toString()]=p,m.push(p))}i.addInstruction({instructions:[Pt.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 Is(u,[o,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ra().add(...u.slice(0,i.AllTxData.instructions.length-1)),signer:c},{transaction:new Ra().add(...u.slice(i.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ra().add(...i.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=E([]),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:hf,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 kf({keys:o,programId:e,data:a})}},Ut=Pt;Ut.CLAIMED_NUM=3,Ut.POOL_LAYOUT=E([Se(8),W("bump"),W("status"),A("openTime"),A("endTime"),N("ammId"),j(E([W("mintDecimals"),N("mintAddress"),N("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),Pt.CLAIMED_NUM,"tokenInfo"),j(A(),10,"padding")]),Ut.OWNER_LAYOUT=E([Se(8),W("bump"),W("version"),N("poolId"),N("owner"),A("lpAmount"),j(E([N("mintAddress"),A("debtAmount"),A("claimedAmount")]),Pt.CLAIMED_NUM,"tokenInfo"),j(A(),4,"padding")]),Ut.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new wf(e)),Ut.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Ut.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Oo}from"@solana/web3.js";import Pl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as If,TransactionInstruction as gl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Al}from"@solana/spl-token";var Tf=E([W("instruction"),Uu("amount")]),No=E([W("instruction")]);function Hr({programId:r},e){let t=[{pubkey:Al,isSigner:!1,isWritable:!1},{pubkey:yu,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(No.span);return No.encode({instruction:2},n),new gl({keys:t,programId:r,data:n})}function La(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(No.span);No.encode({instruction:2},s);let a=[{pubkey:Al,isWritable:!1,isSigner:!1},{pubkey:If,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 gl({programId:e.programId,keys:a,data:s})}var Bf={[ji.IDO_PROGRAM_ID_V1.toString()]:1,[ji.IDO_PROGRAM_ID_V2.toString()]:2,[ji.IDO_PROGRAM_ID_V3.toString()]:3,[ji.IDO_PROGRAM_ID_V4.toString()]:4},Ri=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=Bf[t.programId];c||this.logAndCreateError("invalid version",c);let u=lt(t),[l,m]=[!new Pl(e.coin).isZero(),!new Pl(e.pc).isZero()],d=u.projectInfo.mint.address.equals(Y),{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 b=u.buyInfo.mint.address.equals(Y),{account:y,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:!b,notUseTokenAccount:b,associatedOnly:b?!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||!y)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[Hr({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Oo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[Hr({programId:new Oo(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:y,userIdoInfo:new Oo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[Hr({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:y,userBaseTokenAccount:p,userIdoInfo:new Oo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let P={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:y,ledgerAccount:new Oo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[La(q(v({},P),{side:"base"}))]:[],...m?[La(q(v({},P),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};var Sf=Buffer.from("vault_auth_seed","utf8"),I0=Buffer.from("global_config","utf8"),xf=Buffer.from("pool_vesting","utf8"),Kf=Buffer.from("platform_config","utf8"),Cf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Rf=Buffer.from("creator_fee_vault_auth_seed","utf8");function dn(r){return le([Sf],r)}function Li(r,e,t){return le([oa,e.toBuffer(),t.toBuffer()],r)}function Na(r,e,t){return le([ra,e.toBuffer(),t.toBuffer()],r)}function ci(r){return le([Buffer.from("__event_authority","utf8")],r)}function Oa(r,e){return le([Kf,e.toBuffer()],r)}function Mo(r,e,t){return le([xf,e.toBuffer(),t.toBuffer()],r)}function li(r,e,t){return le([e.toBuffer(),t.toBuffer()],r)}function Ma(r){return le([Cf],r)}function Ni(r,e,t){return le([e.toBuffer(),t.toBuffer()],r)}function wl(r){return le([Rf],r)}import{SystemProgram as Gt,TransactionInstruction as vt}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as jr,TOKEN_2022_PROGRAM_ID as Lf,TOKEN_PROGRAM_ID as va}from"@solana/spl-token";import vo from"bn.js";var _t={initialize:Buffer.from([175,175,109,31,13,152,155,237]),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])};function kl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([W("decimals"),St("name"),St("symbol"),St("uri")]),h=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod")]),w=E([W("index"),A("supply"),A("totalFundRaisingB"),W("migrateType")]),x=E([W("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),W("migrateType")]),S=[{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:!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:va,isSigner:!1,isWritable:!1},{pubkey:va,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:ci(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(b,"utf-8").length+4*3+1),T=Buffer.alloc(h.span),C=Buffer.alloc(y.type==="ConstantCurve"?x.span:w.span);return I.encode({decimals:d,name:p,symbol:f,uri:b},K),y.type==="ConstantCurve"?x.encode(q(v({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),C):y.type==="FixedCurve"?w.encode(q(v({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),C):y.type==="LinearCurve"&&w.encode(q(v({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),C),h.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:k},T),new vt({keys:S,programId:r,data:Buffer.from([..._t.initialize,...K,...C,...T])})}function hl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([W("decimals"),St("name"),St("symbol"),St("uri")]),h=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),W("transferFeeExtensionParamsOption"),E([Ct("transferFeeBasePoints"),A("maxinumFee")]).replicate("transferFeeExtensionParams")]),w=E([W("index"),A("supply"),A("totalFundRaisingB"),W("migrateType")]),x=E([W("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),W("migrateType")]),S=[{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:!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:Lf,isSigner:!1,isWritable:!1},{pubkey:va,isSigner:!1,isWritable:!1},{pubkey:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],K=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),T=Buffer.alloc(h.span),C=Buffer.alloc(b.type==="ConstantCurve"?x.span:w.span);return I.encode({decimals:m,name:d,symbol:p,uri:f},K),b.type==="ConstantCurve"?x.encode(q(v({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="FixedCurve"?w.encode(q(v({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="LinearCurve"&&w.encode(q(v({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),C),h.encode({totalLockedAmount:y,cliffPeriod:g,unlockPeriod:P,transferFeeExtensionParamsOption:k?1:0,transferFeeExtensionParams:k!=null?k:{transferFeeBasePoints:0,maxinumFee:new vo(0)}},T),new vt({keys:S,programId:r,data:Buffer.from([..._t.initializeWithToken2022,...K,...C,...T])})}function Tl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountB"),A("minAmountA"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountB:y,minAmountA:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.buyExactIn,...w])})}function Il(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountA"),A("maxAmountB"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountA:y,maxAmountB:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.buyExactOut,...w])})}function Bl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountA"),A("minAmountB"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountA:y,minAmountB:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.sellExactIn,...w])})}function Sl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountB"),A("maxAmountA"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountB:y,maxAmountA:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.sellExactOut,...w])})}function _a(r,e,t,n,i,o,s,a,c){let u=E([]),l=[{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:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:jr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new vt({keys:l,programId:r,data:Buffer.from([..._t.claimVestedToken,...m])})}function Fa(r,e,t,n,i,o){let s=E([A("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Gt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({shareAmount:o},c),new vt({keys:a,programId:r,data:Buffer.from([..._t.createVestingAccount,...c])})}function Ea(r,e,t,n,i,o,s,a,c){let u=[{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:Gt.programId,isSigner:!1,isWritable:!0},{pubkey:jr,isSigner:!1,isWritable:!0}];return new vt({keys:u,programId:r,data:_t.claimPlatformFee})}function xl(r,e,t,n,i,o,s,a,c,u,l,m,d){let p=E([A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),St("name"),St("web"),St("img"),A("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:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],b=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},b),new vt({keys:f,programId:r,data:Buffer.from([..._t.createPlatformConfig,...b])})}function Kl(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=E([W("index"),N("value")]);o=Buffer.alloc(s.span),s.encode({index:0,value:n.value},o)}else if(n.type==="updateLockNftWallet"){let s=E([W("index"),N("value")]);o=Buffer.alloc(s.span),s.encode({index:1,value:n.value},o)}else if(n.type==="migrateCpLockNftScale"){let s=E([W("index"),A("platformScale"),A("creatorScale"),A("burnScale")]);o=Buffer.alloc(s.span),s.encode(v({index:2},n.value),o)}else if(n.type==="updateFeeRate"){let s=E([W("index"),A("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=E([W("index"),St("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=E([W("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=E([W("index"),N("platformClaimFeeWallet"),N("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),St("name"),St("web"),St("img"),N("transferFeeExtensionAuth"),A("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),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 vt({keys:i,programId:r,data:Buffer.from([..._t.updatePlaformConfig,...o])})}function Va(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:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:jr,isSigner:!1,isWritable:!1}];return new vt({keys:c,programId:r,data:_t.claimPlatformFeeFromVault})}function Cl(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:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:jr,isSigner:!1,isWritable:!1}];return new vt({keys:a,programId:r,data:_t.claimCreatorFee})}import{NATIVE_MINT as Tn,TOKEN_2022_PROGRAM_ID as mi,TOKEN_PROGRAM_ID as Qe,createAssociatedTokenAccountIdempotentInstruction as Qt,getTransferFeeConfig as ts,unpackMint as ns}from"@solana/spl-token";import ae from"bn.js";import{PublicKey as Ll}from"@solana/web3.js";var Dn=E([A(),A("epoch"),W("curveType"),Ct("index"),A("migrateFee"),A("tradeFeeRate"),A("maxShareFeeRate"),A("minSupplyA"),A("maxLockRate"),A("minSellRateA"),A("minMigrateRateA"),A("minFundRaisingB"),N("mintB"),N("protocolFeeOwner"),N("migrateFeeOwner"),N("migrateToAmmWallet"),N("migrateToCpmmWallet"),j(A(),16)]),Nf=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),A("startTime"),A("totalAllocatedShare")]),rn=E([A(),A("epoch"),W("bump"),W("status"),W("mintDecimalsA"),W("mintDecimalsB"),W("migrateType"),A("supply"),A("totalSellA"),A("virtualA"),A("virtualB"),A("realA"),A("realB"),A("totalFundRaisingB"),A("protocolFee"),A("platformFee"),A("migrateFee"),Nf.replicate("vestingSchedule"),N("configId"),N("platformId"),N("mintA"),N("mintB"),N("vaultA"),N("vaultB"),N("creator"),W("mintProgramFlag"),j(W(),63)]),_0=E([A(),A("epoch"),N("poolId"),N("beneficiary"),A("claimedAmount"),A("tokenShareAmount"),j(A(),8)]),Oi=E([A(),A("epoch"),N("platformClaimFeeWallet"),N("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),j(W(),64,"name"),j(W(),256,"web"),j(W(),256,"img"),N("cpConfigId"),A("creatorFeeRate"),N("transferFeeExtensionAuth"),j(W(),184)]);import Xt from"bn.js";import Yr from"bn.js";var Wn=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 Zr=class extends Wn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new O(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 Yr(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(o);if(a.lte(new Yr(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 Yr(0))||m.lt(new Yr(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 Qn(i,o)}};import $r from"bn.js";var Jr=class extends Wn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new O(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 $r(0)))throw Error("invalid input 1");let a=new $r(2).mul(t).sub(o),u=t.mul(s).div(a);if(u.lt(new $r(0))||t.lt(new $r(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 Qn(i,n)}};import xt from"bn.js";import Rl from"bn.js";var _o=class{static _multipler(e){return new O(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new O(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 Rl(i.mul(this._Q64).toFixed(0))}};_o._Q64=new O(new Rl(1).shln(64).toString());var es=class extends Wn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new O(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualA.mul(e.realA).toString()).div(_o._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){return new O(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 O(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 xt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new xt(3)).sub(o),u=t.mul(new xt(2)).mul(s).div(a),l=u.mul(u),m=t.mul(new xt(2)).mul(nt).div(l);if(!m.gt(new xt(0)))throw Error("a need gt 0");if(!uo.gt(m))throw Error("a need lt u64 max");if(m.lt(new xt(0))||u.lt(new xt(0)))throw Error("invalid input 0");return{a:m,b:new xt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),i=new xt(2).mul(n).mul(nt).div(e.virtualA);return new xt(new O(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 Qn(e.virtualA.mul(i),new xt(2).mul(nt)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),i=n.mul(n),o=Qn(e.virtualA.mul(i),new xt(2).mul(nt));return e.realB.sub(o)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),i=new xt(2).mul(n).mul(nt).div(e.virtualA),o=new xt(new O(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(v({},m),{decimalA:c,decimalB:u})),p=i.div(new Xt(t-1)),f=new Xt(0),b=[{price:d,totalSellSupply:0}],{a:y,b:g}=m,P=f,k=f;for(let I=1;I<t;I++){let h=I!==t-1?p:i.sub(k),w=this.buyExactIn({poolInfo:{virtualA:y,virtualB:g,realA:P,realB:k,totalFundRaisingB:i,totalSellA:o},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});P=P.add(w.amountA.amount),k=k.add(w.amountB);let x=this.getPrice({poolInfo:{virtualA:y,virtualB:g,realA:P,realB:k},decimalA:c,decimalB:u,curveType:e});b.push({price:x,totalSellSupply:new O(P.toString()).div(10**c).toNumber()})}return b}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(tn).lt(i))throw Error("total lock amount gte max lock amount");if(e.lt(s.minSupplyA.mul(new Xt(10**o))))throw Error("supply lt min supply");let u=e.mul(s.minSellRateA).div(tn);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(tn);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(i),p=new Xt(new O(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new Xt(10).pow(new Xt(o));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new Xt(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}),b=e.totalSellA.sub(e.realA),y,g,P;if(f.gt(b)){y=b;let I=p.buyExactOut({poolInfo:e,amount:y});g=this.calculatePreFee({postFeeAmount:I,feeRate:l}),P=g.sub(I)}else y=f,g=t,P=m;let k=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:Ss(y,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=xs(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}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),y=this.calculatePreFee({postFeeAmount:f,feeRate:b}),g=y.sub(f),P=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:y,splitFee:P}}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})}),b=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:b}}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 b=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:xs(f,c,u),amountB:t,splitFee:b}}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 Xt(0):e.mul(n).div(s),c=s.isZero()?new Xt(0):e.mul(i).div(s),u=s.isZero()?new Xt(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 er(e,t,tn)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(tn),i=tn.sub(t);return n.add(i).sub(new Xt(1)).div(i)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:i}){if(e.add(t).add(n).add(i).gt(new Xt(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 Zr;case 1:return Jr;case 2:return es}throw Error("find curve error")}};var di={initPriceX64:new ae("515752397214619"),supply:new ae(1e15),totalSellA:new ae(7931e11),totalFundRaisingB:new ae(85e9),totalLockedAmount:new ae("0"),cliffPeriod:new ae("0"),unlockPeriod:new ae("0"),decimals:6,virtualA:new ae("1073471847374405"),virtualB:new ae("30050573465"),realA:new ae(0),realB:new ae(0),protocolFee:new ae(0),platformId:new Ll("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ae(0),cliffPeriod:new ae(0),unlockPeriod:new ae(0),startTime:new ae(0),totalAllocatedShare:new ae(0)}},qn=new ae(1e4),Fo=class extends _e{constructor(e){super(e)}async createLaunchpad(C){var _=C,{programId:e=mt,authProgramId:t,platformId:n=di.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:b,txTipConfig:y,feePayer:g,buyAmount:P,minMintAAmount:k,slippage:I,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:x,token2022:S,transferFeeExtensionParams:K}=_,T=Ue(_,["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"]);var _i,Fi,Ei,Vi,Kt,Vo,qa,Ua,Ga,Xa;let M=this.createTxBuilder(g);t=t!=null?t:dn(e).publicKey,S=!!K,S&&(l="cpmm");let R=d;if(!R&&m){let sn=await this.scope.connection.getAccountInfo(m);sn&&(R=Dn.decode(sn.data))}R||this.logAndCreateError("config not found");let L=R.mintB,F=R.curveType,{publicKey:Q}=Li(e,i,L),{publicKey:$}=Na(e,Q,i),{publicKey:ce}=Na(e,Q,L),{publicKey:ke}=Pn(i);this.logDebug(`create token: ${i.toBase58()}, mintB: ${L.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 de=(_i=T==null?void 0:T.supply)!=null?_i:di.supply,ye=(Fi=T==null?void 0:T.totalSellA)!=null?Fi:di.totalSellA,Ae=(Ei=T==null?void 0:T.totalFundRaisingB)!=null?Ei:di.totalFundRaisingB,fe=(Vi=T==null?void 0:T.totalLockedAmount)!=null?Vi:new ae(0),ne=p;if(!p){let sn=await this.scope.connection.getAccountInfo(n);sn||this.logAndCreateError("platform id not found:",n.toString()),ne=Oi.decode(sn.data).feeRate}let Te=zt.getCurve(R.curveType).getInitParam({supply:de,totalFundRaising:Ae,totalSell:ye,totalLockedAmount:fe,migrateFee:R.migrateFee}),He={epoch:new ae(896),bump:254,status:0,mintDecimalsA:o,mintDecimalsB:s,supply:de,totalSellA:ye,mintA:new Ll(i),mintB:L,virtualA:Te.a,virtualB:Te.b,realA:di.realA,realB:di.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:di.protocolFee,platformFee:ne,platformId:n,configId:m,vaultA:$,vaultB:ce,creator:this.scope.ownerPubKey,totalFundRaisingB:Ae,vestingSchedule:{totalLockedAmount:fe,cliffPeriod:new ae(0),unlockPeriod:new ae(0),startTime:new ae(0),totalAllocatedShare:new ae(0)},mintProgramFlag:S?1:0},Un=zt.getCurve(R.curveType),{c:pn}=Un.getInitParam({supply:He.supply,totalFundRaising:He.totalFundRaisingB,totalLockedAmount:fe,totalSell:R.curveType===0?He.totalSellA:new ae(0),migrateFee:R.migrateFee});try{zt.checkParam({supply:He.supply,totalFundRaising:He.totalFundRaisingB,totalSell:pn,totalLockedAmount:fe,decimals:He.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(sn){this.logAndCreateError(`check create mint params failed, ${sn.message}`)}M.addInstruction({instructions:[S?hl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,i,L,$,ce,o,a,c,u||"https://",{type:F===0?"ConstantCurve":F===1?"FixedCurve":F===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:de,totalFundRaisingB:Ae},fe,(Kt=T==null?void 0:T.cliffPeriod)!=null?Kt:new ae(0),(Vo=T==null?void 0:T.unlockPeriod)!=null?Vo:new ae(0),K):kl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,i,L,$,ce,ke,o,a,c,u||"https://",{type:F===0?"ConstantCurve":F===1?"FixedCurve":F===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:de,totalFundRaisingB:Ae},fe,(qa=T==null?void 0:T.cliffPeriod)!=null?qa:new ae(0),(Ua=T==null?void 0:T.unlockPeriod)!=null?Ua:new ae(0))]});let et=S?await this.scope.connection.getEpochInfo():void 0,In=K?{epoch:BigInt((et==null?void 0:et.epoch)||0),maximumFee:BigInt((Ga=K==null?void 0:K.maxinumFee.toString())!=null?Ga:0),transferFeeBasisPoints:(Xa=K==null?void 0:K.transferFeeBasePoints)!=null?Xa:0}:void 0,Mi={amountA:{amount:new ae(0),fee:void 0,expirationTime:void 0},amountB:new ae(0),splitFee:{platformFee:new ae(0),shareFee:new ae(0),protocolFee:new ae(0),creatorFee:new ae(0)}},vi;if(x!=null&&x.length&&M.addInstruction({signers:x}),!T.createOnly){let{builder:sn,extInfo:Nl}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:S?mi:void 0,mintA:i,mintB:L,poolInfo:He,buyAmount:P,minMintAAmount:k,shareFeeRate:T.shareFeeRate,shareFeeReceiver:T.shareFeeReceiver,configInfo:R,platformFeeRate:ne,slippage:I,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!In,transferFeeConfigA:In?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:In,newerTransferFee:In}:void 0});M.addInstruction(v({},sn.AllTxData)),Mi=v({},Nl),vi=(this.scope.cluster==="devnet"||f===1)&&T.shareFeeReceiver?[sn.allInstructions[0]]:void 0}return M.addTipInstruction(y),f===0?M.sizeCheckBuildV0({computeBudgetConfig:b,swapInfo:Mi,splitIns:vi,address:q(v({},He),{poolId:Q})}):M.sizeCheckBuild({computeBudgetConfig:b,swapInfo:Mi,splitIns:vi,address:q(v({},He),{poolId:Q})})}async buyToken({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:i=Qe,mintB:o=Tn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:b,shareFeeRate:y=new ae(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:k=!1,transferFeeConfigA:I,skipCheckMintA:h=!1}){var fe,ne,Ve;p.lte(new ae(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let w=this.createTxBuilder(d),{publicKey:x}=Li(e,n,o);t=t!=null?t:dn(e).publicKey;let S=I;if(!h)if(S)i=mi;else{let Te=await this.scope.connection.getAccountInfo(n);if(Te&&Te.owner.equals(mi)){i=Te.owner;let He=ns(n,Te,i);S=ts(He)||void 0}}let K=this.scope.account.getAssociatedTokenAccount(n,i),T=null,C=o.equals(Tn);w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,K,this.scope.ownerPubKey,n,i)]});let{account:_,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:C?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!C,notUseTokenAccount:C,associatedOnly:C?!1:P,checkCreateATAOwner:k});_&&(T=_),w.addInstruction(M||{}),T===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let Te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});Te||this.logAndCreateError("cannot found pool:",x.toBase58()),R=rn.decode(Te.data)}let L=a,F=await Oe(this.scope.connection,[L?void 0:R.configId,R.platformId].filter(Boolean).map(Te=>({pubkey:Te})));if(!L){let Te=F.find(He=>He.pubkey.equals(R.configId));(!Te||!Te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),L=Dn.decode(Te.accountInfo.data)}let Q=F.find(Te=>Te.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let $=Oi.decode(Q.accountInfo.data);c=c||$.feeRate;let ce=zt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:L.tradeFeeRate,platformFeeRate:c,curveType:L.curveType,shareFeeRate:y,creatorFeeRate:$.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),ke=new O(ce.amountA.amount.toString()).sub((ne=(fe=ce.amountA.fee)==null?void 0:fe.toString())!=null?ne:0),de=b?new O(qn.sub(b).toNumber()/qn.toNumber()).clampedTo(0,1):new O(1),ye=f!=null?f:b?new ae(ke.mul(de).toFixed(0)):ce.amountA.amount.sub((Ve=ce.amountA.fee)!=null?Ve:new ae(0));ce.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ce.amountA.toString()}, input ${o.toBase58()} amount: ${ce.amountB.toString()}`);let Ae=g?ee(g,o,Qe).publicKey:void 0;return Ae&&w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,Ae,g,o)]}),w.addInstruction({instructions:[Tl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,x,K,T,R.vaultA,R.vaultB,n,o,i,Qe,li(e,R.platformId,o).publicKey,Ni(e,R.creator,o).publicKey,ce.amountB.lt(p)?ce.amountB:p,ye,y,Ae)]}),w.addCustomComputeBudget(l),w.addTipInstruction(m),w.versionBuild({txVersion:u,extInfo:q(v({},ce),{decimalOutAmount:ke,minDecimalOutAmount:new O(ye.toString())})})}async buyTokenExactOut({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:i=Qe,mintB:o=Tn,poolInfo:s,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:b,slippage:y,shareFeeRate:g=new ae(0),shareFeeReceiver:P,associatedOnly:k=!0,checkCreateATAOwner:I=!1,skipCheckMintA:h=!1}){b.lte(new ae(0))&&this.logAndCreateError("out amount should gt 0:",b.toString());let w=this.createTxBuilder(p),{publicKey:x}=Li(e,n,o);t=t!=null?t:dn(e).publicKey;let S=s;if(!S){let fe=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});fe||this.logAndCreateError("cannot found pool:",x.toBase58()),S=rn.decode(fe.data)}let K=a,T=await Oe(this.scope.connection,[K?void 0:S.configId,S.platformId].filter(Boolean).map(fe=>({pubkey:fe})));if(!K){let fe=T.find(ne=>ne.pubkey.equals(S.configId));(!fe||!fe.accountInfo)&&this.logAndCreateError("config not found: ",S.configId.toBase58()),K=Dn.decode(fe.accountInfo.data)}let C=T.find(fe=>fe.pubkey.equals(S.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",S.configId.toBase58());let _=Oi.decode(C.accountInfo.data);u=u||_.feeRate;let M=c;if(!h)if(M)i=mi;else{let fe=await this.scope.connection.getAccountInfo(n);if(fe&&fe.owner.equals(mi)){i=fe.owner;let ne=ns(n,fe,i);M=ts(ne)||void 0}}let R=zt.buyExactOut({poolInfo:S,amountA:b,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:_.creatorFeeRate,transferFeeConfigA:M,slot:await this.scope.connection.getSlot()}),L=new O(R.amountB.toString()),F=y?new O(qn.add(y).toNumber()/qn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new O(1),Q=(f!=null?f:y)?new ae(L.mul(F).toFixed(0)):R.amountB,$=this.scope.account.getAssociatedTokenAccount(n,i),ce=null,ke=o.equals(Tn);w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,$,this.scope.ownerPubKey,n,i)]});let{account:de,instructionParams:ye}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:ke?{payer:this.scope.ownerPubKey,amount:R.amountB}:void 0,skipCloseAccount:!ke,notUseTokenAccount:ke,associatedOnly:ke?!1:k,checkCreateATAOwner:I});de&&(ce=de),w.addInstruction(ye||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Ae=P?ee(P,o,Qe).publicKey:void 0;return Ae&&w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,Ae,P,o)]}),w.addInstruction({instructions:[Il(e,this.scope.ownerPubKey,t,S.configId,S.platformId,x,$,ce,S.vaultA,S.vaultB,n,o,i,Qe,li(e,S.platformId,o).publicKey,Ni(e,S.creator,o).publicKey,b,Q,g,Ae)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:Q,outAmount:b}})}async sellToken({programId:e=mt,authProgramId:t,mintAProgram:n=Qe,mintA:i,mintB:o=Tn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:b,shareFeeRate:y=new ae(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:k=!1,skipCheckMintA:I=!1}){t=t!=null?t:dn(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ae(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=Li(e,i,o),x;if(!I){let ne=await this.scope.connection.getAccountInfo(i);if(ne&&ne.owner.equals(mi)){n=ne.owner;let Ve=ns(i,ne,n);x=ts(Ve)||void 0}}let S=null,K=null,T=o.equals(Tn),{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:k});C&&(S=C),h.addInstruction(_||{}),S===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:M,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:P,checkCreateATAOwner:k});M&&(K=M),h.addInstruction(R||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let ne=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",w.toBase58()),L=rn.decode(ne.data)}let F=a,Q=await Oe(this.scope.connection,[F?void 0:L.configId,L.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!F){let ne=Q.find(Ve=>Ve.pubkey.equals(L.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),F=Dn.decode(ne.accountInfo.data)}let $=Q.find(ne=>ne.pubkey.equals(L.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let ce=Oi.decode($.accountInfo.data);c=c||ce.feeRate;let ke=zt.sellExactIn({poolInfo:L,amountA:p,protocolFeeRate:F.tradeFeeRate,platformFeeRate:c,curveType:F.curveType,shareFeeRate:y,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),de=new O(ke.amountB.toString()),ye=b?new O(qn.sub(b).toNumber()/qn.toNumber()).clampedTo(0,1):new O(1),Ae=f!=null?f:b?new ae(de.mul(ye).toFixed(0)):ke.amountB;Ae.lte(new ae(0))&&this.logAndCreateError(`out ${o.toBase58()} amount should be gt 0`);let fe=g?ee(g,o,Qe).publicKey:void 0;return fe&&h.addInstruction({instructions:[Qt(this.scope.ownerPubKey,fe,g,o)]}),h.addInstruction({instructions:[Bl(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,S,K,L.vaultA,L.vaultB,i,o,n,Qe,li(e,L.platformId,o).publicKey,Ni(e,L.creator,o).publicKey,ke.amountA.amount.lt(p)?ke.amountA.amount:p,Ae,y,fe)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:Ae}})}async sellTokenExactOut({programId:e=mt,authProgramId:t,mintAProgram:n=Qe,mintA:i,mintB:o=Tn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:b,shareFeeRate:y=new ae(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:k=!1,skipCheckMintA:I=!1}){t=t!=null?t:dn(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ae(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=Li(e,i,o),x;if(!I){let ne=await this.scope.connection.getAccountInfo(i);if(ne&&ne.owner.equals(mi)){n=ne.owner;let Ve=ns(i,ne,n);x=ts(Ve)||void 0}}let S=null,K=null,T=o.equals(Tn),{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:k});C&&(S=C),h.addInstruction(_||{}),S===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:M,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:P,checkCreateATAOwner:k});M&&(K=M),h.addInstruction(R||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let ne=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",w.toBase58()),L=rn.decode(ne.data)}let F=a,Q=await Oe(this.scope.connection,[F?void 0:L.configId,L.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!F){let ne=Q.find(Ve=>Ve.pubkey.equals(L.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),F=Dn.decode(ne.accountInfo.data)}let $=Q.find(ne=>ne.pubkey.equals(L.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let ce=Oi.decode($.accountInfo.data);c=c||ce.feeRate;let ke=zt.sellExactOut({poolInfo:L,amountB:p,protocolFeeRate:F.tradeFeeRate,platformFeeRate:c,curveType:F.curveType,shareFeeRate:y,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),de=new O(ke.amountA.amount.toString()),ye=b?new O(qn.add(b).toNumber()/qn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new O(1),Ae=(f!=null?f:b)?new ae(de.mul(ye).toFixed(0)):ke.amountA.amount,fe=g?ee(g,o,Qe).publicKey:void 0;return fe&&h.addInstruction({instructions:[Qt(this.scope.ownerPubKey,fe,g,o)]}),h.addInstruction({instructions:[Sl(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,S,K,L.vaultA,L.vaultB,i,o,n,Qe,li(e,L.platformId,o).publicKey,Ni(e,L.creator,o).publicKey,p,Ae,y,fe)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:Ae}})}async createPlatformConfig({programId:e=mt,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:b,feePayer:y}){let g=this.createTxBuilder(y),{publicKey:P}=Oa(e,t);return g.addInstruction({instructions:[xl(e,t,n,i,P,o,a,s,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(b),g.versionBuild({txVersion:p,extInfo:{platformId:P}})}async updatePlatformConfig({programId:e=mt,platformAdmin:t,platformId:n,updateInfo:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Oa(e,t).publicKey;return u.addInstruction({instructions:[Kl(e,t,l,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimPlatformFee({programId:e=mt,authProgramId:t,platformId:n,poolId:i,platformClaimFeeWallet:o,mintB:s,vaultB:a,mintBProgram:c=Qe,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:dn(e).publicKey;let f=s,b=a;if(!f){let P=await this.scope.connection.getAccountInfo(i,{commitment:"processed"});P||this.logAndCreateError("cannot found pool:",i.toBase58());let k=rn.decode(P.data),I=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});I||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Dn.decode(I.data).mintB,b=b!=null?b:k.vaultB}(!f||!b)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=b==null?void 0:b.toBase58())!=null?g:"");let y=ee(this.scope.ownerPubKey,f,Qe).publicKey;return p.addInstruction({instructions:[Qt(this.scope.ownerPubKey,y,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Ea(e,o,t,i,n,b,y,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=mt,authProgramId:t,platformId:n,platformClaimFeeWallet:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:dn(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:rn.span},{memcmp:{offset:rn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=rn.decode(m.account.data);if(d.platformFee.lte(new ae(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Qe).publicKey;u.addInstruction({instructions:[Qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Ea(e,i,t,m.pubkey,n,d.vaultB,p,d.mintB,Qe)]})}),u.addTipInstruction(a),o===0?u.sizeCheckBuildV0({computeBudgetConfig:s}):u.sizeCheckBuild({computeBudgetConfig:s})}async createVesting({programId:e=mt,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=Mo(e,t,n).publicKey;return u.addInstruction({instructions:[Fa(e,this.scope.ownerPubKey,n,t,m,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async createMultipleVesting({programId:e=mt,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=Mo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Fa(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),i===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}async claimVesting({programId:e=mt,poolId:t,poolInfo:n,vestingRecord:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=dn(e).publicKey,m=i||Mo(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=rn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Qe).publicKey;return u.addInstruction({instructions:[Qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[_a(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Qe)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimMultiVesting({programId:e=mt,poolIdList:t,poolsInfo:n={},vestingRecords:i={},txVersion:o,computeBudgetConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=v({},n),l=dn(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=v(v({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let b=i[p]||Mo(e,d,this.scope.ownerPubKey).publicKey,y=ee(this.scope.ownerPubKey,f.mintA,Qe).publicKey;c.addInstruction({instructions:[Qt(this.scope.ownerPubKey,y,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[_a(e,this.scope.ownerPubKey,l,d,b,y,f.vaultA,f.mintA,Qe)]})}),o===0?c.sizeCheckBuildV0({computeBudgetConfig:s}):c.sizeCheckBuild({computeBudgetConfig:s})}async claimVaultPlatformFee({programId:e=mt,platformId:t,mintB:n,mintBProgram:i=Qe,claimFeeWallet:o,txVersion:s,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=li(e,t,n).publicKey,d=Ma(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,i);return l.addInstruction({instructions:[Qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,i),Va(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=mt,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 y,g;let d=Ma(e).publicKey,p=li(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Tn)&&n,b=l[m.mintB.toBase58()];if(!b){let{account:P,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});P&&(b=P),u.addInstruction(k||{}),b===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Va(e,m.id,(y=m.claimFeeWallet)!=null?y:this.scope.ownerPubKey,p,d,b,m.mintB,(g=m.mintBProgram)!=null?g:Qe)]})}),i===0?u.sizeCheckBuildV0({computeBudgetConfig:o}):u.sizeCheckBuild({computeBudgetConfig:o})}async claimCreatorFee({programId:e=mt,mintB:t,mintBProgram:n=Qe,txVersion:i,computeBudgetConfig:o,txTipConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=Ni(e,this.scope.ownerPubKey,t).publicKey,l=wl(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Qt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Cl(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(o),c.addTipInstruction(s),c.versionBuild({txVersion: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=rn.decode(u.accountInfo.data);i[e[c].toBase58()]=q(v({},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=Dn.decode(u.accountInfo.data);a[o[c].toBase58()]=q(v({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(i).reduce((c,u)=>q(v({},c),{[u]:q(v({},i[u]),{configInfo:a[i[u].configId.toBase58()]})}),{})}}};import{PublicKey as Of}from"@solana/web3.js";import{MintLayout as Mf,TOKEN_2022_PROGRAM_ID as Da,TOKEN_PROGRAM_ID as Wa}from"@solana/spl-token";var Eo=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(Cn.address,Cn),this._mintGroup.official.add(Cn.address),o.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(v({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Da.toBase58():Wa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(v({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Da.toBase58():Wa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(v({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Da.toBase58():Wa.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 Cn;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(v({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Of(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Mf.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 is=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 $t(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=o,this._apiCacheTime=c||5*60*1e3,this.logger=Pe("Raydium"),this.farm=new ao({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ji({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new To({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Eo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Bo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ro({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Ut({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new xi({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Ri({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Fo({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=vf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,c=new pr({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),u=new is(q(v({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(fr);return this._owner.publicKey}setOwner(e){return this._owner=e?new $t(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(vu);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(fr),new Error(fr)}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(v({},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{is as Raydium};
|
|
1
|
+
var Ol=Object.defineProperty,Ml=Object.defineProperties;var vl=Object.getOwnPropertyDescriptors;var Do=Object.getOwnPropertySymbols;var Qa=Object.prototype.hasOwnProperty,Ha=Object.prototype.propertyIsEnumerable;var za=(r,e,t)=>e in r?Ol(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,_=(r,e)=>{for(var t in e||(e={}))Qa.call(e,t)&&za(r,t,e[t]);if(Do)for(var t of Do(e))Ha.call(e,t)&&za(r,t,e[t]);return r},q=(r,e)=>Ml(r,vl(e));var Ue=(r,e)=>{var t={};for(var n in r)Qa.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Do)for(var n of Do(r))e.indexOf(n)<0&&Ha.call(r,n)&&(t[n]=r[n]);return t};import{merge as vf}from"lodash";import Mu from"axios";import{PublicKey as Za}from"@solana/web3.js";import{get as ja,set as _l}from"lodash";var os=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}},Ya={},Fl={};function Pe(r){let e=ja(Ya,r);if(!e){let t=ja(Fl,r);e=new os({name:r,logLevel:t}),_l(Ya,r,e)}return e}import{MINT_SIZE as El,TOKEN_PROGRAM_ID as Vl,getTransferFeeConfig as Dl,unpackMint as Wl}from"@solana/spl-token";var rs=Pe("Raydium_accountInfo_util");async function Ht(r,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:o=100}=_({batchRequest:!1},t),s=ss(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=ss(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&rs.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:b,owner:y,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&rs.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:b,owner:new Za(y),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&rs.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Oe(r,e,t){let n=await Ht(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>q(_({},i),{accountInfo:n[o]}))}async function pi({connection:r,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await Oe(r,e.map(c=>({pubkey:pt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<El){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Wl(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)||Vl,feeConfig:(a=Dl(u))!=null?a:void 0})}return i[Za.default.toBase58()]=i[Y.toBase58()],i}import un from"bn.js";var fi=9e15,Kn=1e9,as="0123456789abcdef",qo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Uo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",us={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-fi,maxE:fi,crypto:!1},tu,fn,pe=!0,Xo="[DecimalError] ",xn=Xo+"Invalid argument: ",nu=Xo+"Precision limit exceeded",iu=Xo+"crypto unavailable",ou="[object Decimal]",ft=Math.floor,tt=Math.pow,ql=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Ul=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Gl=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ru=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Yt=1e7,re=7,Xl=9007199254740991,zl=qo.length-1,cs=Uo.length-1,U={toStringTag:ou};U.absoluteValue=U.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),te(r)};U.ceil=function(){return te(new this.constructor(this),this.e+1,2)};U.clampedTo=U.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(xn+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};U.comparedTo=U.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};U.cosine=U.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())+re,n.rounding=1,t=Ql(n,lu(n,t)),n.precision=r,n.rounding=e,te(fn==2||fn==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};U.cubeRoot=U.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(pe=!1,o=l.s*tt(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=ut(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=tt(t,1/3),r=ft((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),ut(a.d).slice(0,s)===(t=ut(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(te(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")&&(te(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return pe=!0,te(n,r,m.rounding,e)};U.decimalPlaces=U.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-ft(this.e/re))*re,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};U.dividedBy=U.div=function(r){return Ne(this,new this.constructor(r))};U.dividedToIntegerBy=U.divToInt=function(r){var e=this,t=e.constructor;return te(Ne(e,new t(r),0,1,1),t.precision,t.rounding)};U.equals=U.eq=function(r){return this.cmp(r)===0};U.floor=function(){return te(new this.constructor(this),this.e+1,3)};U.greaterThan=U.gt=function(r){return this.cmp(r)>0};U.greaterThanOrEqualTo=U.gte=function(r){var e=this.cmp(r);return e==1||e===0};U.hyperbolicCosine=U.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/Qo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=bi(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 te(o,s.precision=t,s.rounding=n,!0)};U.hyperbolicSine=U.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=bi(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/Qo(5,r)),i=bi(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,te(i,e,t,!0)};U.hyperbolicTangent=U.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)};U.inverseCosine=U.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))};U.inverseHyperbolicCosine=U.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,pe=!1,t=t.times(t).minus(1).sqrt().plus(t),pe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};U.inverseHyperbolicSine=U.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,pe=!1,t=t.times(t).plus(1).sqrt().plus(t),pe=!0,n.precision=r,n.rounding=e,t.ln())};U.inverseHyperbolicTangent=U.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?te(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)};U.inverseSine=U.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)))};U.inverseTangent=U.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<=cs)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<=cs)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/re+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(pe=!1,e=Math.ceil(a/re),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)),pe=!0,te(s,l.precision=m,l.rounding=d,!0)};U.isFinite=function(){return!!this.d};U.isInteger=U.isInt=function(){return!!this.d&&ft(this.e/re)>this.d.length-2};U.isNaN=function(){return!this.s};U.isNegative=U.isNeg=function(){return this.s<0};U.isPositive=U.isPos=function(){return this.s>0};U.isZero=function(){return!!this.d&&this.d[0]===0};U.lessThan=U.lt=function(r){return this.cmp(r)<0};U.lessThanOrEqualTo=U.lte=function(r){return this.cmp(r)<1};U.logarithm=U.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(pe=!1,a=m+p,s=Sn(u,a),n=e?Go(l,a+10):Sn(r,a),c=Ne(s,n,a,1),Di(c.d,i=m,d))do if(a+=10,s=Sn(u,a),n=e?Go(l,a+10):Sn(r,a),c=Ne(s,n,a,1),!o){+ut(c.d).slice(i+1,i+15)+1==1e14&&(c=te(c,m+1,0));break}while(Di(c.d,i+=10,d));return pe=!0,te(c,m,d)};U.minus=U.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 pe?te(r,a,c):r}if(t=ft(r.e/re),l=ft(p.e/re),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/re),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]=Yt-1;--u[i],u[n]+=Yt}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=zo(u,t),pe?te(r,a,c):r):new f(c===3?-0:0)};U.modulo=U.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]?te(new n(t),n.precision,n.rounding):(pe=!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),pe=!0,t.minus(e))};U.naturalExponential=U.exp=function(){return ls(this)};U.naturalLogarithm=U.ln=function(){return Sn(this)};U.negated=U.neg=function(){var r=new this.constructor(this);return r.s=-r.s,te(r)};U.plus=U.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)),pe?te(r,a,c):r;if(o=ft(m.e/re),n=ft(r.e/re),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/re),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)/Yt|0,u[i]%=Yt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=zo(u,n),pe?te(r,a,c):r};U.precision=U.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(xn+r);return t.d?(e=su(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};U.round=function(){var r=this,e=r.constructor;return te(new e(r),r.e+1,e.rounding)};U.sine=U.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())+re,n.rounding=1,t=jl(n,lu(n,t)),n.precision=r,n.rounding=e,te(fn>2?t.neg():t,r,e,!0)):new n(NaN)};U.squareRoot=U.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(pe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=ut(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=ft((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),ut(o.d).slice(0,t)===(e=ut(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(te(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")&&(te(n,c+1,1),r=!n.times(n).eq(s));break}return pe=!0,te(n,c,l.rounding,r)};U.tangent=U.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,te(fn==2||fn==4?t.neg():t,r,e,!0)):new n(NaN)};U.times=U.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=ft(l.e/re)+ft(r.e/re),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%Yt|0,e=a/Yt|0;o[i]=(o[i]+e)%Yt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=zo(o,t),pe?te(r,m.precision,m.rounding):r};U.toBinary=function(r,e){return ds(this,2,r,e)};U.toDecimalPlaces=U.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(Tt(r,0,Kn),e===void 0?e=n.rounding:Tt(e,0,8),te(t,r+t.e+1,e))};U.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=an(n,!0):(Tt(r,0,Kn),e===void 0?e=i.rounding:Tt(e,0,8),n=te(new i(n),r+1,e),t=an(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};U.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=an(i):(Tt(r,0,Kn),e===void 0?e=o.rounding:Tt(e,0,8),n=te(new o(i),r+i.e+1,e),t=an(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};U.toFraction=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.d,b=p.constructor;if(!f)return new b(p);if(u=t=new b(1),n=c=new b(0),e=new b(n),o=e.e=su(f)-p.e-1,s=o%re,e.d[0]=tt(10,s<0?re+s:s),r==null)r=o>0?e:u;else{if(a=new b(r),!a.isInt()||a.lt(u))throw Error(xn+a);r=a.gt(e)?o>0?e:u:a}for(pe=!1,a=new b(ut(f)),l=b.precision,b.precision=o=f.length*re*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],b.precision=l,pe=!0,d};U.toHexadecimal=U.toHex=function(r,e){return ds(this,16,r,e)};U.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:Tt(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]?(pe=!1,t=Ne(t,r,0,e,1).times(r),pe=!0,te(t)):(r.s=t.s,t=r),t};U.toNumber=function(){return+this};U.toOctal=function(r,e){return ds(this,8,r,e)};U.toPower=U.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(tt(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,o=c.rounding,r.eq(1))return te(a,n,o);if(e=ft(r.e/re),e>=r.d.length-1&&(t=u<0?-u:u)<=Xl)return i=au(c,a,t,n),r.s<0?new c(1).div(i):te(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=tt(+a,u),e=t==0||!isFinite(t)?ft(u*(Math.log("0."+ut(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):(pe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=ls(r.times(Sn(a,n+t)),n),i.d&&(i=te(i,n+5,1),Di(i.d,n,o)&&(e=n+10,i=te(ls(r.times(Sn(a,e+t)),e),e+5,1),+ut(i.d).slice(n+1,n+15)+1==1e14&&(i=te(i,n+1,0)))),i.s=s,pe=!0,c.rounding=o,te(i,n,o))};U.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=an(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(Tt(r,1,Kn),e===void 0?e=i.rounding:Tt(e,0,8),n=te(new i(n),r,e),t=an(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};U.toSignificantDigits=U.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(Tt(r,1,Kn),e===void 0?e=n.rounding:Tt(e,0,8)),te(new n(t),r,e)};U.toString=function(){var r=this,e=r.constructor,t=an(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};U.truncated=U.trunc=function(){return te(new this.constructor(this),this.e+1,1)};U.valueOf=U.toJSON=function(){var r=this,e=r.constructor,t=an(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function ut(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=re-n.length,t&&(o+=Bn(t)),o+=n;s=r[e],n=s+"",t=re-n.length,t&&(o+=Bn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function Tt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(xn+r)}function Di(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=re,i=0):(i=Math.ceil((e+1)/re),e%=re),o=tt(10,re-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)==tt(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)==tt(10,e-3)-1,s}function Wo(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]+=as.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 Ql(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Qo(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=bi(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,b,y,g,P,k,I,h,w,x,S,K,T,C,M,v=n.constructor,R=n.s==i.s?1:-1,L=n.d,F=i.d;if(!L||!L[0]||!F||!F[0])return new v(!n.s||!i.s||(L?F&&L[0]==F[0]:!F)?NaN:L&&L[0]==0||!F?R*0:R/0);for(c?(p=1,l=n.e-i.e):(c=Yt,p=re,l=ft(n.e/p)-ft(i.e/p)),C=F.length,K=L.length,g=new v(R),P=g.d=[],m=0;F[m]==(L[m]||0);m++);if(F[m]>(L[m]||0)&&l--,o==null?(w=o=v.precision,s=v.rounding):a?w=o+(n.e-i.e)+1:w=o,w<0)P.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,F=F[0],w++;(m<K||d)&&w--;m++)x=d*c+(L[m]||0),P[m]=x/F|0,d=x%F|0;f=d||m<K}else{for(d=c/(F[0]+1)|0,d>1&&(F=r(F,d,c),L=r(L,d,c),C=F.length,K=L.length),S=C,k=L.slice(0,C),I=k.length;I<C;)k[I++]=0;M=F.slice(),M.unshift(0),T=F[0],F[1]>=c/2&&++T;do d=0,u=e(F,k,C,I),u<0?(h=k[0],C!=I&&(h=h*c+(k[1]||0)),d=h/T|0,d>1?(d>=c&&(d=c-1),b=r(F,d,c),y=b.length,I=k.length,u=e(b,k,y,I),u==1&&(d--,t(b,C<y?M:F,y,c))):(d==0&&(u=d=1),b=F.slice()),y=b.length,y<I&&b.unshift(0),t(k,b,I,c),u==-1&&(I=k.length,u=e(F,k,C,I),u<1&&(d++,t(k,C<I?M:F,I,c))),I=k.length):u===0&&(d++,k=[0]),P[m++]=d,u&&k[0]?k[I++]=L[S]||0:(k=[L[S]],I=1);while((S++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,tu=f;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,te(g,a?o+g.e+1:o,s,f)}return g}}();function te(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+=re,s=e,l=m[d=0],c=l/tt(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/re),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,o%=re,s=o-re+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=re,s=o-re+i,c=s<0?0:l/tt(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%tt(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/tt(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]=tt(10,(re-e%re)%re),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=tt(10,re-o),m[d]=s>0?(l/tt(10,i-s)%tt(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]==Yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Yt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return pe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function an(r,e,t){if(!r.isFinite())return cu(r);var n,i=r.e,o=ut(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Bn(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+Bn(-i-1)+o,t&&(n=t-s)>0&&(o+=Bn(n))):i>=s?(o+=Bn(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+Bn(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=Bn(n))),o}function zo(r,e){var t=r[0];for(e*=re;t>=10;t/=10)e++;return e}function Go(r,e,t){if(e>zl)throw pe=!0,t&&(r.precision=t),Error(nu);return te(new r(qo),e,1,!0)}function jt(r,e,t){if(e>cs)throw Error(nu);return te(new r(Uo),e,t,!0)}function su(r){var e=r.length-1,t=e*re+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 Bn(r){for(var e="";r--;)e+="0";return e}function au(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/re+4);for(pe=!1;;){if(t%2&&(o=o.times(e),Ja(o.d,s)&&(i=!0)),t=ft(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),Ja(e.d,s)}return pe=!0,o}function $a(r){return r.d[r.d.length-1]&1}function uu(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 ls(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?(pe=!1,c=f):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(tt(2,m))/Math.LN10*2+5|0,c+=n,t=o=s=new d(1),d.precision=c;;){if(o=te(o.times(r),c,1),t=t.times(++l),a=s.plus(Ne(o,t,c,1)),ut(a.d).slice(0,c)===ut(s.d).slice(0,c)){for(i=m;i--;)s=te(s.times(s),c,1);if(e==null)if(u<3&&Di(s.d,c-n,p,u))d.precision=c+=10,t=o=a=new d(1),l=0,u++;else return te(s,d.precision=f,p,pe=!0);else return d.precision=f,s}s=a}}function Sn(r,e){var t,n,i,o,s,a,c,u,l,m,d,p=1,f=10,b=r,y=b.d,g=b.constructor,P=g.rounding,k=g.precision;if(b.s<0||!y||!y[0]||!b.e&&y[0]==1&&y.length==1)return new g(y&&!y[0]?-1/0:b.s!=1?NaN:y?0:b);if(e==null?(pe=!1,l=k):l=e,g.precision=l+=f,t=ut(y),n=t.charAt(0),Math.abs(o=b.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)b=b.times(r),t=ut(b.d),n=t.charAt(0),p++;o=b.e,n>1?(b=new g("0."+t),o++):b=new g(n+"."+t.slice(1))}else return u=Go(g,l+2,k).times(o+""),b=Sn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?te(b,k,P,pe=!0):b;for(m=b,c=s=b=Ne(b.minus(1),b.plus(1),l,1),d=te(b.times(b),l,1),i=3;;){if(s=te(s.times(d),l,1),u=c.plus(Ne(s,new g(i),l,1)),ut(u.d).slice(0,l)===ut(c.d).slice(0,l))if(c=c.times(2),o!==0&&(c=c.plus(Go(g,l+2,k).times(o+""))),c=Ne(c,new g(p),l,1),e==null)if(Di(c.d,l-f,P,a))g.precision=l+=f,u=s=b=Ne(m.minus(1),m.plus(1),l,1),d=te(b.times(b),l,1),i=a=1;else return te(c,g.precision=k,P,pe=!0);else return g.precision=k,c;c=u,i+=2}}function cu(r){return String(r.s*r.s/0)}function ms(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)%re,t<0&&(n+=re),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=re;n<i;)r.d.push(+e.slice(n,n+=re));e=e.slice(n),n=re-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),pe&&(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 Hl(r,e){var t,n,i,o,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ru.test(e))return ms(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(Ul.test(e))t=16,e=e.toLowerCase();else if(ql.test(e))t=2;else if(Gl.test(e))t=8;else throw Error(xn+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=au(n,new n(t),o,o*2)),u=Wo(e,t,Yt),l=u.length-1,o=l;u[o]===0;--o)u.pop();return o<0?new n(r.s*0):(r.e=zo(u,l),r.d=u,pe=!1,s&&(r=Ne(r,i,a*4)),c&&(r=r.times(Math.abs(c)<54?tt(2,c):Wi.pow(2,c))),pe=!0,r)}function jl(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:bi(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Qo(5,t)),e=bi(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 bi(r,e,t,n,i){var o,s,a,c,u=1,l=r.precision,m=Math.ceil(l/re);for(pe=!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 pe=!0,s.d.length=m+1,s}function Qo(r,e){for(var t=r;--e;)t*=r;return t}function lu(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 fn=n?4:1,e;if(t=e.divToInt(i),t.isZero())fn=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return fn=$a(t)?n?2:3:n?4:1,e;fn=$a(t)?n?1:4:n?3:2}return e.minus(i).abs()}function ds(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor,f=t!==void 0;if(f?(Tt(t,1,Kn),n===void 0?n=p.rounding:Tt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=cu(r);else{for(l=an(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=Wo(an(d),10,i),d.e=d.d.length),m=Wo(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=tu),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+=as.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=Wo(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=as.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 Ja(r,e){if(r.length>e)return r.length=e,!0}function Yl(r){return new this(r).abs()}function Zl(r){return new this(r).acos()}function $l(r){return new this(r).acosh()}function Jl(r,e){return new this(r).plus(e)}function em(r){return new this(r).asin()}function tm(r){return new this(r).asinh()}function nm(r){return new this(r).atan()}function im(r){return new this(r).atanh()}function om(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 rm(r){return new this(r).cbrt()}function sm(r){return te(r=new this(r),r.e+1,2)}function am(r,e,t){return new this(r).clamp(e,t)}function um(r){if(!r||typeof r!="object")throw Error(Xo+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Kn,"rounding",0,8,"toExpNeg",-fi,0,"toExpPos",0,fi,"maxE",0,fi,"minE",-fi,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=us[t]),(n=r[t])!==void 0)if(ft(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(xn+t+": "+n);if(t="crypto",i&&(this[t]=us[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(iu);else this[t]=!1;else throw Error(xn+t+": "+n);return this}function cm(r){return new this(r).cos()}function lm(r){return new this(r).cosh()}function mu(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,eu(o)){u.s=o.s,pe?!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++;pe?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 ms(u,o.toString())}else if(c!=="string")throw Error(xn+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),ru.test(o)?ms(u,o):Hl(u,o)}if(i.prototype=U,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=um,i.clone=mu,i.isDecimal=eu,i.abs=Yl,i.acos=Zl,i.acosh=$l,i.add=Jl,i.asin=em,i.asinh=tm,i.atan=nm,i.atanh=im,i.atan2=om,i.cbrt=rm,i.ceil=sm,i.clamp=am,i.cos=cm,i.cosh=lm,i.div=mm,i.exp=dm,i.floor=pm,i.hypot=fm,i.ln=bm,i.log=ym,i.log10=Am,i.log2=gm,i.max=Pm,i.min=wm,i.mod=km,i.mul=hm,i.pow=Tm,i.random=Im,i.round=Bm,i.sign=Sm,i.sin=xm,i.sinh=Km,i.sqrt=Cm,i.sub=Rm,i.sum=Lm,i.tan=Nm,i.tanh=Om,i.trunc=Mm,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 mm(r,e){return new this(r).div(e)}function dm(r){return new this(r).exp()}function pm(r){return te(r=new this(r),r.e+1,3)}function fm(){var r,e,t=new this(0);for(pe=!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 pe=!0,new this(1/0);t=e}return pe=!0,t.sqrt()}function eu(r){return r instanceof Wi||r&&r.toStringTag===ou||!1}function bm(r){return new this(r).ln()}function ym(r,e){return new this(r).log(e)}function gm(r){return new this(r).log(2)}function Am(r){return new this(r).log(10)}function Pm(){return uu(this,arguments,"lt")}function wm(){return uu(this,arguments,"gt")}function km(r,e){return new this(r).mod(e)}function hm(r,e){return new this(r).mul(e)}function Tm(r,e){return new this(r).pow(e)}function Im(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:Tt(r,1,Kn),n=Math.ceil(r/re),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(iu);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=re,n&&r&&(i=tt(10,re-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-=re)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<re&&(t-=re-n)}return s.e=t,s.d=a,s}function Bm(r){return te(r=new this(r),r.e+1,this.rounding)}function Sm(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function xm(r){return new this(r).sin()}function Km(r){return new this(r).sinh()}function Cm(r){return new this(r).sqrt()}function Rm(r,e){return new this(r).sub(e)}function Lm(){var r=0,e=arguments,t=new this(e[r]);for(pe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return pe=!0,te(t,this.precision,this.rounding)}function Nm(r){return new this(r).tan()}function Om(r){return new this(r).tanh()}function Mm(r){return te(r=new this(r),r.e+1,1)}U[Symbol.for("nodejs.util.inspect.custom")]=U.toString;U[Symbol.toStringTag]="Decimal";var Wi=U.constructor=mu(us);qo=new Wi(qo);Uo=new Wi(Uo);var O=Wi;import qm from"big.js";import Yo from"bn.js";import vm from"toformat";var _m=vm,qi=_m;import jo from"big.js";import Em from"bn.js";import Vm from"decimal.js-light";import Ui from"bn.js";var du=9007199254740991;function J(r){let e=Pe("Raydium_parseBigNumberish");if(r instanceof Ui)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new Ui(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=du||r<=-du)&&e.logWithError(`BigNumberish number overflow: ${r}`),new Ui(String(r))):typeof r=="bigint"?new Ui(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new Ui(0))}var Ho=Pe("module/fraction"),ps=qi(jo),Gi=qi(Vm),Dm={[0]:Gi.ROUND_DOWN,[1]:Gi.ROUND_HALF_UP,[2]:Gi.ROUND_UP},Wm={[0]:jo.roundDown,[1]:jo.roundHalfUp,[2]:jo.roundUp},Be=class{constructor(e,t=new Em(1)){this.numerator=J(e),this.denominator=J(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Be(this.denominator,this.numerator)}add(e){let t=e instanceof Be?e:new Be(J(e));return this.denominator.eq(t.denominator)?new Be(this.numerator.add(t.numerator),this.denominator):new Be(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Be?e:new Be(J(e));return this.denominator.eq(t.denominator)?new Be(this.numerator.sub(t.numerator),this.denominator):new Be(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Be?e:new Be(J(e));return new Be(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Be?e:new Be(J(e));return new Be(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<=0&&Ho.logWithError(`${e} is not positive.`),Gi.set({precision:e+1,rounding:Dm[n]});let i=new Gi(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)||Ho.logWithError(`${e} is not an integer.`),e<0&&Ho.logWithError(`${e} is negative.`),ps.DP=e,ps.RM=Wm[n]||1,new ps(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Um=Pe("Raydium_amount"),pu=qi(qm);function Gm(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")):Um.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var Ke=class extends Be{constructor(t,n,i=!0,o){let s=new Yo(0),a=fs.pow(new Yo(t.decimals));if(i)s=J(n);else{let c=new Yo(0),u=new Yo(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Gm(n.toString(),t.decimals);c=J(l),u=J(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=Pe(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 pu.DP=this.token.decimals,new pu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as Xm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as fu}from"@solana/spl-token";var Cn={chainId:101,address:Xm.default.toBase58(),programId:fu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},bt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:fu.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Ps}from"@solana/web3.js";import{PublicKey as De,SystemProgram as bu,SYSVAR_RENT_PUBKEY as zm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qm}from"@solana/spl-token";function B({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var bs=[B({pubkey:Qm,isWritable:!1}),B({pubkey:bu.programId,isWritable:!1}),B({pubkey:zm,isWritable:!1})];function ys({publicKey:r,transformSol:e}){let t=gs(r.toString());if(t instanceof De)return e&&t.equals(ot)?Y:t;if(e&&t.toString()===ot.toBase58())return Y;if(typeof t=="string"){if(t===De.default.toBase58())return De.default;try{return new De(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function gs(r){try{return new De(r)}catch{return r}}var Zo=new De("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Rn=new De("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ct=new De("SysvarRent111111111111111111111111111111111"),yu=new De("SysvarC1ock11111111111111111111111111111111"),Zt=new De("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Hm=new De("Sysvar1nstructions1111111111111111111111111"),As=bu.programId,Ib=new De("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Bb=new De("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Sb=new De("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),xb=new De("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Kb=new De("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Cb=new De("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Rb=new De("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Lb=new De("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Nb=new De("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Ob=new De("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Mb=new De("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Y=new De("So11111111111111111111111111111111111111112"),ot=De.default;function pt(r){return ys({publicKey:r,transformSol:!0})}var ws=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===ot.toBase58()||e instanceof Ps&&ot.equals(e)){this.decimals=bt.decimals,this.symbol=bt.symbol,this.name=bt.name,this.mint=new Ps(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?Ps.default:ys({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},We=ws;We.WSOL=new ws(q(_({},bt),{mint:bt.address}));var ks=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},$o=ks;$o.SOL=new ks(Cn);import jm from"bn.js";var gu=new Be(new jm(100)),rt=class extends Be{toSignificant(e=5,t,n){return this.mul(gu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(gu).toFixed(e,t,n)}};var Ym=Pe("Raydium_price"),It=class extends Be{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new Be(hs(n.decimals),hs(i.decimals))}get raw(){return new Be(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new It({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ym.logWithError("mul token not equals");let n=super.mul(t);return new It({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 Zm}from"@solana/web3.js";import $m from"bn.js";function Au(r){return typeof r=="object"&&r!==null&&![We,Ke,Zm,Be,$m,It,rt].some(e=>typeof e=="object"&&r instanceof e)}function lt(r){return typeof r=="string"?gs(r):Array.isArray(r)?r.map(e=>lt(e)):Au(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,lt(t)])):r}var Bt=new un(0),Pu=new un(1),Cy=new un(2),Ry=new un(3),Ly=new un(5),fs=new un(10),Ny=new un(100),Oy=new un(1e3),My=new un(1e4);function hs(r){return fs.pow(J(r))}function Jo(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 er(r,e,t){return r.mul(e).add(t).sub(new un(1)).div(t)}function Ts(r,e,t){return r.mul(e).div(t)}function ss(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var $t=class{constructor(e){this._owner=e}get publicKey(){return $t.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return $t.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return $t.isKeyPair(this._owner)}get isPublicKey(){return $t.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!$t.isKeyPair(e)}};import{PublicKey as od}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rd}from"@solana/spl-token";import{ComputeBudgetProgram as wu,Keypair as hu,PublicKey as Jm,Transaction as Tu,TransactionMessage as ed,VersionedTransaction as Iu}from"@solana/web3.js";var G={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 td}from"@solana/spl-token";var ku=Pe("Raydium_txUtil"),Bu=1644;function tr(r){let e=[],t=[];return r.microLamports&&(e.push(wu.setComputeUnitPrice({microLamports:r.microLamports})),t.push(G.SetComputeUnitPrice)),r.units&&(e.push(wu.setComputeUnitLimit({units:r.units})),t.push(G.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function yi(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 nr(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 Is(r,e){r.length<1&&ku.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&ku.logWithError(`no signers provided:, ${e.toString()}`);let t=new Tu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Bu}catch{return!1}}function le(r,e){let[t,n]=Jm.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function Xi({instructions:r,payer:e,signers:t}){return Is(r,[e,...t])}function zi({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=hu.generate().publicKey.toString()}){let o=new ed({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Iu(o).serialize()).toString("base64").length<Bu}catch{return!1}}var nd=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),id=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof Iu&&(e=nd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Gn(r){let e=[];return r.forEach(t=>{t instanceof Tu&&(t.recentBlockhash||(t.recentBlockhash=td.toBase58()),t.feePayer||(t.feePayer=hu.generate().publicKey)),e.push(id(t))}),console.log("simulate tx string:",e),e}function ee(r,e,t){return le([r.toBuffer(),(t!=null?t:rd).toBuffer(),e.toBuffer()],new od("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var Su=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),xu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Ku=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Qi=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),tg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Cu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Bs=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ir=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),ng=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ru=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Xn=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Hi=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),or=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),zn=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ig=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Lu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),sd=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ad=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),ud=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),cd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),rr=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Nu=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),og=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ar=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),mt=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),rg=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),sg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),ag=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),ug=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),cg=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ji={IDO_PROGRAM_ID_V1:sd,IDO_PROGRAM_ID_V2:ad,IDO_PROGRAM_ID_V3:ud,IDO_PROGRAM_ID_V4:cd};var bn={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 ve from"bn.js";var cn=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 ve(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===cn){let c=new ve(o.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=Jt(r.mul(new ve(cn)),new ve(cn-o.transferFeeBasisPoints)),u=new ve(o.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=Jt(l.mul(new ve(o.transferFeeBasisPoints)),new ve(cn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Jt(r.mul(new ve(o.transferFeeBasisPoints)),new ve(cn)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function en(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function Jt(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new ve(0))?t.add(new ve(1)):t}function Qn(r,e){if(r.isZero())return new ve(0);let t=r.div(e);return t.isZero()?new ve(1):r.mod(e).gt(new ve(0))?t.add(new ve(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 ve(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Jt(r.mul(new ve(i.transferFeeBasisPoints)),new ve(cn)),c=a.gt(o)?o:a;return{amount:r,fee:c,expirationTime:s}}function xs(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 ve(i.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(i.transferFeeBasisPoints===cn){let a=new ve(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=Jt(r.mul(new ve(cn)),new ve(cn-i.transferFeeBasisPoints)),c=new ve(i.maximumFee.toString()),u=a.sub(r).gt(c)?r.add(c):a,l=Jt(u.mul(new ve(i.transferFeeBasisPoints)),new ve(cn)),m=l.gt(o)?o:l;return{amount:u,fee:m,expirationTime:s}}}import{PublicKey as Ks,AddressLookupTableAccount as Ai}from"@solana/web3.js";async function Cs({connection:r,address:e,cluster:t="mainnet"}){let n=await Ht(r,[...new Set(e.map(o=>o.toString()))].map(o=>new Ks(o))),i={};for(let o=0;o<e.length;o++){let s=n[o],a=e[o];if(!s)continue;let c=new Ai({key:a,state:Ai.deserialize(s.data)});i[a.toString()]=c,t==="devnet"?gi[a.toString()]=c:ur[a.toString()]=c}return i}var ur={AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU:new Ai({key:new Ks("AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU"),state:Ai.deserialize(Buffer.from("AQAAAP//////////I1rcEwAAAAAvAQYwun9CU6c5Ikm2pAj+D9IEnCOR45nK+SFTGSdpd6J6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpBt324e51j94YQl285GzN2rYa/E2DuQ0n/r35KNihi/wFSlNQ+F3IgtYUpVZyeIopbd8eq6vQpgZ4iEky9O72oAVKU1qZKSEGTSTocWDaOHx8NbXdvJK7geQfqEBBBUSNBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvBkX2T9y7AHdNGviJAqQNtlDUDCnauQRWybsLji6nPM8Qkw5asQRvCdB3MbX6IEBwytOrpM32l4jQygKG9TKgR0vZScQ2AsM/IHeQ7RajUkyhuZdc8SGiqQz/7H34torNR/Wir3sl0ruUrVxJWEZfUg+QLNAxxODdBi53/OP7Ioil1cqeBM9dtZC3FLov4yyxWRM/wcGStyJX/QfTnLBAHqkqWotPKVlShCVQqpP9W5W1rOao65IMk5QuQ2kMIOxzDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu/YsA/yfEEFGcr8Z57VKDw8uQzpiru7g4lvjnfapW62W030syevD8k07SGoxUHiuT/ai7gAHWWhDsVmg/C63ajgpkH7Sn3GdutArDTfyqOkdqv4/IPC/EFFy7mGkfDd2C57N5a/4jC+BbmJy7wQaSEZr0CQU88lPtUxIVvzGjC95b8Ooss2TqmkrayGKofkPMGQn7Ux+9lfwBSNfxwH8NgbpqC/7LNlV4I7nCvsXf3p+ohQk9NrAJb2KAFpUqEIJ9ZBV7BYDzHF/ORKYlgtvPnXjudZQ6CEo5OzUDaNIomTCCsvhD16TxJjsbgne1kGnQPCFSoaxUbq2V1bPMFQ3VYP6wDZ9bKStCFKx9A3tNbwZFC5ZGAN83MFK7XoTy+OmmcFEr6rLOjfSuTfPvHJkSVxW6Qllwkl67XcBi5v00u2gQsbu+38sp+rd5pA/LvyWj4P94ZGZwc1tE2P88xekCLcAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAn+HWRkdcPKyFFMnVwEoD7vnD0jCKFIU1sImubYCxNTSVzsKpaQX+fzNxrLAI3L14JQnJx/D6Uk2LADIHGqnGELzjEbkBDAlaM77NkXMPfqXNLSveCkWI7UEgNs31WEWB6XHSYI/v5DklHOb4QTtDOR804PVbi3fjloZeLR2F8d4FuZmMMO7ck3Fnkn2zEMG5gOmqsygb6PjTitArVl52NhcSznTxVnguaIJxiZkAnurDmn3MWR0PC2GLghp2KJqHCc6QQ85odeIjFHKOlRlJyeSXVJmL8vb1UgOzsbJPVP8p6zM4M3C1Sd7uWIHP33G42AP2Zg8ucn/n6meQjjD266JgCWdxZD6PXs9CsnIeL7SSG0/6lGb9xfP0ZcWkCXB/3hjxHYVXjra/GPOeXGk0fLLKjCbk+mgs2w6d2oCwimBipTzuoZ30GiI8ij8VRzD5CzMWtu2m21eDBIfjGAEo4pQeNNonKcqzV/cleX8ySZLOHsz8PtBCrLqF+VkLm9hOzIT+6i/nIf6keR4GWKMOD4AvqfpjHoD4DuhBpz8P28+DxkGrDXXr/nr20x291VPvcTU/b+b+o2kC9G0kcXeTlLjU6a2TQXWlZ4gBUdBl1jgT7mObSTpLblNiXZsLkbmVXZwvFKXua5cUKlWed/w30skmEUraTuQqtqr5fHZPW9n57EmeTif6LjHL2YJFZkQU+TrJmFzqzmF4/b8OwrPQAprl8mX3q4LUIdAS/a+11B6DWD1Xk2++Sn94dLC4xjkO4Wtlw8c4XuzciVbepHOmnoWzVu/0y3KCrLCSfQxQ3br8DJCoVzhgtPsS2nZZjsBGIZgnU0QpMv+2MnRsnKwdp1VsrCX84j/qvaZn4WhKunippgTbN2EUs0tPTP55Qfgj+nKmjtWW5IYs72FrEwJKYoNfsmqaF4o5pf4v9zgPwVwY/5I4XJKUL2L25m9kAQcW/K+H1RTFEUoj8Z4ajpOmAB/dG0COmCphVMW2CCMvnxhcGiSgPnpDuWu6qiJ7NG7ye5kvHgefgqPLeicspNJ5EpL3XiRNLM2tmJLI1awAwOyd6iHv0dCkMYRKaa6rcaZeYwmKCkckm0kM2JNmnmmAaBQQ7mwmIM0IMxX4f5W6j9PqZWcJxF7r17T/lQBAmcjoupRiJifbnXCNUv9GhpRF19WcBdeKbivRJVlGop6I2RS6lGImJ9udcI1S/0aGlEXX1ZwF14puK9ElWUainojZFYVHLHD6dIP2ESjqBzg3ol1/wB7+/ylGwd9LS7wSZ2A630CJSVKwH47K9P4bB8PEQP8BwjMFa7xQHOqZFP1XqaQ==","base64"))})},gi={},Rs=async r=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(gi[e])return gi;let t=new Ks(e),n=await r.getAccountInfo(t);return n&&(gi[e]=new Ai({key:t,state:Ai.deserialize(n.data)})),gi};import{PublicKey as Pi,sendAndConfirmTransaction as Ls,SystemProgram as ld,Transaction as Yi,TransactionMessage as Zi,VersionedTransaction as $i}from"@solana/web3.js";import md from"axios";var cr=2e3,lr=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 md.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}=tr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(ld.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Pi(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(G.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!==Pi.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 Yi;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 yi(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Gn([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Ls(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:b=!0}=l||{},y=f!=null?f:await yi(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],k=0;for(let I of s){if(++k,k<=p)continue;let h=await Ls(this.connection,I,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});P.push(h)}return{txIds:P,signedTxs:s}}return{txIds:await await Promise.all(s.map(async P=>(P.recentBlockhash=y,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:b})))),signedTxs:s}}if(this.signAllTransactions){let P=s.map((I,h)=>(I.recentBlockhash=y,a[h].length&&I.sign(...a[h]),I));Gn(P);let k=await this.signAllTransactions(P);if(m){let I=0,h=[],w=async()=>{if(!k[I])return;let x=await this.connection.sendRawTransaction(k[I].serialize(),{skipPreflight:b});h.push({txId:x,status:"sent",signedTx:k[I]}),d==null||d([...h]),I++;let S=!1,K=null,T=null,C=M=>{K!==null&&clearInterval(K),T!==null&&this.connection.removeSignatureListener(T);let v=h.findIndex(R=>R.txId===x);if(v>-1){if(h[v].status==="error"||h[v].status==="success")return;h[v].status=M.err?"error":"success"}d==null||d([...h]),M.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var M;if(S){clearInterval(K);return}try{let v=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(S=!0,clearInterval(K),C({err:((M=v.meta)==null?void 0:M.err)||null}),console.log("tx status from getTransaction:",x))}catch(v){S=!0,clearInterval(K),console.error("getTransaction timeout:",v,x)}},cr)),T=this.connection.onSignature(x,M=>{if(S){this.connection.removeSignatureListener(T);return}S=!0,C(M)},"confirmed"),this.connection.getSignatureStatus(x)};return await w(),{txIds:h.map(x=>x.txId),signedTxs:k}}else{let I=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:b});I.push(w)}return{txIds:I,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 b;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:o}=f,s=Ue(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Rs(this.connection):ur),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of c)a[y]===void 0&&u.push(new Pi(y));let l=await Cs({connection:this.connection,address:u});for(let[y,g]of Object.entries(l))a[y]=g;let m=i?Pi.default.toBase58():o!=null?o:await yi(this.connection,this.blockhashCommitment),d=new Zi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((b=this.owner)==null?void 0:b.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new $i(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var I;let{skipPreflight:g=!0,sendAndConfirm:P,notSendToRpc:k}=y||{};if(Gn([p]),(I=this.owner)!=null&&I.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await nr(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 b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(y=>y.message.recentBlockhash=p),Gn(s),(b=this.owner)!=null&&b.isKeyPair){if(m){let y=[];for(let g of s){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await nr(this.connection,P),y.push(P)}return{txIds:y,signedTxs:s}}return{txIds:await Promise.all(s.map(async y=>await this.connection.sendTransaction(y,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let y=await this.signAllTransactions(s);if(m){let g=0,P=[],k=async()=>{if(!y[g])return;let I=await this.connection.sendTransaction(y[g],{skipPreflight:f});P.push({txId:I,status:"sent",signedTx:y[g]}),d==null||d([...P]),g++;let h=!1,w=null,x=null,S=K=>{w!==null&&clearInterval(w),x!==null&&this.connection.removeSignatureListener(x);let T=P.findIndex(C=>C.txId===I);if(T>-1){if(P[T].status==="error"||P[T].status==="success")return;P[T].status=K.err?"error":"success"}d==null||d([...P]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let T=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});T&&(h=!0,clearInterval(w),S({err:((K=T.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",I))}catch(T){h=!0,clearInterval(w),console.error("getTransaction timeout:",T,I)}},cr)),x=this.connection.onSignature(I,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,S(K)},"confirmed"),this.connection.getSignatureStatus(I)};return k(),{txIds:[],signedTxs:y}}else{let g=[];for(let P=0;P<y.length;P+=1){let k=await this.connection.sendTransaction(y[P],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:y}}}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=Ue(m,["splitIns","computeBudgetConfig"]),o=n?tr(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],b=n?[...o.instructions,...f]:f,g=[...new Set(f.map(P=>P.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(P=>new Pi(P));if(p!==t[l]&&u.length<12&&(Xi({instructions:b,payer:this.feePayer,signers:g})||Xi({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,Xi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Yi().add(...o.instructions,...u)):a.push(new Yi().add(...u)),c.push(Array.from(new Set(u.map(P=>P.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(P=>s[P]).filter(P=>P!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(b=>b.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(b=>s[b]).filter(b=>b!==void 0);Xi({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(b=>b.publicKey)})?a.push(new Yi().add(...o.instructions,...u)):a.push(new Yi().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 I;let{sequentially:f,onTxUpdate:b,skipTxCount:y=0,recentBlockHash:g,skipPreflight:P=!0}=p||{},k=g!=null?g:await yi(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),Gn(a),(I=this.owner)!=null&&I.isKeyPair){if(f){let h=0,w=[];for(let x of a){if(++h,h<=y){w.push("tx skipped");continue}let S=await Ls(this.connection,x,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});w.push(S)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(y,a.length)),w=[...a.slice(0,y),...h];if(f){let x=0,S=[],K=async()=>{if(!w[x])return;x<y&&(S.push({txId:"",status:"success",signedTx:w[x]}),b==null||b([...S]),x++,K());let T=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:P});S.push({txId:T,status:"sent",signedTx:w[x]}),b==null||b([...S]),x++;let C=!1,M=null,v=null,R=L=>{M!==null&&clearInterval(M),v!==null&&this.connection.removeSignatureListener(v);let F=S.findIndex(Q=>Q.txId===T);if(F>-1){if(S[F].status==="error"||S[F].status==="success")return;S[F].status=L.err?"error":"success"}b==null||b([...S]),L.err||K()};this.loopMultiTxStatus&&(M=setInterval(async()=>{var L;if(C){clearInterval(M);return}try{let F=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});F&&(C=!0,clearInterval(M),R({err:((L=F.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",T))}catch(F){C=!0,clearInterval(M),console.error("getTransaction timeout:",F,T)}},cr)),v=this.connection.onSignature(T,L=>{if(C){this.connection.removeSignatureListener(v);return}C=!0,R(L)},"confirmed"),this.connection.getSignatureStatus(T)};return await K(),{txIds:S.map(T=>T.txId),signedTxs:w}}else{let x=[];for(let S=0;S<w.length;S+=1){let K=await this.connection.sendRawTransaction(w[S].serialize(),{skipPreflight:P});x.push(K)}return{txIds:x,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let P=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:o=[]}=P,s=Ue(P,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await Rs(this.connection):ur),i),c=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let I of c)a[I]===void 0&&u.push(new Pi(I));let l=await Cs({connection:this.connection,address:u});for(let[I,h]of Object.entries(l))a[I]=h;let m=t?tr(t):{instructions:[],instructionTypes:[]},d=await yi(this.connection,this.blockhashCommitment),p=this.signers.reduce((I,h)=>q(_({},I),{[h.publicKey.toBase58()]:h}),{}),f=[],b=[],y=[],g=0;if(this.allInstructions.forEach(I=>{let h=[...y,I],w=t?[...m.instructions,...h]:h;if(I!==n[g]&&y.length<12&&(zi({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||zi({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})))y.push(I);else{if(y.length===0)throw Error("item ins too big");g+=I===n[g]?1:0;let x={};for(let S of[...new Set(c)])a[S]!==void 0&&(x[S]=a[S]);if(t&&zi({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let S=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new $i(S))}else{let S=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new $i(S))}b.push(Array.from(new Set(y.map(S=>S.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(S=>p[S]).filter(S=>S!==void 0)),y=[I]}}),y.length>0){let h=[...new Set(y.map(w=>w.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&zi({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new $i(w))}else{let w=new Zi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new $i(w))}b.push(h)}return(k=this.owner)!=null&&k.signer&&b.forEach(I=>{I.some(h=>h.publicKey.equals(this.owner.publicKey))||I.push(this.owner.signer)}),f.forEach((I,h)=>{I.sign(b[h])}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async I=>{var T;let{sequentially:h,onTxUpdate:w,skipTxCount:x=0,recentBlockHash:S,skipPreflight:K=!0}=I||{};if(f.map(async(C,M)=>{b[M].length&&C.sign(b[M]),S&&(C.message.recentBlockhash=S)}),Gn(f),(T=this.owner)!=null&&T.isKeyPair){if(h){let C=0,M=[];for(let v of f){if(++C,C<=x){console.log("skip tx: ",C),M.push("tx skipped");continue}let R=await this.connection.sendTransaction(v,{skipPreflight:K});await nr(this.connection,R),M.push(R)}return{txIds:M,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(x,f.length)),M=[...f.slice(0,x),...C];if(h){let v=0,R=[],L=async()=>{if(!M[v])return;if(v<x){R.push({txId:"",status:"success",signedTx:M[v]}),w==null||w([...R]),v++,L();return}let F=await this.connection.sendTransaction(M[v],{skipPreflight:K});R.push({txId:F,status:"sent",signedTx:M[v]}),w==null||w([...R]),v++;let Q=!1,$=null,ce=null,ke=de=>{$!==null&&clearInterval($),ce!==null&&this.connection.removeSignatureListener(ce);let ye=R.findIndex(Ae=>Ae.txId===F);if(ye>-1){if(R[ye].status==="error"||R[ye].status==="success")return;R[ye].status=de.err?"error":"success"}w==null||w([...R]),de.err||L()};this.loopMultiTxStatus&&($=setInterval(async()=>{var de;if(Q){clearInterval($);return}try{let ye=await this.connection.getTransaction(F,{commitment:"confirmed",maxSupportedTransactionVersion:0});ye&&(Q=!0,clearInterval($),ke({err:((de=ye.meta)==null?void 0:de.err)||null}),console.log("tx status from getTransaction:",F))}catch(ye){Q=!0,clearInterval($),console.error("getTransaction timeout:",ye,F)}},cr)),ce=this.connection.onSignature(F,de=>{if(Q){this.connection.removeSignatureListener(ce);return}Q=!0,ke(de)},"confirmed"),this.connection.getSignatureStatus(F)};return L(),{txIds:[],signedTxs:M}}else{let v=[];for(let R=0;R<M.length;R+=1){let L=await this.connection.sendTransaction(M[R],{skipPreflight:K});v.push(L)}return{txIds:v,signedTxs:M}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};import dd from"bn.js";var tn=new dd(1e6);var st={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"},Zg=_({},st);var Ou="ray_tab_hash",Ns="ray_req_hash",pd=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Ou);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Ou,r)),r},mr=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Ue(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(Ns)||"[]").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:pd()}));try{localStorage.setItem(Ns,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(Ns,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(c=>c())}return mr(q(_({},t),{logCount:r,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as fd,TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";var dr=Pe("Raydium_Api"),Os=new Map;var pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Mu.create({baseURL:this.urlConfigs.BASE_HOST||st.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return dr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(dr.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&&mr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),dr.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&&mr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),dr.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||st.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||st.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||st.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Mu.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||st.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||st.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||st.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||st.JUP_TOKEN_LIST})).map(t=>q(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?fd.toBase58():bd.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||st.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||st.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||st.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Os.has(s)?(n.push(Os.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||st.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{Os.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&&pt(t).toBase58(),n&&n!=="undefined"?pt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||st.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||st.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||st.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||st.CHECK_AVAILABILITY)).data}};var fr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",vu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as kr,SystemProgram as zd}from"@solana/web3.js";import{AccountLayout as Ti,createAssociatedTokenAccountIdempotentInstruction as Us,TOKEN_PROGRAM_ID as Mn,TOKEN_2022_PROGRAM_ID as Qd}from"@solana/spl-token";var Ms=(...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=Pe(t)}createTxBuilder(e){return this.scope.checkOwner(),new lr({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(Ms(e))}logInfo(...e){this.logger.info(Ms(e))}logAndCreateError(...e){let t=Ms(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Dd,SystemProgram as Wd}from"@solana/web3.js";import qd from"bn.js";import{createCloseAccountInstruction as Ud,createInitializeAccountInstruction as Gd,createTransferInstruction as Xd,TOKEN_PROGRAM_ID as hi}from"@solana/spl-token";import{Keypair as _d,PublicKey as Yu}from"@solana/web3.js";import Fd from"bn.js";import{TOKEN_PROGRAM_ID as Ed}from"@solana/spl-token";function yd(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function vs(r,...e){if(!yd(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 _s(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 _u(r,e){vs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var yr=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),nn=(r,e)=>r<<32-e|r>>>e;var _A=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function gd(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Fs(r){return typeof r=="string"&&(r=gd(r)),vs(r),r}var br=class{clone(){return this._cloneInto()}},FA={}.toString;function Fu(r){let e=n=>r().update(Fs(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Ad(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 Eu=(r,e,t)=>r&e^~r&t,Vu=(r,e,t)=>r&e^r&t^e&t,gr=class extends br{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=yr(this.buffer)}update(e){_s(this);let{view:t,buffer:n,blockLen:i}=this;e=Fs(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=yr(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){_s(this),_u(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;Ad(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=yr(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 Pd=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]),Ln=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Nn=new Uint32Array(64),Es=class extends gr{constructor(){super(64,32,8,!1),this.A=Ln[0]|0,this.B=Ln[1]|0,this.C=Ln[2]|0,this.D=Ln[3]|0,this.E=Ln[4]|0,this.F=Ln[5]|0,this.G=Ln[6]|0,this.H=Ln[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)Nn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Nn[m-15],p=Nn[m-2],f=nn(d,7)^nn(d,18)^d>>>3,b=nn(p,17)^nn(p,19)^p>>>10;Nn[m]=b+Nn[m-7]+f+Nn[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=nn(a,6)^nn(a,11)^nn(a,25),p=l+d+Eu(a,c,u)+Pd[m]+Nn[m]|0,b=(nn(n,2)^nn(n,13)^nn(n,22))+Vu(n,i,o)|0;l=u,u=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+b|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(){Nn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Du=Fu(()=>new Es);import{PublicKey as Nd}from"@solana/web3.js";import zu,{isBN as Qu}from"bn.js";import{bits as wd,BitStructure as zA,blob as kd,Blob as QA,cstr as HA,f32 as jA,f32be as YA,f64 as ZA,f64be as $A,greedy as JA,Layout as hd,ns64 as eP,ns64be as tP,nu64 as Td,nu64be as nP,offset as Id,s16 as iP,s16be as oP,s24 as rP,s24be as sP,s32 as Bd,s32be as aP,s40 as uP,s40be as cP,s48 as lP,s48be as mP,s8 as dP,seq as Sd,struct as pP,Structure as xd,u16 as Kd,u16be as fP,u24 as bP,u24be as yP,u32 as Cd,u32be as gP,u40 as AP,u40be as PP,u48 as wP,u48be as kP,u8 as Rd,UInt as Ld,union as hP,Union as TP,unionLayoutDiscriminator as IP,utf8 as BP}from"@solana/buffer-layout";var Ar=hd,Wu=xd;var Vs=Ld;var qu=Rd,Ct=Kd;var Pr=Cd;var Uu=Td;var Fe=Bd;var Gu=Sd;var Se=kd;var Ds=wd,Xu=Id;var jn=class extends Ar{constructor(t,n,i){super(t,i);this.blob=Se(t),this.signed=n}decode(t,n=0){let i=new zu(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 zu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},wr=class extends Ar{constructor(t){super(8,t);this._lower=Ds(Pr(),!1),this._upper=Ds(Pr(),!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 W(r){return new Vs(1,r)}function yt(r){return new Vs(4,r)}function A(r){return new jn(8,!1,r)}function oe(r){return new jn(16,!1,r)}function Hu(r){return new jn(1,!0,r)}function ki(r){return new jn(8,!0,r)}function ju(r){return new jn(16,!0,r)}var wi=class extends Ar{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 N(r){return new wi(Se(32),e=>new Nd(e),e=>e.toBuffer(),r)}function Ge(r){return new wi(qu(),Od,Md,r)}function Od(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function Md(r){return r?1:0}function vd(r){let e=Pr("length"),t=E([e,Se(Xu(e,-e.span),"data")]);return new wi(t,({data:n})=>n,n=>({data:n}),r)}function St(r){return new wi(vd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}var Ws=class extends Wu{decode(e,t){return super.decode(e,t)}};function E(r,e,t){return new Ws(r,e,t)}function j(r,e,t){let n,i=typeof e=="number"?e:Qu(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Qu(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 Gu(r,i,t)}var Yn=E([N("mint"),N("owner"),A("amount"),yt("delegateOption"),N("delegate"),W("state"),yt("isNativeOption"),A("isNative"),A("delegatedAmount"),yt("closeAuthorityOption"),N("closeAuthority")]);var zP=Pe("Raydium_Util");function Zu({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Yn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:o,mint:c,amount:u,isAssociated:ee(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:Yu.default,amount:new Fd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function je({fromPublicKey:r,programId:e=Ed,assignSeed:t}){let n=t?btoa(t).slice(0,32):_d.generate().publicKey.toBase58().slice(0,32);return{publicKey:Vd(r,n,e),seed:n}}function Vd(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Du(n);return new Yu(i)}function qs(r){let{mint:e,tokenAccount:t,owner:n,programId:i=hi}=r;return Gd(t,e,n,i)}function yn(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=hi}=r;return Ud(e,t,i,n,o)}async function On(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Yn.span,n),c=J(t).add(new qd(a)),u=je({fromPublicKey:i,programId:hi});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Wd.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Yn.span,programId:hi}),qs({mint:new Dd(bt.address),tokenAccount:u.publicKey,owner:o,programId:hi})],instructionTypes:[G.CreateAccount,G.InitAccount],endInstructionTypes:s?[]:[G.CloseAccount],endInstructions:s?[]:[yn({tokenAccount:u.publicKey,payer:i,owner:o})]}}function $u({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=hi}){return Xd(r,e,t,BigInt(String(n)),i,o)}var Ji=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 ee(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let 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:Mn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Qd},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Zu({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=Mn,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 b,y,g,P;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 kr(t.tokenProgram||Mn),d=this.getAssociatedTokenAccount(n,new kr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!o||k.pubkey.equals(d))).sort((k,I)=>k.accountInfo.amount.lt(I.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=Us(s,d,s,n,m),I=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(b=f.instructions)==null||b.push(k),f.instructionTypes.push(G.CreateATA);else if(!(h.owner.equals(m)&&Ti.decode(h.data).mint.equals(n)&&Ti.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else I===void 0&&(f.instructions.push(k),f.instructionTypes.push(G.CreateATA));if(n.equals(Y)&&i.amount){let h=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(y=i.amount)!=null?y: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($u({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:Mn})),f.instructionTypes.push(G.TransferAmount))}return!c&&I===void 0&&(f.endInstructions.push(yn({owner:s,payer:i.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(G.CloseAccount)),{account:d,instructionParams:f}}else{let k=je({fromPublicKey:s,programId:m,assignSeed:l}),I=await this.scope.connection.getMinimumBalanceForRentExemption(Ti.span),h=zd.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:I+Number((P=(g=i.amount)==null?void 0:g.toString())!=null?P:0),space:Ti.span,programId:m});return f.instructions.push(h,qs({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(G.CreateAccount),f.instructionTypes.push(G.InitAccount),c||(f.endInstructions.push(yn({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(G.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Mn,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 Us(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[G.CreateATA],o=u}return i&&Y.toBase58()===t.toBase58()&&(a.endInstructions=[yn({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[G.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=Mn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new kr(Y).equals(o)){let p=await On({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=Us(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let b=await this.scope.connection.getAccountInfo(d);if(b===null)p.push(f);else if(!(b.owner.equals(Mn)&&Ti.decode(b.data).mint.equals(o)&&Ti.decode(b.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:[G.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=Mn,amount:o,useSOLBalance:s,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new kr(Y))&&s){let m=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=m,f=Ue(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=Ue(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as xe,SystemProgram as lp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as fc}from"@solana/spl-token";import{PublicKey as Ys}from"@solana/web3.js";var Gs=E([W("instruction")]),Xs=E([W("instruction")]),Hd=E([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),oe("accRewardPerShare"),N("rewardVault"),N("rewardMint"),N("rewardSender"),A("rewardType"),j(A(),15,"padding")]),jd=E([A("state"),A("nonce"),N("lpVault"),N("rewardVault"),N(),N(),A(),A(),A("totalReward"),oe("perShareReward"),A("lastSlot"),A("perSlotReward")]),Yd=E([A("state"),A("nonce"),N("lpVault"),N("rewardVaultA"),A("totalRewardA"),oe("perShareRewardA"),A("perSlotRewardA"),W("option"),N("rewardVaultB"),Se(7),A("totalRewardB"),oe("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),N()]),Zd=E([A(),A("state"),A("nonce"),A("validRewardTokenNum"),oe("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),N("lpMint"),N("lpVault"),j(Hd,5,"rewardInfos"),N("creator"),N(),j(A(),32,"padding")]),$d=new Proxy(jd,{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)}}),Jd=new Proxy(Yd,{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)}}),hr=new Proxy(Zd,{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(vn).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),ep=E([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),zs=E([W("instruction"),A("nonce"),j(ep,5,"rewardTimeInfo")]),Qs=E([W("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Hs=E([W("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Iw=E([A("state"),N("id"),N("owner"),A("deposited"),j(A(),1,"rewardDebts")]),js=E([A("state"),N("id"),N("owner"),A("deposited"),j(oe(),1,"rewardDebts"),A(""),A("voteLockedBalance"),j(A(),15)]),Bw=E([A("state"),N("id"),N("owner"),A("deposited"),j(A(),2,"rewardDebts")]),Ju=E([A("state"),N("id"),N("owner"),A("deposited"),j(oe(),2,"rewardDebts"),j(A(),17)]),ec=E([A(),A("state"),N("id"),N("owner"),A("deposited"),j(oe(),5,"rewardDebts"),j(A(),16)]),Rt=E([W("instruction"),A("amount")]),tp=E([N("mint"),N("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),Hu("digitShift"),j(W(),7,"reserved1"),j(A(),7,"reserved2")]),np=E([Se(8),N("governanceProgramId"),N("realm"),N("realmGoverningTokenMint"),N("realmAuthority"),j(W(),32,"reserved1"),j(tp,4,"votingMints"),ki("timeOffset"),W("bump"),j(W(),7,"reserved2"),j(A(),11,"reserved3")]),ip=E([ki("startTime"),ki("endTime"),W("kind"),j(W(),15,"reserved")]),op=E([j(ip,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Ge("isUsed"),Ge("allowClawback"),W("votingMintConfigIdx"),j(W(),29,"reserved")]),rp=E([Se(8),N("voterAuthority"),N("registrar"),j(op,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),j(W(),94,"reserved")]);import{NATIVE_MINT as Mw}from"@solana/spl-token";var vw=Pe("Raydium_farm_config"),tc=new Ys("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),nc=new Ys("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var _w=new Ys("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var ic={3:js,5:Ju,6:ec},Zs=r=>[3,4,5,6].indexOf(r)!==-1,$s=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)},vn={"Standard SPL":0,"Option tokens":1},Ft={[Su.toString()]:3,[xu.toString()]:4,[Ku.toString()]:5,[Qi.toString()]:6,[bn.FARM_PROGRAM_ID_V3.toString()]:3,[bn.FARM_PROGRAM_ID_V4.toString()]:4,[bn.FARM_PROGRAM_ID_V5.toString()]:5,[bn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as ge,SystemProgram as sc,SYSVAR_CLOCK_PUBKEY as no,SYSVAR_RENT_PUBKEY as up,TransactionInstruction as Vt}from"@solana/web3.js";import ac from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as fk,createAssociatedTokenAccountIdempotentInstruction as bk,TOKEN_PROGRAM_ID as gn}from"@solana/spl-token";import sp from"bn.js";var ap=Pe("Raydium.farm.util");function eo({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function Et({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var oc=({programId:r,poolId:e})=>le([e.toBuffer()],r);function rc(r){return{isSet:new sp(1),rewardPerSecond:J(r.perSecond),rewardOpenTime:J(r.openTime),rewardEndTime:J(r.endTime),rewardType:J(vn[r.rewardType])}}function Js(r){return J(r.endTime).sub(J(r.openTime)).mul(J(r.perSecond))}function to(r){let e=ic[r];return e||ap.logWithError("invalid version",r),e}var cp=Pe("Raydium_farm_instruction"),Sk={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 io(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||cp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Gs.span);Gs.encode({instruction:s},a);let c=[B({pubkey:t}),B({pubkey:n}),B({pubkey:o,isWritable:!1}),B({pubkey:sc.programId,isWritable:!1}),B({pubkey:up,isWritable:!1})];return{instruction:new Vt({programId:i,keys:c,data:a}),instructionType:G.FarmV3CreateLedger}}function uc(r){var n;let e=Buffer.alloc(zs.span);zs.encode({instruction:0,nonce:new ac(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...bs,B({pubkey:r.farmId}),B({pubkey:r.farmAuthority,isWritable:!1}),B({pubkey:r.lpVault}),B({pubkey:r.lpMint,isWritable:!1}),B({pubkey:r.lockVault}),B({pubkey:r.lockMint,isWritable:!1}),B({pubkey:(n=r.lockUserAccount)!=null?n:ot}),B({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(B({pubkey:i.rewardMint,isWritable:!1}),B({pubkey:i.rewardVault}),B({pubkey:i.userRewardToken}));return{instruction:new Vt({programId:r.programId,keys:t,data:e}),instructionType:G.FarmV6Create}}function cc(r){let e=Buffer.alloc(Xs.span);Xs.encode({instruction:5},e);let t=[B({pubkey:gn,isWritable:!1}),B({pubkey:r.id}),B({pubkey:r.authority,isWritable:!1}),B({pubkey:r.lpVault,isWritable:!1}),B({pubkey:r.rewardVault}),B({pubkey:r.userRewardToken}),B({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Vt({programId:r.programId,keys:t,data:e}),instructionType:G.FarmV6CreatorWithdraw}}function ea({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(Qs.span);Qs.encode({instruction:3,rewardReopenTime:J(i.openTime),rewardEndTime:J(i.endTime),rewardPerSecond:J(i.perSecond)},o);let s=[B({pubkey:gn,isWritable:!1}),B({pubkey:n.id}),B({pubkey:n.lpVault,isWritable:!1}),B({pubkey:e}),B({pubkey:t}),B({pubkey:r,isWritable:!1,isSigner:!0})];return new Vt({programId:n.programId,keys:s,data:o})}function ta({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Hs.span);Hs.encode({instruction:4,isSet:new ac(1),rewardPerSecond:J(i.perSecond),rewardOpenTime:J(i.openTime),rewardEndTime:J(i.endTime),rewardType:J(vn[i.rewardType])},o);let s=[...bs,B({pubkey:t.id}),B({pubkey:t.authority,isWritable:!1}),B({pubkey:i.mint,isWritable:!1}),B({pubkey:n}),B({pubkey:e}),B({pubkey:r,isWritable:!1,isSigner:!0})];return new Vt({programId:t.programId,keys:s,data:o})}function oo(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=Et({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(Rt.span);Rt.encode({instruction:2,amount:J(s)},l);let m=[B({pubkey:gn,isWritable:!1}),B({pubkey:c}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:new ge(t.lpVault)}),B({pubkey:u}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(B({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(B({pubkey:i[d]}));return new Vt({programId:a,keys:m,data:l})}function ro(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=Et({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:12,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(B({pubkey:i[p]})),d.push(B({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function lc(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=E([W("instruction"),A("amount")]),m=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:a[0]}),B({pubkey:o,isSigner:!0,isWritable:!1}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1}),B({pubkey:i[1]}),B({pubkey:new ge(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Vt({keys:m,programId:c,data:d})}function so(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=Et({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:11,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function mc(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=Et({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:10,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function dc(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=Et({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(Rt.span);Rt.encode({instruction:11,amount:J(s)},m);let d=[B({pubkey:u}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:l}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n}),B({pubkey:new ge(t.lpVault)}),B({pubkey:i[0]}),B({pubkey:new ge(t.rewardInfos[0].vault)}),B({pubkey:no,isWritable:!1}),B({pubkey:gn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(B({pubkey:i[p]})),d.push(B({pubkey:new ge(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(B({pubkey:p}));return new Vt({programId:c,keys:d,data:m})}function pc(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=Et({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(Rt.span);Rt.encode({instruction:1,amount:J(s)},l);let m=[B({pubkey:gn,isWritable:!1}),B({pubkey:sc.programId,isWritable:!1}),B({pubkey:c}),B({pubkey:new ge(t.authority),isWritable:!1}),B({pubkey:new ge(t.lpVault)}),B({pubkey:u}),B({pubkey:o,isWritable:!1,isSigner:!0}),B({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(B({pubkey:new ge(t.rewardInfos[d].vault)})),m.push(B({pubkey:i[d]}));return new Vt({programId:a,keys:m,data:l})}var ao=class extends _e{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ot)){let n=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Js(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=Qi,txVersion:o,feePayer:s,lockProgram:a}){var x,S;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new xe(e.lpMint.address),lockInfo:{lockMint:(x=a==null?void 0:a.mint)!=null?x:tc,lockVault:(S=a==null?void 0:a.vault)!=null?S:nc},version:6,rewardInfos:t,programId:i},l=this.createTxBuilder(s),m=n!=null?n:this.scope.ownerPubKey,d=je({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(hr.span);l.addInstruction({instructions:[lp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:hr.span,programId:u.programId})]});let{publicKey:f,nonce:b}=oc({programId:new xe(u.programId),poolId:d.publicKey}),y=eo({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(vn[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(rc(K));let{rewardPubKey:T,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let M=K.mint.equals(ot)?new xe(bt.address):K.mint;P.push({rewardMint:M,rewardVault:eo({programId:u.programId,poolId:d.publicKey,mint:M,type:"rewardVault"}),userRewardToken:T})}let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new xe(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});I&&l.addInstruction(I),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=uc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:y,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:b});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:o,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:y,lockUserAccount:k,nonce:b}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i,feePayer:o}){var g;let s=Ft[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=lt((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(ot)?new xe(bt.address):n.mint,m=c.rewardInfos.findIndex(P=>new xe(P.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:ot,f=this.createTxBuilder(o),{rewardPubKey:b,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return y&&f.addInstruction(y),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[ea({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:b,farmKeys:c,rewardInfo:n})],instructionTypes:[G.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i,feePayer:o}){var m;let s=Ft[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=lt((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(ot)?new xe(bt.address):d.mint,f=c.rewardInfos.findIndex(I=>new xe(I.mint.address).equals(p)),b=a.rewardInfos[f];b||this.logAndCreateError("configuration does not exist","rewardMint",p);let y=(m=b.vault)!=null?m:ot,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:d,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ea({payer:this.scope.ownerPubKey,rewardVault:y,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[G.FarmV6Restart]})}return l.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o,feePayer:s}=e,a=Ft[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=lt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,l=this.createTxBuilder(s),m=i.mint.equals(ot)?new xe(bt.address):i.mint,d=eo({programId:new xe(n.programId),poolId:new xe(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:[ta({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:i})],instructionTypes:[G.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o,feePayer:s}=e,a=Ft[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=lt((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(ot)?new xe(bt.address):m.mint,p=eo({programId:new xe(n.programId),poolId:new xe(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:m,payer:u});b&&l.addInstruction(b),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let y=ta({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(_({},m),{mint:d})});l.addInstruction({instructions:[y],instructionTypes:[G.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=Ft[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Zs(f)||this.logAndCreateError("invalid farm program:",n.programId);let[b,y]=[new xe(n.programId),new xe(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=Et({programId:b,poolId:y,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(o);k.addCustomComputeBudget(l),k.addTipInstruction(m);let I={};for(let R of this.scope.account.tokenAccounts)if(a){let L=ee(this.scope.ownerPubKey,R.mint,R.programId).publicKey;R.publicKey&&L.equals(R.publicKey)&&(I[R.mint.toString()]=R.publicKey)}else I[R.mint.toString()]=R.publicKey;let h=g.lpMint,w=I[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",I);let x=[];for(let R of d){let L=s&&R.mint.address===Y.toString(),F=I[R.mint.address];if(!F){let{account:Q,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new xe(R.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:a,checkCreateATAOwner:c});F=Q,$&&k.addInstruction($)}I[R.mint.address]=F,x.push(F)}let S,K=await this.scope.connection.getAccountInfo(P);if(K&&(S=to(f).decode(K.data)),n.programId!==Qi.toString()&&n.programId!==bn.FARM_PROGRAM_ID_V6.toString()&&!S){let{instruction:R,instructionType:L}=io({id:y,programId:b,version:f,ledger:P,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[R],instructionTypes:[L]})}let T=$s({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});T&&this.logAndCreateError(T);let C={amount:J(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(R=>new xe(R))},M=f===6?pc(C):f===5?dc(C):mc(C),v={3:G.FarmV3Deposit,5:G.FarmV5Deposit,6:G.FarmV6Deposit};return k.addInstruction({instructions:[M],instructionTypes:[v[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=Ft[n.programId];Zs(f)||this.logAndCreateError("invalid farm program:",n.programId);let b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],y=this.createTxBuilder(a);y.addCustomComputeBudget(m),y.addTipInstruction(d);let g={};for(let T of this.scope.account.tokenAccounts)if(c){let C=ee(this.scope.ownerPubKey,T.mint).publicKey;T.publicKey&&C.equals(T.publicKey)&&(g[T.mint.toString()]=T.publicKey)}else g[T.mint.toString()]=T.publicKey;if(f!==4){let T=Et({programId:new xe(n.programId),poolId:new xe(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(T);if(C)to(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:M,instructionType:v}=io({id:new xe(b.id),programId:new xe(b.programId),version:f,ledger:T,owner:this.scope.ownerPubKey});y.addInstruction({instructions:[M],instructionTypes:[v]})}}o&&o.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=b.lpMint.address,k=s&&P===Y.toString(),I=g[P.toString()];if(!I){let{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.lpMint.programId,mint:new xe(P),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});I=T,C&&y.addInstruction(C)}g[P.toString()]=I;let h=[];for(let T of p){let C=s&&T.mint.address===Y.toString(),M=g[T.mint.address];if(!M){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T.mint.programId,mint:new xe(T.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});M=v,R&&y.addInstruction(R)}g[T.mint.address]=M,h.push(M)}let w=$s({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let x={amount:J(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(T=>new xe(T))},S=f===6?oo(x):f===5?ro(x):f===4?lc(x):so(x),K={3:G.FarmV3Withdraw,4:G.FarmV4Withdraw,5:G.FarmV5Withdraw,6:G.FarmV6Withdraw};return y.addInstruction({instructions:[S],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:i,txTipConfig:o,feePayer:s}){var b;this.scope.checkOwner();let a=lt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=Ft[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(y=>pt(y.mint.address).equals(pt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(b=u==null?void 0:u.vault)!=null?b:ot,m=this.createTxBuilder(s),d;if(t.equals(ot)||t.equals(xe.default)){let y=await On({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Js(q(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new O(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=y.addresses.newAccount,m.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[fc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[G.CreateATA]})):d=y}let{instruction:p,instructionType:f}=cc({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 b=ee(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&b.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,b)=>q(_({},f),{[b.id]:b}),{});for(let f of Object.values(t)){let{programId:b,lpMint:y,rewardInfos:g,id:P}=f,k=Ft[b],I=y.address,h=n&&I===Y.toString(),w=m[I];if(!w){let{account:M,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.programId,mint:new xe(I),notUseTokenAccount:h,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:o,checkCreateATAOwner:s});w=M,v&&l.addInstruction(v)}m[I.toString()]=w;let x=[];for(let M of g){let v=n&&M.mint.address===Y.toString(),R=m[M.mint.address];if(!R)if(v){let{account:L,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:M.mint.programId,mint:new xe(M.mint.address),notUseTokenAccount:v,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:o,checkCreateATAOwner:s});R=L,F&&l.addInstruction(F)}else{let L=new xe(M.mint.address);R=this.scope.account.getAssociatedTokenAccount(L),l.addInstruction({instructions:[fc(this.scope.ownerPubKey,R,this.scope.ownerPubKey,L)]})}m[M.mint.address]=R,x.push(R)}let S=p[P],K={amount:Bt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:S,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(M=>new xe(M))},T=k===6?oo(K):k===5?ro(K):so(K),C={3:G.FarmV3Withdraw,5:G.FarmV5Withdraw,6:G.FarmV6Withdraw};l.addInstruction({instructions:[T],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as Je}from"@solana/web3.js";import{AccountLayout as Zp,NATIVE_MINT as vr,TOKEN_PROGRAM_ID as Fn}from"@solana/spl-token";import{Keypair as Kr,PublicKey as X,SystemProgram as kn,TransactionInstruction as dt}from"@solana/web3.js";import da from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as yo,TOKEN_2022_PROGRAM_ID as Xe,TOKEN_PROGRAM_ID as Re}from"@solana/spl-token";import wp from"bn.js";import Dt from"bn.js";var qe=new Dt(0),Lt=new Dt(1),An=new Dt(-1),nt=new Dt(1).shln(64),Tr=new Dt(1).shln(128),uo=nt.sub(Lt),co=64,bc=Tr.subn(1),gt=-443636,wt=-gt,Wt=new Dt("4295048016"),qt=new Dt("79226673521066979257578248091"),Ir=new Dt("4295048017"),Br=new Dt("79226673521066979257578248090"),yc=16,gc="59543866431248",Ac="184467440737095516",Pc="15793534762490258745",Sr=new Dt(10).pow(new Dt(6));var wc={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:[]},ih=new Dt("18446744073700000000");import be from"bn.js";function xr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function na(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function ia(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function lo(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function kc(r,e){return lo(r,e)?null:na(r,e)}function hc(r,e){return lo(r,e)?null:ia(r,e)}var uh=Buffer.from("amm_config","utf8"),oa=Buffer.from("pool","utf8"),ra=Buffer.from("pool_vault","utf8"),dp=Buffer.from("pool_reward_vault","utf8"),Tc=Buffer.from("position","utf8"),pp=Buffer.from("tick_array","utf8"),fp=Buffer.from("operation","utf8"),bp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),yp=Buffer.from("observation","utf8");function Ic(r,e,t,n){return le([oa,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function sa(r,e,t){return le([ra,e.toBuffer(),t.toBuffer()],r)}function Bc(r,e,t){return le([dp,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return le([pp,e.toBuffer(),xr(t)],r)}function on(r,e,t,n){return le([Tc,e.toBuffer(),xr(t),xr(n)],r)}function kt(r,e){return le([Tc,e.toBuffer()],r)}function Pn(r){return le([Buffer.from("metadata","utf8"),Zt.toBuffer(),r.toBuffer()],Zt)}function mo(r){return le([fp],r)}function Ye(r,e){return le([bp,e.toBuffer()],r)}function Sc(r,e){return le([yp,e.toBuffer()],r)}var xc=Buffer.from("locked_position","utf8");function aa(r,e){return le([xc,e.toBuffer()],r)}function Ii(r,e){return le([xc,e.toBuffer()],r)}var gp=Buffer.from("support_mint","utf8");function ua(r,e){return le([gp,e.toBuffer()],r)}import{PublicKey as Nt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Kc}from"@solana/spl-token";import Ee from"bn.js";import ln from"bn.js";var po=class{static getfeeGrowthInside(e,t,n){let i=new ln(0),o=new ln(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 ln(0),a=new ln(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=me.wrappingSubU128(me.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=me.wrappingSubU128(me.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=me.mulDivFloor(me.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,nt),c=t.tokenFeesOwedA.add(a),u=me.mulDivFloor(me.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,nt),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=me.mulDivFloor(me.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,nt),c=t.tokenFeesOwedA.add(a),u=me.mulDivFloor(me.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,nt),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=me.wrappingSubU128(c,u.growthInsideLastX64),m=me.mulDivFloor(l,t.liquidity,nt),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=me.wrappingSubU128(c,u.growthInsideLastX64),m=me.mulDivFloor(l,t.liquidity,nt),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 ln(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 ln(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(me.wrappingSubU128(me.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 ln(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 ln(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(me.wrappingSubU128(me.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var y,g,P,k;let a=ue.priceToSqrtPriceX64(new O(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,(y=e.mintA.extensions)==null?void 0:y.feeConfig,s,!0),Ce(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,b]=[Ce(new ln(new O(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Ce(new ln(new O(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:b,expirationTime:en(d.expirationTime,p.expirationTime)}}};var Ap=15,he=class{static async getTickArrays(e,t,n,i,o,s,a){let c=[],u=Z.getTickArrayStartIndexByTick(i,o),l=Z.getInitializedTickArrayInRange(s,a,o,u,Math.floor(Ap/2));for(let p=0;p<l.length;p++){let{publicKey:f}=we(t,n,l[p]);c.push(f)}let m=(await Ht(e,c)).map(p=>p!==null?fo.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=Z.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/he.tickCount(t)),a=n?Z.searchLowBitFromStart(i,o,s-1,1,t):Z.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=it-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<it;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=Z.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<it;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=we(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(Z.checkIsOutOfBoundary(e)){if(e>wt)return!1;let n=Z.getTickArrayStartIndexByTick(gt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return it*e}};var ca=14,wn=class{static maxTickInTickarrayBitmap(e){return e*it*Zn}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(!he.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-he.tickCount(n):t+he.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*it,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=kc(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=hc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-he.tickCount(n)}}}},bo=class{static getBitmapOffset(e,t){if(!he.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(wt<=t)throw Error(`extensionTickBoundary check error: ${wt}, ${t}`);if(n<=gt)throw Error(`extensionTickBoundary check error: ${n}, ${gt}`);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:Z.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=he.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=Z.mergeTickArrayBitmap(e).shln(Zn-1-a),u=lo(512,c)?null:na(512,c);if(u!==null){let l=t-u*he.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let c=Z.mergeTickArrayBitmap(e).shrn(a),u=lo(512,c)?null:ia(512,c);if(u!==null){let l=t+u*he.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-he.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%wn.maxTickInTickarrayBitmap(t),i=Math.floor(n/he.tickCount(t));return e<0&&n!=0&&(i=Zn-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:b,feeAmount:y}=$n.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(An),remainingAccounts:c,executionPrice:b,feeAmount:y}}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 b=this.preInitializedTickArrayStartIndex(e,s);if(b.isExist){let{publicKey:y}=we(e.programId,e.id,b.nextStartIndex);a.push(y)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=$n.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(An),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])?bo.checkTickArrayIsInit(he.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Z.checkTickArrayIsInitialized(Z.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,he.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=we(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/he.tickCount(e.tickSpacing)),i=t?Z.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Z.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=he.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=wn.nextInitializedTickArrayStartIndex(Z.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=bo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<gt||t>wt)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:me.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Nt(d)});if(p.tokenMint.equals(Nt.default))continue;if(n<=p.openTime.toNumber()||i.eq(qe)){s.push(p);continue}let f=new Ee(Math.min(p.endTime.toNumber(),n)),b=f.sub(p.lastUpdateTime),y=me.mulDivFloor(b,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(y),P=me.mulDivFloor(b,p.emissionsPerSecondX64,nt),k=p.rewardTotalEmissioned.add(P);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=Z.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=wn.maxTickInTickarrayBitmap(e),n=-t;return t>wt&&(t=he.getArrayStartIndex(wt,e)+he.tickCount(e)),n<gt&&(n=he.getArrayStartIndex(gt,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!he.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/he.tickCount(t)*Zn}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()]=Rc.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=Z.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Z.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=we(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=fo.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(kt(p,d).publicKey);let l=await Ht(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Bi.decode(d.data),f=p.poolId.toString(),b=e.find(S=>S.state.id.toBase58()===f);if(b===void 0)continue;let y=b.state,g=Z._getTickPriceLegacy({poolInfo:y,tick:p.tickLower,baseIn:!0}),P=Z._getTickPriceLegacy({poolInfo:y,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:I}=Ie.getAmountsFromLiquidity(y.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));b.positionAccount=[...(a=b.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:k,amountB:I,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(S=>q(_({},S),{pendingReward:new Ee(0)})),leverage:h,tokenFeeAmountA:new Ee(0),tokenFeeAmountB:new Ee(0)}];let w=await Z.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickLower,b.state.tickSpacing),x=await Z.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickUpper,b.state.tickSpacing);m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(o){let d=Object.values(m),p=await Ht(t,d,{batchRequest:i}),f={};for(let b=0;b<d.length;b++){let y=p[b];if(y===null)continue;let g=d[b].toString();f[g]=fo.decode(y.data)}for(let{state:b,positionAccount:y}of e)if(!!y)for(let g of y){let P=`${b.programId.toString()}-${b.id.toString()}-${g.tickLower}`,k=`${b.programId.toString()}-${b.id.toString()}-${g.tickUpper}`,I=f[m[P].toString()],h=f[m[k].toString()],w=I.ticks[Z.getTickOffsetInArray(g.tickLower,b.tickSpacing)],x=h.ticks[Z.getTickOffsetInArray(g.tickUpper,b.tickSpacing)],{tokenFeeAmountA:S,tokenFeeAmountB:K}=await po.GetPositionFees(b,g,w,x),T=await po.GetPositionRewards(b,g,w,x);g.tokenFeeAmountA=S.gte(new Ee(0))?S:new Ee(0),g.tokenFeeAmountB=K.gte(new Ee(0))?K:new Ee(0);for(let C=0;C<T.length;C++)g.rewardInfos[C].pendingReward=T[C].gte(new Ee(0))?T[C]:new Ee(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var M;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 O(0))?u=l?Wt.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:b,remainingAccounts:y,executionPrice:g,feeAmount:P}=Me.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((M=p.fee)!=null?M:qe),u,c),k=Ce(b,d,i,!1),I=ue.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?I:new O(1).div(I),w=b.mul(new Ee(Math.floor((1-s)*1e10))).div(new Ee(1e10)),x=Ce(w,d,i,!1),S=l?e.currentPrice:new O(1).div(e.currentPrice),K=new O(h).sub(S).abs(),T=S,C=new rt(new O(K).mul(10**15).toFixed(0),new O(T).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:x,expirationTime:en(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:P,remainingAccounts:y,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 We(q(_({},u),{mint:u.address,isToken2022:u.programId===Kc.toBase58()})),new We(q(_({},l),{mint:l.address,isToken2022:l.programId===Kc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:b,minAmountOut:y,expirationTime:g,currentPrice:P,executionPrice:k,priceImpact:I,fee:h,remainingAccounts:w,executionPriceX64:x}=Me.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Nt(u.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),S=q(_({},f),{amount:new Ke(m,f.amount),fee:f.fee===void 0?void 0:new Ke(m,f.fee)}),K=q(_({},b),{amount:new Ke(d,b.amount),fee:b.fee===void 0?void 0:new Ke(d,b.fee)}),T=q(_({},y),{amount:new Ke(d,y.amount),fee:y.fee===void 0?void 0:new Ke(d,y.fee)}),C=new It({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:P.mul(new O(10**(20+d.decimals))).toFixed(0)}),M=new It({baseToken:m,denominator:new Ee(10).pow(new Ee(20+m.decimals)),quoteToken:d,numerator:k.mul(new O(10**(20+d.decimals))).toFixed(0)}),v=new Ke(m,h);return{allTrade:p,realAmountIn:S,amountOut:K,minAmountOut:T,expirationTime:g,currentPrice:C,executionPrice:M,priceImpact:I,fee:v,remainingAccounts:w,executionPriceX64:x}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:o,slippage:s,priceLimit:a=new O(0)}){var T;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 O(0))?l=c?qt.sub(new Ee(1)):Wt.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:b}=Me.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((T=m.fee)!=null?T:qe),l),y=c?e.mintB.address:e.mintA.address,g=Ce(d,u[y],i,!1),P=ue.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?P:new O(1).div(P),I=d.mul(new Ee(Math.floor((1+s)*1e10))).div(new Ee(1e10)),h=Ce(I,u[y],i,!0),w=c?e.currentPrice:new O(1).div(e.currentPrice),x=new O(k).sub(w).abs(),S=w,K=new rt(new O(x).mul(10**15).toFixed(0),new O(S).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:en(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:b,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,b,y;let o=e[t],s=Z.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Z.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,((b=o.rewardApr[1])!=null?b:0)*p,((y=o.rewardApr[2])!=null?y: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[pt(e.mintA.address).toString()],d=i[pt(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 b=ue.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),y=ue.getSqrtPriceX64FromTick(s),g=ue.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(b,y,g,t,!1,!1,0),{amountSlippageA:I,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(b,y,g,o,!1,!1,0),w=new O(P.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(k.toString()).div(new O(10).pow(f)).mul(d.value)),x=new O(I.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(h.toString()).div(new O(10).pow(f)).mul(d.value)),S=new O(1).div(w.add(x)),T=new O(l.volumeFee).mul(365).div(u).mul(S).mul(100).toNumber(),C=3600*24*365,M=e.rewardDefaultInfos.map(v=>{var F,Q;let R=v.mint.decimals,L=i[v.mint.address];return c<((F=v.startTime)!=null?F:0)||c>((Q=v.endTime)!=null?Q:0)||!v.perSecond||!L||R===void 0?0:new O(L.value).mul(new O(v.perSecond).mul(C)).div(new O(10).pow(R)).mul(S).mul(100).toNumber()});return{feeApr:T,rewardsApr:M,apr:T+M.reduce((v,R)=>v+R,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=ue.priceToSqrtPriceX64(new O(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 O(p.amount.sub((P=p.fee)!=null?P:qe).toString()).toFixed(0)),b;if(l.lte(m))b=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ee(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),I=Ie.getLiquidityFromTokenAmountB(m,l,f);b=t?k:I}else b=t?new Ee(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let y=await Me.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a});return{liquidity:b,amountA:t?p:y.amountA,amountB:t?y.amountB:p,amountSlippageA:t?p:y.amountSlippageA,amountSlippageB:t?y.amountSlippageB:p,expirationTime:y.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var y,g,P,k;let c=ue.getSqrtPriceX64FromTick(n),u=ue.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=Ie.getAmountsFromLiquidity(ue.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,o,a),[d,p]=[Ce(m.amountA,(y=t.mintA.extensions)==null?void 0:y.feeConfig,e,!0),Ce(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,b]=[Ce(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.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:b,expirationTime:en(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new Nt(c.id));(await Ht(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=Jn.decode(c.data))});let s=t.map(c=>Ye(new Nt(c.programId),new Nt(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 Nt(u.id),version:6,programId:new Nt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(_({},u.config),{id:new Nt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapAccount:Ye(new Nt(u.programId),new Nt(u.id)).publicKey,exBitmapInfo:a[Ye(new Nt(u.programId),new Nt(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 la={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Cc(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:la,week:la,month:la,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(_({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var me=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(qe)||(o=o.add(Lt)),o}static mulDivFloor(e,t,n){if(n.eq(qe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(qe))throw new Error("division by 0");return e.mul(t).add(n.sub(Lt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new be(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Tr).sub(t).mod(Tr)}};function at(r,e){return ma(r.mul(e),64,256)}function Pp(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ma(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 me.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return me.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(qe))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(qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(qe))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(qe))return e;let o=t.shln(co);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?me.mulDivCeil(s,e,a):me.mulDivRoundingUp(s,Lt,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 me.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(co);if(i)return e.add(o.div(t));{let s=me.mulDivRoundingUp(o,Lt,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<gt||e>wt)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=at(n,new be("18444899583751176192"))),(t&4)!=0&&(n=at(n,new be("18443055278223355904"))),(t&8)!=0&&(n=at(n,new be("18439367220385607680"))),(t&16)!=0&&(n=at(n,new be("18431993317065453568"))),(t&32)!=0&&(n=at(n,new be("18417254355718170624"))),(t&64)!=0&&(n=at(n,new be("18387811781193609216"))),(t&128)!=0&&(n=at(n,new be("18329067761203558400"))),(t&256)!=0&&(n=at(n,new be("18212142134806163456"))),(t&512)!=0&&(n=at(n,new be("17980523815641700352"))),(t&1024)!=0&&(n=at(n,new be("17526086738831433728"))),(t&2048)!=0&&(n=at(n,new be("16651378430235570176"))),(t&4096)!=0&&(n=at(n,new be("15030750278694412288"))),(t&8192)!=0&&(n=at(n,new be("12247334978884435968"))),(t&16384)!=0&&(n=at(n,new be("8131365268886854656"))),(t&32768)!=0&&(n=at(n,new be("3584323654725218816"))),(t&65536)!=0&&(n=at(n,new be("696457651848324352"))),(t&131072)!=0&&(n=at(n,new be("26294789957507116"))),(t&262144)!=0&&(n=at(n,new be("37481735321082"))),e>0&&(n=bc.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(Wt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new be(t-64),i=Pp(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<yc;){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(gc)),d=ma(m.sub(new be(Ac)),64,128).toNumber(),p=ma(m.add(new be(Pc)),64,128).toNumber();return d==p?d:ue.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ei=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=ei.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(qe))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(co),s=t.sub(e);return i?me.mulDivRoundingUp(me.mulDivCeil(o,s,t),Lt,e):me.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(qe))throw new Error("sqrtPriceX64A must greater than 0");return i?me.mulDivCeil(n,t.sub(e),nt):me.mulDivFloor(n,t.sub(e),nt)}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?me.mulDivRoundingUp(a,Lt,uo):a.shrn(co)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),me.mulDivFloor(n,uo,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 O(c.toString()).mul(l).toFixed(0)),d=new be(new O(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 P,k,I,h;let u=ue.priceToSqrtPriceX64(new O(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,b]=[Ce(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),Ce(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[y,g]=[Ce(new be(new O(p.amountA.toString()).mul(d).toFixed(0)),(I=e.mintA.extensions)==null?void 0:I.feeConfig,a,c),Ce(new be(new O(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:b,amountSlippageA:y,amountSlippageB:g,expirationTime:en(f.expirationTime,b.expirationTime)}}},$n=class{static swapCompute(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b=!1){if(d.eq(qe))throw new Error("amountSpecified must not be 0");if(f||(f=s?Wt.add(Lt):qt.sub(Lt)),s){if(f.lt(Wt))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 y=d.gt(qe),g={amountSpecifiedRemaining:d,amountCalculated:qe,sqrtPriceX64:m,tick:u>p?Math.min(p+he.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new be(0)},P=p,k=n[p],I=0,h=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(qe)&&!g.sqrtPriceX64.eq(f);){I>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let x=Z.nextInitTick(k,g.tick,l,s,h),S=x||null,K=null;if(!(S!=null&&S.liquidityGross.gtn(0))){let C=Me.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},P,s);if(!C.isExist){if(b)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")}P=C.nextStartIndex;let{publicKey:M}=we(e,t,P);K=M,k=n[P];try{S=Z.firstInitializedTick(k,s)}catch{throw Error("not found next tick info")}}w.tickNext=S.tick,w.initialized=S.liquidityGross.gtn(0),p!==P&&K&&(g.accounts.push(K),p=P),w.tickNext<gt?w.tickNext=gt:w.tickNext>wt&&(w.tickNext=wt),w.sqrtPriceNextX64=ue.getSqrtPriceX64FromTick(w.tickNext);let T;if(s&&w.sqrtPriceNextX64.lt(f)||!s&&w.sqrtPriceNextX64.gt(f)?T=f:T=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=$n.swapStepCompute(g.sqrtPriceX64,T,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(w.feeAmount),y?(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=S.liquidityNet;s&&(C=C.mul(An)),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}++I}try{let{nextStartIndex:w,isExist:x}=he.nextInitializedTickArray(g.tick,l,s,i,o);x&&p!==w&&(g.accounts.push(we(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:qe,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(qe);if(c){let l=me.mulDivFloor(i,Sr.sub(new be(o.toString())),Sr);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(An).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromOutput(e,n,i.mul(An),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(An))&&(a.amountOut=i.mul(An)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=i.sub(a.amountIn):a.feeAmount=me.mulDivCeil(a.amountIn,new be(o),Sr.sub(new be(o))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var it=60,Zn=512,Z=class{static getTickArrayAddressByTick(e,t,n,i){let o=Z.getTickArrayStartIndexByTick(n,i),{publicKey:s}=we(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Z.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=it)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=he.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)*he.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*it,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*it,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*it:e+t*it}static mergeTickArrayBitmap(e){let t=new wp(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*it));return[...Z.searchLowBitFromStart(e,t,s-1,o,n),...Z.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Z.searchHightBitFromStart(e,t,-7680,Zn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=Z.getAllInitializedTickArrayStartIndex(n,i,o);for(let c of a){let{publicKey:u}=we(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=>Z.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=he.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=>Z.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=he.tickCount(o);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<gt||e>wt}static nextInitTick(e,t,n,i,o){if(he.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<it;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=it-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<it;){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 O(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),o=ei.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 O(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 O(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),o=ei.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 O(1).div(a)}}};var Lc=E([Se(8),W("bump"),Ct("index"),N(""),yt("protocolFeeRate"),yt("tradeFeeRate"),Ct("tickSpacing"),j(A(),8,"")]),kp=E([yt("blockTimestamp"),ki("tickCumulative"),j(A(),4)]),Nc=E([Se(8),Ge("initialized"),A("recentEpoch"),Ct("observationIndex"),N("poolId"),j(kp,100,"observations"),j(A(),4)]),hp=E([W("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),oe("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),N("tokenMint"),N("tokenVault"),N("creator"),oe("rewardGrowthGlobalX64")]),Jn=E([Se(8),W("bump"),N("ammConfig"),N("creator"),N("mintA"),N("mintB"),N("vaultA"),N("vaultB"),N("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Ct("tickSpacing"),oe("liquidity"),oe("sqrtPriceX64"),Fe("tickCurrent"),yt(),oe("feeGrowthGlobalX64A"),oe("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),oe("swapInAmountTokenA"),oe("swapOutAmountTokenB"),oe("swapInAmountTokenB"),oe("swapOutAmountTokenA"),W("status"),j(W(),7,""),j(hp,3,"rewardInfos"),j(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),j(A(),15*4-3,"padding")]),Tp=E([oe("growthInsideLastX64"),A("rewardAmountOwed")]),Bi=E([Se(8),W("bump"),N("nftMint"),N("poolId"),Fe("tickLower"),Fe("tickUpper"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(Tp,3,"rewardInfos"),j(A(),8,"")]),yT=E([Se(8),W("bump"),N("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),oe("liquidity"),oe("feeGrowthInsideLastX64A"),oe("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(oe(),3,"rewardGrowthInside"),j(A(),8,"")]),Ip=E([Fe("tick"),ju("liquidityNet"),oe("liquidityGross"),oe("feeGrowthOutsideX64A"),oe("feeGrowthOutsideX64B"),j(oe(),3,"rewardGrowthsOutsideX64"),j(yt(),13,"")]),fo=E([Se(8),N("poolId"),Fe("startTickIndex"),j(Ip,it,"ticks"),W("initializedTickCount"),j(W(),115,"")]),Oc=E([Se(329),j(N(),100,"whitelistMints")]),Rc=E([Se(8),N("poolId"),j(j(A(),8),ca,"positiveTickArrayBitmap"),j(j(A(),8),ca,"negativeTickArrayBitmap")]),gT=E([A(),W("bump"),N("owner"),N("poolId"),N("positionId"),N("nftAccount"),j(A(),8)]),Mc=E([Se(8),W("bump"),N("lockOwner"),N("poolId"),N("positionId"),N("nftAccount"),N("lockNftMint"),A("recentEpoch"),j(A(),8)]);Nc.span;var vc=Pe("Raydium_Clmm"),Ot={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]},_c=[188,37,179,131,82,150,84,73],Fc=[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 b=E([oe("sqrtPriceX64"),A("zero")]),y=[{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:ct,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(b.span);b.encode({sqrtPriceX64:p,zero:qe},g);let P=Buffer.from([...Ot.createPool,...g]);return new dt({keys:y,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:o,ammConfigId:s,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new X(i.address),new X(o.address)],{publicKey:m}=Ic(t,s,u,l),{publicKey:d}=Sc(t,m),{publicKey:p}=sa(t,m,u),{publicKey:f}=sa(t,m,l),b=Ye(t,m).publicKey,y=[this.createPoolInstruction(t,m,n,s,d,u,p,new X(i.programId||Re),l,f,new X(o.programId||Re),b,a,c)];return{signers:[],instructions:y,instructionTypes:[G.CreateAccount,G.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:b,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K,T){let C=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),M=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[]],v=[{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:b,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...M],R=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:k,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:x,amountMaxB:S,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},R);let L=Buffer.from([...Ot.openPosition,...R]);return new dt({keys:v,programId:e,data:L})}static openPositionFromLiquidityInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K){let T=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],M=[{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:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...C],v=Buffer.alloc(T.span);T.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:h,amountMaxA:w,amountMaxB:x,withMetadata:S==="create",baseFlag:!1,optionBaseFlag:0},v);let R=Buffer.from([...Ot.openPositionWithTokenEx,...v]);return new dt({keys:M,programId:e,data:R})}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 X(e.programId),new X(e.id)],b;if(l)b=new X((await l(1))[0]);else{let K=Kr.generate();d.push(K),b=K.publicKey}let y=Z.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Z.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:P}=we(p,f,y),{publicKey:k}=we(p,f,g),{publicKey:I}=m?ee(n.wallet,b,Xe):ee(n.wallet,b,Re),{publicKey:h}=Pn(b),{publicKey:w}=kt(p,b),{publicKey:x}=on(p,f,i,o),S=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,b,I,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,b,I,h,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0);return{signers:d,instructions:[S],instructionTypes:[G.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:P,tickArrayUpper:k,positionNftAccount:I,metadataAccount:h,personalPosition:w,protocolPosition:x}}}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 X(e.programId),new X(e.id)],b;if(l)b=new X((await l(1))[0]);else{let K=Kr.generate();d.push(K),b=K.publicKey}let y=Z.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Z.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:P}=we(p,f,y),{publicKey:k}=we(p,f,g),{publicKey:I}=m?ee(n.wallet,b,Xe):ee(n.wallet,b,Re),{publicKey:h}=Pn(b),{publicKey:w}=kt(p,b),{publicKey:x}=on(p,f,i,o),S=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,b,I,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,b,I,h,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),i,o,y,g,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:P,tickArrayUpper:k,positionNftAccount:I,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[S],signers:d,instructionTypes:[G.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K,T){let C=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),M=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[]],v=[{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:b,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...M],R=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:k,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:h,liquidity:new da(0),amountMaxA:x==="MintA"?S:K,amountMaxB:x==="MintA"?K:S,withMetadata:w==="create",baseFlag:x==="MintA",optionBaseFlag:1},R);let L=Buffer.from([...Ot.openPosition,...R]);return new dt({keys:v,programId:e,data:L})}static openPositionFromBaseInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k,I,h,w,x,S,K){let T=E([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),oe("liquidity"),A("amountMaxA"),A("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],M=[{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:ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...C],v=Buffer.alloc(T.span);T.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new da(0),amountMaxA:w==="MintA"?x:S,amountMaxB:w==="MintA"?S:x,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},v);let R=Buffer.from([...Ot.openPositionWithTokenEx,...v]);return new dt({keys:M,programId:e,data:R})}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 X((await l(1))[0]);else{let K=Kr.generate();p.push(K),d=K.publicKey}let[f,b]=[new X(e.programId),new X(e.id)],y=Z.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Z.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:P}=we(f,b,y),{publicKey:k}=we(f,b,g),{publicKey:I}=m?ee(n.wallet,d,Xe):ee(n.wallet,d,Re),{publicKey:h}=Pn(d),{publicKey:w}=kt(f,d),{publicKey:x}=on(f,b,i,o),S=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,b,n.wallet,d,I,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(t.mintA.address),new X(t.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(f,b).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,b,n.wallet,d,I,h,x,P,k,w,n.tokenAccountA,n.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(t.mintA.address),new X(t.mintB.address),i,o,y,g,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ye(f,b).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:P,tickArrayUpper:k,positionNftAccount:I,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[S],signers:p,instructionTypes:[G.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o,s){let a=E([]),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?Xe:Re,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Ot.closePosition,...u]);return new dt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:o}){let s=new X(e.programId),a=o?ee(n.wallet,i.nftMint,Xe).publicKey:ee(n.wallet,i.nftMint,Re).publicKey,{publicKey:c}=kt(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:[G.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P){let k=E([oe("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),I=[...P?[{pubkey:P,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:Xe,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],w=Buffer.alloc(k.span);k.encode({liquidity:b,amountMaxA:y,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let x=Buffer.from([...Ot.increaseLiquidity,...w]);return new dt({keys:h,programId:e,data:x})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new X(e.programId),new X(e.id)],m=Z.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Z.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:f}=we(u,l,d),{publicKey:b}=c?ee(i.wallet,n.nftMint,Xe):ee(i.wallet,n.nftMint,Re),{publicKey:y}=kt(u,n.nftMint),{publicKey:g}=on(u,l,n.tickLower,n.tickUpper),P=this.increasePositionFromLiquidityInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),o,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Ye(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[G.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 X(e.programId),new X(e.id)],m=Z.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Z.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:f}=we(u,l,d),{publicKey:b}=c?ee(i.wallet,n.nftMint,Xe):ee(i.wallet,n.nftMint,Re),{publicKey:y}=kt(u,n.nftMint),{publicKey:g}=on(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),o,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Ye(u,l).publicKey:void 0)],signers:[],instructionTypes:[G.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P){let k=E([oe("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),I=[...P?[{pubkey:P,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:Xe,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],w=Buffer.alloc(k.span);k.encode({liquidity:new da(0),amountMaxA:b==="MintA"?y:g,amountMaxB:b==="MintA"?g:y,baseFlag:b==="MintA",optionBaseFlag:1},w);let x=Buffer.from([...Ot.increaseLiquidity,...w]);return new dt({keys:h,programId:e,data:x})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([oe("liquidity"),A("amountMinA"),A("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...b.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:Xe,isSigner:!1,isWritable:!1},{pubkey:Zo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],x=Buffer.alloc(I.span);I.encode({liquidity:y,amountMinA:g,amountMinB:P},x);let S=Buffer.from([...Ot.decreaseLiquidity,...x]);return new dt({keys:w,programId:e,data:S})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new X(e.programId),new X(e.id)],d=Z.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=Z.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=we(l,m,d),{publicKey:b}=we(l,m,p),{publicKey:y}=u?ee(i.wallet,n.nftMint,Xe):ee(i.wallet,n.nftMint,c),{publicKey:g}=kt(l,n.nftMint),{publicKey:P}=on(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new X(t.rewardInfos[w].vault),ownerRewardVault:i.rewardAccounts[w],rewardMint:new X(e.rewardDefaultInfos[w].mint.address)});let I=[],h=this.decreaseLiquidityInstruction(l,i.wallet,y,g,m,P,f,b,i.tokenAccountA,i.tokenAccountB,new X(t.vault.A),new X(t.vault.B),new X(e.mintA.address),new X(e.mintB.address),k,o,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Ye(l,m).publicKey:void 0);return I.push(h),{address:{tickArrayLower:f,tickArrayUpper:b,positionNftAccount:y,personalPosition:g,protocolPosition:P},signers:[],instructions:I,instructionTypes:[G.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g){let P=E([A("amount"),A("otherAmountThreshold"),oe("sqrtPriceLimitX64"),Ge("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(x=>({pubkey:x,isSigner:!1,isWritable:!0}))],I=[{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:Xe,isSigner:!1,isWritable:!1},{pubkey:Zo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:b,isBaseInput:y},h);let w=Buffer.from([...Ot.swap,...h]);return new dt({keys:I,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 X(e.programId),new X(e.id)],[d,p]=[new X(t.vault.A),new X(t.vault.B)],[f,b]=[new X(e.mintA.address),new X(e.mintB.address)],y=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new X(e.config.id),y?i.tokenAccountA:i.tokenAccountB,y?i.tokenAccountB:i.tokenAccountA,y?d:p,y?p:d,y?f:b,y?b:f,u,n,s,a,c,!0,Ye(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[G.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 X(e.programId),new X(e.id)],[d,p]=[new X(t.vault.A),new X(t.vault.B)],[f,b]=[new X(e.mintA.address),new X(e.mintB.address)],y=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new X(e.config.id),y?i.tokenAccountB:i.tokenAccountA,y?i.tokenAccountA:i.tokenAccountB,y?p:d,y?d:p,y?b:f,y?f:b,u,n,s,a,c,!1,Ye(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[G.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([A("openTime"),A("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:ct,isSigner:!1,isWritable:!1}],b=Buffer.alloc(p.span);p.encode({openTime:J(l),endTime:J(m),emissionsPerSecondX64:d},b);let y=Buffer.from([...Ot.initReward,...b]);return new dt({keys:f,programId:e,data:y})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new X(e.programId),new X(e.id)],a=Bc(o,s,i.mint).publicKey,c=mo(o).publicKey,u=[this.initRewardInstruction(o,n.wallet,s,c,new X(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:[G.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([W("rewardIndex"),oe("emissionsPerSecondX64"),A("openTime"),A("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:Xe,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],b=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:J(l),endTime:J(m)},b);let y=Buffer.from([...Ot.setRewardEmissions,...b]);return new dt({keys:f,programId:e,data:y})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new X(e.programId),new X(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 X(t.rewardInfos[d].vault),u=new X(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&vc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=mo(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new X(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[G.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let c=E([W("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:Xe,isSigner:!1,isWritable:!1},{pubkey:Zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Ot.collectReward,...l]);return new dt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new X(e.programId),new X(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new X(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&vc.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:[G.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 X((await c(1))[0]);else{let g=Kr.generate();u.push(g),l=g.publicKey}let m=a?ee(o,s,Xe).publicKey:ee(o,s,Re).publicKey,{publicKey:d}=kt(n,s),p=Ii(e,l).publicKey,f=ee(o,l,Re).publicKey,b=Pn(l).publicKey,y=Le.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:o,lockOwner:o,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:b,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ee(t,s,a?Xe:Re).publicKey,positionNftProgram:a?Xe:Re});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:b},instructions:[y],signers:u,instructionTypes:[G.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:b}){let y=[{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:Zt,isSigner:!1,isWritable:!1},{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}],g=E([Ge("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:b},P);let k=Buffer.from([..._c,...P]);return new dt({keys:y,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:o}){let{publicKey:s}=ee(i,o,Re),{publicKey:a}=kt(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:aa(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}];return new dt({keys:c,programId:e,data:Buffer.from(_c)})}static harvestLockPositionInstruction(e){let[t,n]=[new X(e.poolKeys.programId),new X(e.poolKeys.id)],i=Z.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),o=Z.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=we(t,n,i),{publicKey:a}=we(t,n,o),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Re),{publicKey:u}=kt(t,e.ownerPosition.nftMint),{publicKey:l}=on(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new X(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new X(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:aa(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 X(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new X(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:Xe,isSigner:!1,isWritable:!1},{pubkey:Rn,isSigner:!1,isWritable:!1},{pubkey:new X(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new X(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new dt({keys:p,programId:e.programId,data:Buffer.from(Fc)})}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:b,userVaultA:y,userVaultB:g,mintA:P,mintB:k,rewardAccounts:I,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...I.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],x=[{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:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:Rn,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new dt({keys:x,programId:e,data:Buffer.from(Fc)})}};var Bp=E([yt("mintAuthorityOption"),N("mintAuthority"),A("supply"),W("decimals"),W("isInitialized"),yt("freezeAuthorityOption"),N("freezeAuthority")]);import{PublicKey as ET}from"@solana/web3.js";import{MintLayout as DT,TOKEN_PROGRAM_ID as qT}from"@solana/spl-token";var Cr=r=>new We({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),go=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Ue(o,["amount","isRaw","name"]);return new Ke(new We({mint:pt(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=Ue(o,["address","programId","decimals"]);return _({chainId:101,address:pt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},_n=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 Ec from"bn.js";var pa=new Ec(25),Rr=new Ec(1e4);import{PublicKey as mn,SystemProgram as xp,SYSVAR_RENT_PUBKEY as aI,TransactionInstruction as Si}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Kp,TOKEN_PROGRAM_ID as Po}from"@solana/spl-token";var fa=E([W("instruction"),A("amountIn"),A("minAmountOut")]),ba=E([W("instruction"),A("maxAmountIn"),A("amountOut")]),iI=E([W("instruction"),W("nonce")]),Sp=E([W("instruction"),W("nonce"),A("startTime")]),Ao=E([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),A("swapBase2QuoteFee"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),A("swapQuote2BaseFee"),N("baseVault"),N("quoteVault"),N("baseMint"),N("quoteMint"),N("lpMint"),N("openOrders"),N("marketId"),N("marketProgramId"),N("targetOrders"),N("withdrawQueue"),N("lpVault"),N("owner"),A("lpReserve"),j(A(),3,"padding")]),oI=E([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),oe("swapBaseInAmount"),oe("swapQuoteOutAmount"),oe("swapQuoteInAmount"),oe("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),N("baseVault"),N("quoteVault"),N("baseMint"),N("quoteMint"),N("lpMint"),N("modelDataAccount"),N("openOrders"),N("marketId"),N("marketProgramId"),N("targetOrders"),N("owner"),j(A(),64,"padding")]),ya=E([W("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),ga=E([W("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var Vc=E([A("fee")]);var Dc=Pe("Raydium_liquidity_instruction");function Wc(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s,otherAmountMin:a,modelDataPubKey:c=zn}=r,u=Buffer.alloc(ya.span);ya.encode({instruction:3,baseAmountIn:J(i),quoteAmountIn:J(o),otherAmountMin:J(a),fixedSide:s==="base"?Bt:Pu},u);let l=[B({pubkey:Po,isWritable:!1}),B({pubkey:new mn(e.id)}),B({pubkey:new mn(t.authority),isWritable:!1}),B({pubkey:new mn(t.openOrders),isWritable:!1}),B({pubkey:new mn(t.targetOrders)}),B({pubkey:new mn(e.lpMint.address)}),B({pubkey:new mn(t.vault.A)}),B({pubkey:new mn(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(B({pubkey:c})),l.push(B({pubkey:new mn(e.marketId),isWritable:!1}),B({pubkey:n.baseTokenAccount}),B({pubkey:n.quoteTokenAccount}),B({pubkey:n.lpTokenAccount}),B({pubkey:n.owner,isWritable:!1,isSigner:!0}),B({pubkey:new mn(t.marketEventQueue),isWritable:!1})),new Si({programId:new mn(e.programId),keys:l,data:u})}function Aa(r){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:o,quoteAmountMin:s,modelDataPubKey:a=zn}=r,c=lt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(ga.span);ga.encode({instruction:4,lpAmount:J(i),baseAmountMin:J(o),quoteAmountMin:J(s)},l);let m=[B({pubkey:Po,isWritable:!1}),B({pubkey:c.id}),B({pubkey:c.authority,isWritable:!1}),B({pubkey:c.openOrders}),B({pubkey:c.targetOrders}),B({pubkey:c.mintLp.address}),B({pubkey:c.vault.A}),B({pubkey:c.vault.B})];return u===5?m.push(B({pubkey:a})):(m.push(B({pubkey:c.id})),m.push(B({pubkey:c.id}))),m.push(B({pubkey:c.marketProgramId,isWritable:!1}),B({pubkey:c.marketId}),B({pubkey:c.marketBaseVault}),B({pubkey:c.marketQuoteVault}),B({pubkey:c.marketAuthority,isWritable:!1}),B({pubkey:n.lpTokenAccount}),B({pubkey:n.baseTokenAccount}),B({pubkey:n.quoteTokenAccount}),B({pubkey:n.owner,isWritable:!1,isSigner:!0}),B({pubkey:c.marketEventQueue}),B({pubkey:c.marketBids}),B({pubkey:c.marketAsks})),new Si({programId:c.programId,keys:m,data:l})}return new Si({programId:c.programId,keys:[]})}function Pa({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:b,userPcVault:y,userLpVault:g,nonce:P,openTime:k,coinAmount:I,pcAmount:h,ammConfigId:w,feeDestinationId:x}){let S=E([W("instruction"),W("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),K=[{pubkey:Po,isSigner:!1,isWritable:!1},{pubkey:Kp,isSigner:!1,isWritable:!1},{pubkey:xp.programId,isSigner:!1,isWritable:!1},{pubkey:ct,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:x,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],T=Buffer.alloc(S.span);return S.encode({instruction:1,nonce:P,openTime:k,coinAmount:I,pcAmount:h},T),{instruction:new Si({keys:K,programId:r,data:T}),instructionType:G.AmmV4CreatePool}}function Cp({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:i=zn},o){let s=lt(r),a=Buffer.alloc(fa.span);fa.encode({instruction:9,amountIn:J(t),minAmountOut:J(n)},a);let c=[B({pubkey:Po,isWritable:!1}),B({pubkey:s.id}),B({pubkey:s.authority,isWritable:!1}),B({pubkey:s.openOrders})];return o===4&&c.push(B({pubkey:s.targetOrders})),c.push(B({pubkey:s.vault.A}),B({pubkey:s.vault.B})),o===5&&c.push(B({pubkey:i})),c.push(B({pubkey:s.marketProgramId,isWritable:!1}),B({pubkey:s.marketId}),B({pubkey:s.marketBids}),B({pubkey:s.marketAsks}),B({pubkey:s.marketEventQueue}),B({pubkey:s.marketBaseVault}),B({pubkey:s.marketQuoteVault}),B({pubkey:s.marketAuthority,isWritable:!1}),B({pubkey:e.tokenAccountIn}),B({pubkey:e.tokenAccountOut}),B({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Si({programId:s.programId,keys:c,data:a})}function Rp({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:i=zn},o){let s=lt(r),a=Buffer.alloc(ba.span);ba.encode({instruction:11,maxAmountIn:J(t),amountOut:J(n)},a);let c=[B({pubkey:Po,isWritable:!1}),B({pubkey:s.id}),B({pubkey:s.authority,isWritable:!1}),B({pubkey:s.openOrders}),B({pubkey:s.targetOrders}),B({pubkey:s.vault.A}),B({pubkey:s.vault.B})];return o===5&&c.push(B({pubkey:i})),c.push(B({pubkey:s.marketProgramId,isWritable:!1}),B({pubkey:s.marketId}),B({pubkey:s.marketBids}),B({pubkey:s.marketAsks}),B({pubkey:s.marketEventQueue}),B({pubkey:s.marketBaseVault}),B({pubkey:s.marketQuoteVault}),B({pubkey:s.marketAuthority,isWritable:!1}),B({pubkey:e.tokenAccountIn}),B({pubkey:e.tokenAccountOut}),B({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Si({programId:s.programId,keys:c,data:a})}function Lr(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 Cp(q(_({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Rp(q(_({},a),{maxAmountIn:i,amountOut:o}),t);Dc.logWithError("invalid params","params",r)}throw Dc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var ni=5e4,Lp=E([A("x"),A("y"),A("price")]),Np=E([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),j(Lp,ni,"DataElement")]);function Op(r,e){return[0,ni-2]}function Mp(r){return[0,ni-2]}function vp(r){return[0,ni-2]}function _p(r,e,t){let[n,i]=Op(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>=ni-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 wa(r,e,t){let[n,i,o]=_p(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 ti(r,e,t){return e*r.multiplier/t}function qc(r,e,t){return e*t/r.multiplier}function Fp(r,e){let[t,n]=Mp(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ni-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 Ep(r,e){let[t,n]=vp(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ni-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 Uc(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Fp(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,b;return n?(f=l+(m-l)*(e-c)/(u-c),b=d-(i-c)*r.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),b=p+(u-i)*r.multiplier/l),[f,b,!1,a]}}}function Vp(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Ep(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,b;return n?(f=l+(m-l)*(d-e)/(d-p),b=c+m*(d-i)/r.multiplier):(f=l+(m-l)*(d-e)/(d-p),b=u-l*(i-p)/r.multiplier),[f,b,!1,a]}}}function Dp(r,e){let t=Uc(r,e,0,!1);return t[3]?t[0]:0}function Gc(r,e,t,n){let i=wa(r,e,t),o=ti(r,e,i),s=ti(r,t,i),a=ti(r,n,i),c=!0,[u,l,m,d]=Uc(r,o,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return qc(r,p,i)}}function Xc(r,e,t,n){let i=wa(r,e,t),o=ti(r,e,i),s=ti(r,t,i),a=ti(r,n,i),c=!1,[u,l,m,d]=Vp(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=o-l;return qc(r,p,i)}}function Wp(r){let e=Np.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 zc(r,e,t,n){let i=Dp(r,ti(r,e,wa(r,e,t)))/r.multiplier;return n?i:1/i}var wo=class{constructor({connection:e,modelDataPubKey:t=zn}){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=Wp(e==null?void 0:e.data))}}};import{PublicKey as Gp}from"@solana/web3.js";import FI from"bn.js";import{TOKEN_PROGRAM_ID as Xp}from"@solana/spl-token";import{PublicKey as qp}from"@solana/web3.js";var Up=Pe("Raydium_liquidity_serum");function Qc({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=qp.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw Up.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 Nr({programId:r}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function ii({name:r,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function zp({programId:r,marketId:e}){let{publicKey:t}=le([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function ha({programId:r}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Ta({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:c}){let u=ii({name:"amm_associated_seed",programId:a,marketId:t}),l=ii({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=ha({programId:a}),p=ii({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=ii({name:"pc_vault_associated_seed",programId:a,marketId:t}),b=ii({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),y=zp({programId:a,marketId:t}),g=ii({name:"target_associated_seed",programId:a,marketId:t}),P=ii({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=Qc({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:b,openOrders:y,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:Gp.default,configId:Nr({programId:a})}}var ka={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Or=r=>{let e={},t=Xp.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 O(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new O(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:ka,week:ka,month:ka,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Nr({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:new O(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 ze from"bn.js";import{PublicKey as ko}from"@solana/web3.js";import ho from"bn.js";import{TOKEN_PROGRAM_ID as Zc}from"@solana/spl-token";import{SystemProgram as oi,SYSVAR_RENT_PUBKEY as Hp,Transaction as Hc,TransactionInstruction as jp}from"@solana/web3.js";import{createInitializeAccountInstruction as jc,TOKEN_PROGRAM_ID as Yc}from"@solana/spl-token";function Qp(r="accountFlags"){let e=new wr(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 Ia=E([Se(5),Qp("accountFlags"),N("ownAddress"),A("vaultSignerNonce"),N("baseMint"),N("quoteMint"),N("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),N("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),N("requestQueue"),N("eventQueue"),N("bids"),N("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Se(7)]);function Yp({programId:r,marketInfo:e}){let t=E([W("version"),yt("instruction"),A("baseLotSize"),A("quoteLotSize"),Ct("feeRateBps"),A("vaultSignerNonce"),A("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:Hp,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 jp({keys:n,programId:r,data:i})}async function Mr({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Hc,i=await r.getMinimumBalanceForRentExemption(165);n.add(oi.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Yc}),oi.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Yc}),jc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),jc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),oi.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(Ia.span),space:Ia.span,programId:t.programId}));let o=new Hc;return o.add(oi.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}),oi.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}),oi.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}),oi.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}),Yp({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:[G.CreateAccount,G.CreateAccount,G.InitAccount,G.InitAccount]},{transaction:o,signer:[],instructionTypes:[G.CreateAccount,G.CreateAccount,G.CreateAccount,G.CreateAccount,G.CreateAccount,G.InitMarket]}]}var xi=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 b=this.scope.ownerPubKey,y=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-market`}),P=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-request`}),k=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-event`}),I=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-bids`}),h=je({fromPublicKey:b,programId:o,assignSeed:y&&`${y}-asks`}),w=je({fromPublicKey:b,programId:Zc,assignSeed:y&&`${y}-baseVault`}),x=je({fromPublicKey:b,programId:Zc,assignSeed:y&&`${y}-quoteVault`}),S=0,K=new ho(100);function T(){let Q=new ho(0);for(;;)try{return{vaultOwner:ko.createProgramAddressSync([g.publicKey.toBuffer(),Q.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:Q}}catch{if(Q.iaddn(1),Q.gt(new ho(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:M}=T(),v=new ho(Math.round(10**e.decimals*n)),R=new ho(Math.round(n*10**t.decimals*i));if(v.eq(Bt))throw Error("lot size is too small");if(R.eq(Bt))throw Error("tick size or lot size is too small");let L=await Mr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:x,vaultOwner:C,requestQueue:P,eventQueue:k,bids:I,asks:h,feeRateBps:S,quoteDustThreshold:K,vaultSignerNonce:M,baseLotSize:v,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),F=this.createTxBuilder(f);F.addInstruction({instructions:L[0].transaction.instructions,signers:L[0].signer});for await(let Q of L.slice(1,L.length))F.addInstruction({instructions:Q.transaction.instructions,signers:Q.signer,instructionTypes:Q.instructionTypes});return m===0?F.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:k.publicKey,bids:I.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new ko(e.mint),quoteMint:new ko(t.mint)}}):F.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:k.publicKey,bids:I.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new ko(e.mint),quoteMint:new ko(t.mint)}})}};var To=class extends _e{constructor(t){super(t);this.stableLayout=new wo({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:bn.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 ze(new O(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=Cr(t[o?"mintB":"mintA"]),[c,u]=[new ze(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new ze(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new ze(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.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=Bt;s.isZero()||(d=m==="base"?Jo(s.mul(u),c):Jo(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Jo(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new rt(new ze(1)).add(i),b=new rt(new ze(1)).sub(i),y=f.mul(d).quotient,g=b.mul(d).quotient,P=new Ke(a,d),k=new Ke(a,y),I=new Ke(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:P,maxAnotherAmount:k,minAnotherAmount:I,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:b,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[o.token,s.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),I=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!k&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new Je(n.lpMint.address)}),w=[g,P],x=[k,I],S=[o.raw,s.raw],K=o.token.mint.toBase58()===n.mintA.address?"base":"quote",T="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),x.reverse(),S.reverse(),T=c==="a"?"quote":"base"):K==="base"&&(T=c==="a"?"base":"quote");let[C,M]=w,[v,R]=x,[L,F]=S,Q=i!=null?i:await this.getAmmPoolKeys(n.id),$=this.createTxBuilder(p),ne=await f.handleTokenAccount({side:"in",amount:L,mint:C.mint,tokenAccount:v,bypassAssociatedCheck:b,checkCreateATAOwner:y}),{tokenAccount:ce}=ne,ke=Ue(ne,["tokenAccount"]);$.addInstruction(ke);let Ve=await f.handleTokenAccount({side:"in",amount:F,mint:M.mint,tokenAccount:R,bypassAssociatedCheck:b,checkCreateATAOwner:y}),{tokenAccount:de}=Ve,ye=Ue(Ve,["tokenAccount"]);$.addInstruction(ye);let Te=await f.handleTokenAccount({side:"out",amount:0,mint:new Je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:b,checkCreateATAOwner:y}),{tokenAccount:Ae}=Te,fe=Ue(Te,["tokenAccount"]);return $.addInstruction(fe),$.addInstruction({instructions:[Wc({poolInfo:n,poolKeys:Q,userKeys:{baseTokenAccount:ce,quoteTokenAccount:de,lpTokenAccount:Ae,owner:this.scope.ownerPubKey},baseAmountIn:L,quoteAmountIn:F,otherAmountMin:a.raw,fixedSide:T})],instructionTypes:[n.pooltype.includes("StablePool")?G.AmmV5AddLiquidity:G.AmmV4AddLiquidity],lookupTableAddress:Q.lookupTableAccount?[Q.lookupTableAccount]:[]}),$.addCustomComputeBudget(m),$.addTipInstruction(d),l===0?await $.buildV0():$.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,b,y]=[new Je(n.mintA.address),new Je(n.mintB.address),new Je(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,P=await g.getCreatedTokenAccount({mint:y,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),I=await g.getCreatedTokenAccount({mint:b}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:x}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),M=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:S}=M,K=Ue(M,["tokenAccount"]);h.addInstruction(K);let v=await g.handleTokenAccount({side:"out",amount:0,mint:b,tokenAccount:I,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:T}=v,C=Ue(v,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Aa({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:P,baseTokenAccount:S,quoteTokenAccount:T,owner:this.scope.ownerPubKey},lpAmount:o,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?G.AmmV5RemoveLiquidity:G.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=Fn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:b,feePayer:y}){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(y),P={};for(let Q of this.scope.account.tokenAccountRawInfos)(P[Q.accountInfo.mint.toString()]===void 0||ee(this.scope.ownerPubKey,Q.accountInfo.mint,Fn).publicKey.equals(Q.pubkey))&&(P[Q.accountInfo.mint.toString()]=Q.pubkey);let k=P[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let I=i.add(a!=null?a:new ze(0)),h=t.mintA.address===We.WSOL.mint.toString(),w=t.mintB.address===We.WSOL.mint.toString(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(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(S||{}),x===void 0)throw new Error("base token account not found");let{account:K,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(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(T||{}),K===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=x,P[t.mintB.address]=K,s!==void 0&&!(a!=null&&a.isZero())){let Q=Ft[s.programId],$=Et({programId:new Je(s.programId),poolId:new Je(s.id),owner:this.scope.ownerPubKey,version:Q}),ce,ke=await this.scope.connection.getAccountInfo($);if(ke&&(ce=to(Q).decode(ke.data)),Q!==6&&!ce){let{instruction:Te,instructionType:He}=io({id:new Je(s.id),programId:new Je(s.programId),version:Q,ledger:$,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Te],instructionTypes:[He]})}let de=[];for(let Te of s.rewardInfos){let He=Te.mint.address===We.WSOL.mint.toString();if(P[Te.mint.address])de.push(P[Te.mint.address]);else{let{account:Un,instructionParams:pn}=await this.scope.account.getOrCreateTokenAccount({mint:new Je(Te.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!He,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Un||this.logAndCreateError("farm reward account not found:",Te.mint.address),pn&&g.addInstruction(pn),de.push(Un)}}let ye=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ae={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:ye,lpAccount:k,rewardAccounts:de},fe=Ft[s.programId],ne=fe===6?oo(Ae):fe===5?ro(Ae):so(Ae),Ve={3:G.FarmV3Withdraw,5:G.FarmV5Withdraw,6:G.FarmV6Withdraw};g.addInstruction({instructions:[ne],instructionTypes:[Ve[fe]]})}let C=await this.getAmmPoolKeys(t.id),M=Aa({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:I,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[M],instructionTypes:[t.pooltype.includes("StablePool")?G.AmmV5RemoveLiquidity:G.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[v,R]=t.mintA.address===n.mintA.address?[x,K]:[K,x],L=await this.scope.clmm.getClmmPoolKeys(n.id),F=await Le.openPositionFromBaseInstructions(q(_({poolInfo:n,poolKeys:L,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:v,tokenAccountB:R},withMetadata:"create"},o),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...F.instructions],signers:F.signers,instructionTypes:[...F.instructionTypes],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),b===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:b,txTipConfig:y,feePayer:g}){var R;let P=u.feePayer||((R=this.scope.owner)==null?void 0:R.publicKey),k=u.useSOLBalance&&i.mint.equals(vr),I=u.useSOLBalance&&o.mint.equals(vr),h=this.createTxBuilder(g),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:P,amount:s}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(x||{});let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:I?{payer:P,amount:a}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||S===void 0)throw Error("you don't has some token account");let T=Ta({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:T.id,ammAuthority:T.authority,ammOpenOrders:T.openOrders,lpMint:T.lpMint,coinMint:T.baseMint,pcMint:T.quoteMint,coinVault:T.baseVault,pcVault:T.quoteVault,withdrawQueue:T.withdrawQueue,ammTargetOrders:T.targetOrders,poolTempLp:T.lpVault,marketProgramId:T.marketProgramId,marketId:T.marketId,ammConfigId:T.configId,feeDestinationId:f},{instruction:M,instructionType:v}=Pa(q(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:S,userLpVault:ee(this.scope.ownerPubKey,T.lpMint,d).publicKey,nonce:T.nonce,openTime:c,coinAmount:s,pcAmount:a}));return h.addInstruction({instructions:[M],instructionTypes:[v]}),h.addCustomComputeBudget(b),h.addTipInstruction(y),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ir,marketProgram:n=Cu,feeDestinationId:i=Lu,tokenProgram:o,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:b=!1,lotSize:y=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:k,txTipConfig:I,feePayer:h}){var Fi,Ei,Vi;let w=this.scope.ownerPubKey,x=m.feePayer||((Fi=this.scope.owner)==null?void 0:Fi.publicKey),S=m.useSOLBalance&&s.mint.equals(vr),K=m.useSOLBalance&&a.mint.equals(vr),T=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-market`}),M=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-request`}),v=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-event`}),R=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-bids`}),L=je({fromPublicKey:w,programId:n,assignSeed:T&&`${T}-asks`}),F=je({fromPublicKey:w,programId:Fn,assignSeed:T&&`${T}-baseVault`}),Q=je({fromPublicKey:w,programId:Fn,assignSeed:T&&`${T}-quoteVault`}),$=0,ce=new ze(100);function ke(){let Kt=new ze(0);for(;;)try{return{vaultOwner:Je.createProgramAddressSync([C.publicKey.toBuffer(),Kt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Kt}}catch{if(Kt.iaddn(1),Kt.gt(new ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:de,vaultSignerNonce:ye}=ke(),Ae=new ze(Math.round(10**s.decimals*y)),fe=new ze(Math.round(y*10**a.decimals*g));if(Ae.eq(Bt))throw Error("lot size is too small");if(fe.eq(Bt))throw Error("tick size or lot size is too small");let ne=await Mr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:de,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:F,quoteVault:Q,requestQueue:M,eventQueue:v,bids:R,asks:L,feeRateBps:$,quoteDustThreshold:ce,vaultSignerNonce:ye,baseLotSize:Ae,quoteLotSize:fe,lowestFeeMarket:d}}),Ve=this.createTxBuilder(h);Ve.addInstruction({instructions:ne[0].transaction.instructions,signers:ne[0].signer});for await(let Kt of ne.slice(1,ne.length))Ve.addInstruction({instructions:Kt.transaction.instructions,signers:Kt.signer,instructionTypes:Kt.instructionTypes});let{account:Te,instructionParams:He}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:x,amount:c}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:b,assignSeed:S&&T?`${T}-wsol`:void 0});Ve.addInstruction(He||{});let{account:Un,instructionParams:pn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:x,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:b,assignSeed:K&&T?`${T}-wsol`:void 0});if(Ve.addInstruction(pn||{}),Te===void 0)throw Error("you don't has base token account");if(Un===void 0)throw Error("you don't has quote token account");let et=Ta({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),In={programId:t,ammId:et.id,ammAuthority:et.authority,ammOpenOrders:et.openOrders,lpMint:et.lpMint,coinMint:et.baseMint,pcMint:et.quoteMint,coinVault:et.baseVault,pcVault:et.quoteVault,withdrawQueue:et.withdrawQueue,ammTargetOrders:et.targetOrders,poolTempLp:et.lpVault,marketProgramId:et.marketProgramId,marketId:et.marketId,ammConfigId:et.configId,feeDestinationId:i},{instruction:Mi,instructionType:vi}=Pa(q(_({},In),{userWallet:this.scope.ownerPubKey,userCoinVault:Te,userPcVault:Un,userLpVault:ee(this.scope.ownerPubKey,et.lpMint,o).publicKey,nonce:et.nonce,openTime:l,coinAmount:c,pcAmount:u}));Ve.addInstruction({instructions:[Mi],instructionTypes:[vi]});let _i=S||K?[((Ei=He==null?void 0:He.instructions)==null?void 0:Ei[0])||((Vi=pn==null?void 0:pn.instructions)==null?void 0:Vi[0])].filter(Kt=>!!Kt):void 0;return P===0?Ve.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:_i,address:_({requestQueue:M.publicKey,eventQueue:v.publicKey,bids:R.publicKey,asks:L.publicKey,baseVault:F.publicKey,quoteVault:Q.publicKey,baseMint:new Je(s.mint),quoteMint:new Je(a.mint)},In)}):Ve.sizeCheckBuild({computeBudgetConfig:k,splitIns:_i,address:_({requestQueue:M.publicKey,eventQueue:v.publicKey,bids:R.publicKey,asks:L.publicKey,baseVault:F.publicKey,quoteVault:Q.publicKey,baseMint:new Je(s.mint),quoteMint:new Je(a.mint)},In)})}async getCreatePoolFee({programId:t}){let n=Nr({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Vc.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,b]=m,[y,g]=d,P=t.version===4,k;if(P)k=new O(b.toString()).div(10**g).div(new O(f.toString()).div(10**y));else{let v=zc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new O(1e6).div(v*1e6):k=new O(v*1e6).div(1e6)}let I=n,h=new ze(0),w=new ze(0);if(!I.isZero())if(P){w=Jt(I.mul(pa),Rr);let v=I.sub(w),R=f.add(v);h=b.mul(v).div(R)}else{w=I.mul(new ze(2)).div(new ze(1e4));let v=I.sub(w);p==="quote"?h=new ze(Gc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),v.toNumber())):h=new ze(Xc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),v.toNumber()))}let x=new ze(new O(h.toString()).mul(1-s).toFixed(0)),S=h,K=x,T=new O(h.toString()).div(new O(I.sub(w).toString()).toFixed(0));!I.isZero()&&!h.isZero()&&(T=new O(h.toString()).div(10**g).div(new O(I.sub(w).toString()).div(10**y)));let C=k.sub(T).div(k).mul(100);return{amountOut:S,minAmountOut:K,currentPrice:k,executionPrice:T,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 O(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,b]=d,y=new O(b.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${y.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(y).toString()} ${l.symbol||l.address}`);let g=new ze(0),P=n;if(!P.isZero()){P.gt(b)&&(P=b.sub(new ze(1)));let K=b.sub(P);g=f.mul(P).div(K).mul(Rr).div(Rr.sub(pa))}let k=new ze(new O(g.toString()).mul(1+s).toFixed(0)),I=g,h=k;this.logDebug("amountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!P.isZero()&&(w=new O(P.toString()).div(10**m.decimals).div(new O(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 O(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let x=y.mul(I.toString()),S=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${S.toString()}%`),{amountIn:I,maxAmountIn:h,currentPrice:y,executionPrice:w,priceImpact:S}}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:b=!0,outputUseSolBalance:y=!0}=u||{},[g,P]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=b&&g.address===Y.toBase58(),I=y&&P.address===Y.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(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:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fn,mint:new Je(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:f});p.addInstruction(S||{}),x===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:x,outputTokenUseSolBalance:I,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),T=4;return t.pooltype.includes("StablePool")&&(T=5),p.addInstruction({instructions:[Lr({version:T,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:i,amountOut:o,fixedSide:a})],instructionTypes:[T===4?G.AmmV4SwapBaseIn:G.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 Je(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=Ao.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 Je(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 ze(Zp.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 O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Or({[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 H}from"@solana/web3.js";import ht from"bn.js";import{AccountLayout as $c,createAssociatedTokenAccountIdempotentInstruction as Jc,TOKEN_2022_PROGRAM_ID as En,TOKEN_PROGRAM_ID as Io}from"@solana/spl-token";var Bo=class extends _e{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var x;let{programId:t,owner:n=((x=this.scope.owner)==null?void 0:x.publicKey)||H.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),[b,y,g]=new ht(new H(i.address).toBuffer()).gt(new ht(new H(o.address).toBuffer()))?[o,i,new O(1).div(a)]:[i,o,a],P=ue.priceToSqrtPriceX64(g,b.decimals,y.decimals),k=[],I=[];b.programId===En.toBase58()&&I.push(ua(t,new H(b.address)).publicKey),y.programId===En.toBase58()&&I.push(ua(t,new H(y.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(I)).forEach((S,K)=>{S&&k.push(I[K])});let w=await Le.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:y,ammConfigId:s.id,initialPriceX64:P,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:b,mintB:y,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:b,mintB:y,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},wc),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:b,txVersion:y,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let P=this.createTxBuilder(g),k=null,I=null,h=n.useSOLBalance&&e.mintA.address===Y.toString(),w=n.useSOLBalance&&e.mintB.address===Y.toString(),[x,S]=s==="MintA"?[a,c]:[c,a],{account:K,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),P.addInstruction(T||{});let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(I=C),P.addInstruction(M||{}),(!k||!I)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:I==null?void 0:I.toBase58()});let v=t||await this.getClmmPoolKeys(e.id),R=await Le.openPositionFromBaseInstructions({poolInfo:e,poolKeys:v,ownerInfo:q(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:I}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return P.addInstruction(R),P.addCustomComputeBudget(f),P.addTipInstruction(b),P.versionBuild({txVersion:y,extInfo:_({},R.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:b,nft2022:y,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let P=this.createTxBuilder(g),k=null,I=null,h=n.useSOLBalance&&e.mintA.address===Y.toBase58(),w=n.useSOLBalance&&e.mintB.address===Y.toBase58(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(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});x&&(k=x),P.addInstruction(S||{});let{account:K,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(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&&(I=K),P.addInstruction(T||{}),(k===void 0||I===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),M=await Le.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:I},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:b,nft2022:y});return P.addInstruction(M),P.addCustomComputeBudget(p),P.addTipInstruction(f),P.versionBuild({txVersion:d,extInfo:{address:M.address}})}async increasePositionFromLiquidity(e){var T;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,b=this.createTxBuilder(f),y,g,P=c.useSOLBalance&&t.mintA.address===Y.toString(),k=c.useSOLBalance&&t.mintB.address===Y.toString(),{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new H(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});I&&(y=I),b.addInstruction(h||{});let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new H(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),b.addInstruction(x||{}),!y&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=n!=null?n:await this.getClmmPoolKeys(t.id),K=Le.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:g},liquidity:a,amountMaxA:o,amountMaxB:s,nft2022:(T=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:T.owner.equals(En)});return b.addInstruction(K),b.addCustomComputeBudget(m),b.addTipInstruction(d),b.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),b,y,g=a.useSOLBalance&&t.mintA.address===Y.toString(),P=a.useSOLBalance&&t.mintB.address===Y.toString(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new H(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&&(b=k),f.addInstruction(I||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new H(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});h&&(y=h),f.addInstruction(w||{}),!b&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=await this.getClmmPoolKeys(t.id),S=Le.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:x,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:y},base:i,baseAmount:o,otherAmountMax:s,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(En)});return f.addInstruction(S),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:S.address}})}async decreaseLiquidity(e){var v;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 b=this.createTxBuilder(f),y=o.useSOLBalance&&t.mintA.address===Y.toString(),g=o.useSOLBalance&&t.mintB.address===Y.toString(),P,k,{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new H(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});P=I,h&&b.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new H(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,x&&b.addInstruction(x);let S=[];for(let R of t.rewardDefaultInfos){let L=o.useSOLBalance&&R.mint.address===Y.toString(),F;if(R.mint.address===t.mintA.address)F=P;else if(R.mint.address===t.mintB.address)F=k;else{let{account:Q,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(R.mint.programId),mint:new H(R.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});F=Q,$&&b.addInstruction($)}S.push(F)}!P&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),T=(v=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:v.owner.equals(En),C=await Le.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:k,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:T});b.addInstruction({instructions:C.instructions,instructionTypes:[G.ClmmDecreasePosition]});let M=_({},C.address);if(o.closePosition){let R=await Le.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:T});b.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),M=_(_({},M),R.address)}return b.addCustomComputeBudget(m),b.addTipInstruction(d),b.versionBuild({txVersion:p,extInfo:{address:M}})}async lockPosition(e){var f;let{programId:t=Hi,authProgramId:n=or,poolProgramId:i=Xn,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(En)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=Hi,authProgramId:n=or,clmmProgram:i=Xn,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()),b=this.createTxBuilder(p),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let g=Bi.decode(y.data),P=a.useSOLBalance&&f.mintA.address===Y.toString(),k=a.useSOLBalance&&f.mintB.address===Y.toString(),I,h,{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new H(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});I=w,x&&b.addInstruction(x);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new H(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=S,K&&b.addInstruction(K);let T={},C=[];for(let de of f.rewardInfos){let ye=a.useSOLBalance&&de.mint.address===Y.toString(),Ae=T[de.mint.address];if(!Ae){let{account:fe,instructionParams:ne}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(de.mint.programId),mint:new H(de.mint.address),notUseTokenAccount:ye,owner:this.scope.ownerPubKey,skipCloseAccount:!ye,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ye?!1:c});Ae=fe,ne&&b.addInstruction(ne)}T[de.mint.address]=Ae,C.push(Ae)}let M=Ii(t,s.lockNftMint).publicKey,v=ee(this.scope.ownerPubKey,s.lockNftMint,Io).publicKey,R=Z.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),L=Z.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:F}=we(new H(f.programId),s.poolId,R),{publicKey:Q}=we(new H(f.programId),s.poolId,L),{publicKey:$}=on(new H(f.programId),s.poolId,g.tickLower,g.tickUpper),ce=[];for(let de=0;de<f.rewardInfos.length;de++)ce.push({poolRewardVault:new H(f.rewardInfos[de].vault),ownerRewardVault:C[de],rewardMint:new H(f.rewardInfos[de].mint.address)});let ke=await Le.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:M,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:v,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:$,vaultA:new H(f.vault.A),vaultB:new H(f.vault.B),tickArrayLower:F,tickArrayUpper:Q,userVaultA:I,userVaultB:h,mintA:new H(f.mintA.address),mintB:new H(f.mintB.address),rewardAccounts:ce,exTickArrayBitmap:Ye(i,s.poolId).publicKey});return b.addInstruction({instructions:[ke],instructionTypes:[G.ClmmHarvestLockPosition]}),b.addCustomComputeBudget(l),b.addTipInstruction(m),b.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(En)});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()===Y.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(n.mint.address),mint:new H(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ht(new O(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),b=Le.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new H(n.mint.programId),mint:new H(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:me.decimalToX64(n.perSecond)}});return u.addInstruction(b),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:b.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===Y.toString(),b=p.perSecond.mul(p.endTime-p.openTime),{account:y,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(p.mint.programId),mint:new H(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new O(b.toFixed(0)).gte(b)?b.toFixed(0):b.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:o,checkCreateATAOwner:s});g&&m.addInstruction(g),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let P=t!=null?t:await this.getClmmPoolKeys(e.id),k=Le.initRewardInstructions({poolInfo:e,poolKeys:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new H(p.mint.programId),mint:new H(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:me.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(Y),{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 ht(new O(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),b=Le.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:me.decimalToX64(n.perSecond)}});return l.addInstruction(b),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:b.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===Y.toString(),{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(p.mint.programId),mint:new H(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new O(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});y&&m.addInstruction(y),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),P=Le.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{mint:new H(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:me.decimalToX64(p.perSecond)}});m.addInstruction(P),d=_(_({},d),P.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(Y),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(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 b=await this.getClmmPoolKeys(e.id),y=Le.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(y),m.addCustomComputeBudget(s),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:y.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(P=>P.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals(Y),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(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),b&&u.addInstruction(b);let y=await this.getClmmPoolKeys(e.id),g=Le.collectRewardInstructions({poolInfo:e,poolKeys:y,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:b}){let y=this.createTxBuilder(b),g=n.toString()===e.mintA.address,P=c.useSOLBalance&&e.mintA.address===Y.toBase58(),k=c.useSOLBalance&&e.mintB.address===Y.toBase58(),I;!s||s.equals(new O(0))?I=g?Wt.add(new ht(1)):qt.sub(new ht(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=S,K&&y.addInstruction(K)}let w;if(!w){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(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=S,K&&y.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:P,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Le.makeSwapBaseInInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new H(n),amountIn:i,amountOutMin:o,sqrtPriceLimitX64:I,remainingAccounts:u})),y.addCustomComputeBudget(p),y.addTipInstruction(f),y.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:b}){let y=this.createTxBuilder(b),g=n.toString()===e.mintB.address,P=c.useSOLBalance&&e.mintA.address===Y.toBase58(),k=c.useSOLBalance&&e.mintB.address===Y.toBase58(),I;!s||s.equals(new O(0))?I=n.toString()===e.mintB.address?Wt.add(new ht(1)):qt.sub(new ht(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new H(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=S,K&&y.addInstruction(K)}let w;if(!w){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new H(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=S,K&&y.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:P,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Le.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new H(n),amountOut:i,amountInMax:o,sqrtPriceLimitX64:I,remainingAccounts:u})),y.addCustomComputeBudget(p),y.addTipInstruction(f),y.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=Hi,lockAuth:d=or,clmmProgram:p=Xn}){var k,I;let f={};for(let h of this.scope.account.tokenAccountRawInfos)o?ee(this.scope.ownerPubKey,h.accountInfo.mint,a).publicKey.equals(h.pubkey)&&(f[h.accountInfo.mint.toString()]=h.pubkey):f[h.accountInfo.mint.toString()]=h.pubkey;let b=Object.values(t).flat().map(h=>h.nftMint),y=await Oe(this.scope.connection,b.map(h=>({pubkey:h}))),g={};y.forEach(h=>{var w,x;g[h.pubkey.toBase58()]=(x=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?x:null});let P=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(R=>!R.liquidity.isZero()||R.rewardInfos.find(L=>!L.rewardAmountOwed.isZero())))continue;let w=h,x=i.useSOLBalance&&w.mintA.address===Y.toString(),S=i.useSOLBalance&&w.mintB.address===Y.toString(),K=f[w.mintA.address];if(!K)if(x){let{account:R,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new H(w.mintA.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:o,checkCreateATAOwner:s});K=R,L&&P.addInstruction(L)}else{let R=new H(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(R,new H(w.mintA.programId)),P.addInstruction({instructions:[Jc(this.scope.ownerPubKey,K,this.scope.ownerPubKey,R,new H(w.mintA.programId))]})}let T=f[w.mintB.address];if(!T)if(S){let{account:R,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new H(w.mintB.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:o,checkCreateATAOwner:s});T=R,L&&P.addInstruction(L)}else{let R=new H(w.mintB.address);T=this.scope.account.getAssociatedTokenAccount(R,new H(w.mintB.programId)),P.addInstruction({instructions:[Jc(this.scope.ownerPubKey,T,this.scope.ownerPubKey,R,new H(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=T;let C=[];for(let R of w.rewardDefaultInfos){let L=i.useSOLBalance&&R.mint.address===Y.toString(),F=f[R.mint.address];if(!F){let{account:Q,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new H(R.mint.programId),mint:new H(R.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:L?!1:o});F=Q,$&&P.addInstruction($)}f[R.mint.address]=F,C.push(F)}let M=await this.getClmmPoolKeys(w.id),v=[];for(let R=0;R<M.rewardInfos.length;R++)v.push({poolRewardVault:new H(M.rewardInfos[R].vault),ownerRewardVault:C[R],rewardMint:new H(M.rewardInfos[R].mint.address)});for(let R of t[h.id]){let L=(k=n==null?void 0:n[h.id])==null?void 0:k[R.nftMint.toBase58()];if(L){let F=ee(this.scope.ownerPubKey,L.lockNftMint,Io).publicKey,Q=Z.getTickArrayStartIndexByTick(R.tickLower,M.config.tickSpacing),$=Z.getTickArrayStartIndexByTick(R.tickUpper,M.config.tickSpacing),{publicKey:ce}=we(new H(M.programId),L.poolId,Q),{publicKey:ke}=we(new H(M.programId),L.poolId,$),{publicKey:de}=on(new H(M.programId),L.poolId,R.tickLower,R.tickUpper),ye=Ii(m,L.lockNftMint).publicKey,Ae=Le.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:ye,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:L.lockNftMint,lockNftAccount:F,positionNftAccount:L.nftAccount,positionId:L.positionId,poolId:L.poolId,protocolPosition:de,vaultA:new H(M.vault.A),vaultB:new H(M.vault.B),tickArrayLower:ce,tickArrayUpper:ke,userVaultA:K,userVaultB:T,mintA:new H(M.mintA.address),mintB:new H(M.mintB.address),rewardAccounts:v,exTickArrayBitmap:Ye(p,L.poolId).publicKey});P.addInstruction({instructions:[Ae],instructionTypes:[G.ClmmHarvestLockPosition],lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:[]})}else{let F=Le.decreaseLiquidityInstructions({poolInfo:w,poolKeys:M,ownerPosition:R,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:T,rewardAccounts:C},liquidity:new ht(0),amountMinA:new ht(0),amountMinB:new ht(0),nft2022:(I=g[R.nftMint.toBase58()])==null?void 0:I.equals(En)});P.addInstruction(F)}}}return c===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(mo(e).publicKey);return t?Oc.decode(t.data).whitelistMints.filter(i=>!i.equals(H.default)):[]}async getOwnerPositionInfo({programId:e=Xn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ht(1))).map(s=>kt(new H(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=Bi.decode(s.data);o.push(a)}),o}async getOwnerLockedPositionInfo({programId:e=Hi}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new ht(1))).map(c=>Ii(new H(e),c.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];i.forEach(c=>{if(!c)return;let u=Mc.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=Bi.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 H(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=Jn.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 H(c)}))),o={};i.forEach(c=>{!c.accountInfo||(o[c.pubkey.toBase58()]=Lc.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()||Io.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?_n((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:At({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Io.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?_n((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 pi({connection:this.scope.connection,mints:Array.from(n).map(m=>new H(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=Cc(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number($c.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number($c.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(H.default)).map(m=>({mint:At({address:m.tokenMint.toBase58(),programId:Io.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:o[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as mf,NATIVE_MINT as Ur,TOKEN_PROGRAM_ID as Mt,createAssociatedTokenAccountIdempotentInstruction as cl}from"@solana/spl-token";import Ba from"bn.js";import Vr from"decimal.js-light";import So from"bn.js";function _r(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function $p(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=_r(r,e);return n.gt(Ki)&&(t=t.add(new So(1)),e=r.div(t),n=_r(r,t),n.gt(Ki)&&(e=e.add(new So(1)))),[t,e]}var Ki=new So(0),Fr=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s]=$p(i,o),a=n.sub(s);if(a.isZero())throw Error("destinationAmountSwapped is zero");return{destinationAmountSwapped:a}}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 _r(e.mul(n),t).gt(Ki)&&s.gt(Ki)&&(s=s.add(new So(1))),_r(e.mul(i),t).gt(Ki)&&a.gt(Ki)&&(a=a.add(new So(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Er=class{static tradingFee(e,t){return er(e,t,tn)}static protocolFee(e,t){return Ts(e,t,tn)}static fundFee(e,t){return Ts(e,t,tn)}};var Dr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let o=Er.tradingFee(e,i),s=e.sub(o),{destinationAmountSwapped:a}=Fr.swapWithoutFees(s,t,n);return{newSwapDestinationAmount:n.sub(a),sourceAmountSwapped:e,destinationAmountSwapped:a,tradeFee:o}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:o,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,o,e.decimals,t.decimals,e.address]:[o,i,t.decimals,e.decimals,t.address],p=new Vr(u.toString()).div(10**m).div(new Vr(c.toString()).div(10**l)),f=a.gte(u)?u.sub(new Ba(1)):a,b=u.sub(f),y=Jt(c.mul(f),b),g=Jt(y.mul(new Ba(1e6)),new Ba(1e6).sub(n)),P=g.sub(y),k=new Vr(f.toString()).div(10**m).div(new Vr(g.toString()).div(10**l)),I=p.isZero()?0:k.sub(p).div(p).abs().toNumber();return{amountRealOut:f,amountIn:g,amountInWithoutFee:y,tradeFee:P,priceImpact:I}}};import Ze from"bn.js";import{PublicKey as Co,TransactionInstruction as ri,Keypair as af,SystemProgram as uf}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as nl,TOKEN_2022_PROGRAM_ID as xa,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var Jp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),QS=Buffer.from("amm_config","utf8"),ef=Buffer.from("pool","utf8"),tf=Buffer.from("pool_lp_mint","utf8"),nf=Buffer.from("pool_vault","utf8"),of=Buffer.from("observation","utf8");function Ci(r){return le([Jp],r)}function Sa(r,e,t,n){return le([ef,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function rf(r,e){return le([tf,e.toBuffer()],r)}function el(r,e,t){return le([nf,e.toBuffer(),t.toBuffer()],r)}function xo(r,e){return le([of,e.toBuffer()],r)}function tl({poolId:r,programId:e,configId:t,mintA:n,mintB:i}){let o=Ci(e).publicKey,s=r||Sa(e,t,n,i).publicKey,a=rf(e,s).publicKey,c=el(e,s,n).publicKey,u=el(e,s,i).publicKey,l=xo(e,s).publicKey;return{poolId:s,configId:t,authority:o,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var sf=Buffer.from("locked_liquidity","utf8");function Ko(r,e){return le([sf,e.toBuffer()],r)}var cf=Pe("Raydium_cpmm"),si={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]};function il(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountMaxA"),A("amountMaxB"),A("openTime")]),h=Sa(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:y,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:nl,isSigner:!1,isWritable:!1},{pubkey:As,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1}],x=Buffer.alloc(I.span);return I.encode({amountMaxA:g,amountMaxB:P,openTime:k},x),new ri({keys:w,programId:r,data:Buffer.from([...si.initialize,...x])})}function ol(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),y=[{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:Vn,isSigner:!1,isWritable:!1},{pubkey:xa,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(b.span);return cf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),b.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new ri({keys:y,programId:r,data:Buffer.from([...si.deposit,...g])})}function rl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMinA"),A("amountMinB")]),y=[{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:Vn,isSigner:!1,isWritable:!1},{pubkey:xa,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Rn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);return b.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new ri({keys:y,programId:r,data:Buffer.from([...si.withdraw,...g])})}function Wr(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountIn"),A("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}],P=Buffer.alloc(y.span);return y.encode({amountIn:f,amounOutMin:b},P),new ri({keys:g,programId:r,data:Buffer.from([...si.swapBaseInput,...P])})}function sl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountInMax"),A("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}],P=Buffer.alloc(y.span);return y.encode({amountInMax:f,amountOut:b},P),new ri({keys:g,programId:r,data:Buffer.from([...si.swapBaseOutput,...P])})}async function al(r){var y;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:i,getEphemeralSigners:o}=r,s=[],[a,c]=[new Co(t.id),new Co(t.lpMint.address)],u;if(o)u=new Co((await o(1))[0]);else{let g=af.generate();s.push(g),u=g.publicKey}let{publicKey:l}=ee(i,u,Vn),{publicKey:m}=Pn(u),{publicKey:d}=Ko(r.lockProgram,u),{publicKey:p}=ee(e.wallet,c,Vn),{publicKey:f}=ee(r.lockAuthProgram,c,Vn),b=lf({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 Co(n.vault.A),poolVaultB:new Co(n.vault.B),metadataAccount:m,lpAmount:r.lpAmount,withMetadata:(y=r.withMetadata)!=null?y:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[b],signers:s,instructionTypes:[G.CpmmLockLp],lookupTableAddress:[]}}function lf({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:b,withMetadata:y}){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:ct,isSigner:!1,isWritable:!1},{pubkey:uf.programId,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:nl,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1}],P=E([A("lpAmount"),Ge("withMetadata")]),k=Buffer.alloc(P.span);P.encode({lpAmount:b,withMetadata:y},k);let I=Buffer.from([...si.lockCpLiquidity,...k]);return new ri({keys:g,programId:r,data:I})}function Ka({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:b,cpmmAuthProgram:y}){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:b!=null?b:rr,isSigner:!1,isWritable:!1},{pubkey:y!=null?y:Nu,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:Vn,isSigner:!1,isWritable:!1},{pubkey:xa,isSigner:!1,isWritable:!1},{pubkey:Rn,isSigner:!1,isWritable:!1}],P=E([A("lpFeeAmount")]),k=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},k);let I=Buffer.from([...si.collectCpFee,...k]);return new ri({keys:g,programId:r,data:I})}var ul=E([Se(8),W("bump"),Ge("disableCreatePool"),Ct("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),N("protocolOwner"),N("fundOwner"),j(A(),16)]),qr=E([Se(8),N("configId"),N("poolCreator"),N("vaultA"),N("vaultB"),N("mintLp"),N("mintA"),N("mintB"),N("mintProgramA"),N("mintProgramB"),N("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),j(A(),32)]);var Ro=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 z(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=qr.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 z(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]]=ul.decode(f.data)}}let c={},u=await Oe(this.scope.connection,s.map(m=>({pubkey:new z(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(mf.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 O(f.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(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 z(i),configInfo:o.configInfo,version:7,authority:Ci(o.programId).publicKey,mintA:At({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?_n((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?_n((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await pi({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?_n(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?_n(n[t.mintB.toBase58()].feeConfig):void 0}}),s=At({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Mt.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 O(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new O(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:Ci(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:xo(t.programId,new z(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var b=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}=b,p=Ue(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var F,Q,$;let y=o.feePayer||((F=this.scope.owner)==null?void 0:F.publicKey),g=new Ze(new z(p.mintA.address).toBuffer()).lte(new Ze(new z(p.mintB.address).toBuffer())),[P,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[I,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=o.useSOLBalance&&P.address===Ur.toBase58(),x=o.useSOLBalance&&k.address===Ur.toBase58(),[S,K]=[new z(P.address),new z(k.address)],T=this.createTxBuilder(d),{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:P.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:y,amount:I}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:a});T.addInstruction(M||{});let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new z(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:y,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:s,checkCreateATAOwner:a});if(T.addInstruction(R||{}),C===void 0||v===void 0)throw Error("you don't has some token account");let L=tl({poolId:e,programId:t,configId:new z(u.id),mintA:S,mintB:K});return T.addInstruction({instructions:[il(t,this.scope.ownerPubKey,new z(u.id),L.authority,L.poolId,S,K,L.lpMint,C,v,ee(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,n,new z((Q=P.programId)!=null?Q:Mt),new z(($=k.programId)!=null?$:Mt),L.observationId,I,h,i)],instructionTypes:[G.CpmmCreatePool]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),T.versionBuild({txVersion:c,extInfo:{address:q(_({},L),{mintA:P,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:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(_({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new rt(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(i.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),I=k.amount,h=t.mintA.address===Ur.toString(),w=t.mintB.address===Ur.toString(),x=this.createTxBuilder(d),[S,K]=[new z(t.mintA.address),new z(t.mintB.address)],{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(o?i:I).isZero()?{payer:this.scope.ownerPubKey,amount:o?i:I}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:b});x.addInstruction(C||{});let{account:M,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(o?I:i).isZero()?{payer:this.scope.ownerPubKey,amount:o?I:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:b});x.addInstruction(v||{}),!T&&!M&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let R=await p.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:R,bypassAssociatedCheck:f,checkCreateATAOwner:b}),{tokenAccount:L}=ce,F=Ue(ce,["tokenAccount"]);x.addInstruction(F);let Q=n!=null?n:await this.getCpmmPoolKeys(t.id),$=new rt(new Ze(1)).sub(s);return x.addInstruction({instructions:[ol(new z(t.programId),this.scope.ownerPubKey,new z(Q.authority),new z(t.id),L,T,M,new z(Q.vault.A),new z(Q.vault.B),S,K,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:$.mul(g).quotient,o?P.amount:I,o?I:P.amount)],instructionTypes:[G.CpmmAddLiquidity],lookupTableAddress:Q.lookupTableAccount?[Q.lookupTableAccount]:[]}),x.addCustomComputeBudget(c),x.addTipInstruction(u),x.versionBuild({txVersion:m})}async withdrawLiquidity(e){var F,Q;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],b=await this.scope.fetchEpochInfo(),[y,g]=[Ce(p,t.mintA.extensions.feeConfig,b,!1),Ce(f,t.mintB.extensions.feeConfig,b,!1)],{account:P}=this.scope,k=this.createTxBuilder(u),[I,h]=[new z(t.mintA.address),new z(t.mintB.address)],w=I.equals(Y),x=h.equals(Y),S,K,{account:T,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});S=T,C&&k.addInstruction(C);let{account:M,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(x&&l),associatedOnly:!x,checkCreateATAOwner:!1});K=M,v&&k.addInstruction(v),(!S||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let R=await P.getCreatedTokenAccount({mint:new z(t.lpMint.address)});R||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let L=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[rl(new z(t.programId),this.scope.ownerPubKey,new z(L.authority),new z(t.id),R,S,K,new z(L.vault.A),new z(L.vault.B),I,h,new z(t.lpMint.address),i,p.sub((F=y.fee)!=null?F:new Ze(0)),f.sub((Q=g.fee)!=null?Q:new Ze(0)))],instructionTypes:[G.CpmmWithdrawLiquidity],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),k.addCustomComputeBudget(s),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,M,v,R,L,F;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:b,associatedOnly:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[P,k]=[new z(t.mintA.address),new z(t.mintB.address)];o?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ze((1+c)*1e4)).div(new Ze(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ze((1-c)*1e4)).div(new Ze(1e4));let I=t.mintA.address===Y.toBase58(),h=t.mintB.address===Y.toBase58(),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new z((C=t.mintA.programId)!=null?C:Mt),owner:this.scope.ownerPubKey,createInfo:I||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:y,checkCreateATAOwner:b});x&&g.addInstruction(x);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new z((M=t.mintB.programId)!=null?M:Mt),owner:this.scope.ownerPubKey,createInfo:h||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:y,checkCreateATAOwner:b});K&&g.addInstruction(K),(!w||!S)&&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:S,mintAUseSOLBalance:I,mintBUseSOLBalance:h,associatedOnly:y});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[o?sl(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),i?w:S,i?S:w,new z(T.vault[i?"A":"B"]),new z(T.vault[i?"B":"A"]),new z((L=t[i?"mintA":"mintB"].programId)!=null?L:Mt),new z((F=t[i?"mintB":"mintA"].programId)!=null?F:Mt),i?P:k,i?k:P,xo(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Wr(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),i?w:S,i?S:w,new z(T.vault[i?"A":"B"]),new z(T.vault[i?"B":"A"]),new z((v=t[i?"mintA":"mintB"].programId)!=null?v:Mt),new z((R=t[i?"mintB":"mintA"].programId)!=null?R:Mt),i?P:k,i?k:P,xo(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[o?G.CpmmSwapBaseOut:G.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,b,y;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 al({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:sr,lockAuthProgram:(b=e.authProgram)!=null?b:ar,lpAmount:n,withMetadata:(y=e.withMetadata)!=null?y:!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 M;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:o=sr,authProgram:s=ar,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,b]=[new z(t.mintA.address),new z(t.mintB.address)],y=f.equals(Y),g=b.equals(Y),P,k,{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(y&&m),associatedOnly:!y,checkCreateATAOwner:!1});P=I,h&&p.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,x&&p.addInstruction(x),(!P||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:k});let S=(M=e.poolKeys)!=null?M:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,i,Mt),{publicKey:T}=Ko(o,i),{publicKey:C}=ee(s,new z(t.lpMint.address),Mt);return p.addInstruction({instructions:[Ka({programId:o,nftOwner:this.scope.ownerPubKey,auth:s,nftMint:i,nftAccount:K,lockPda:T,poolId:new z(t.id),mintLp:new z(S.mintLp.address),userVaultA:P,userVaultB:k,poolVaultA:new z(S.vault.A),poolVaultB:new z(S.vault.B),mintA:f,mintB:b,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[G.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){let{lockInfo:t,programId:n=sr,authProgram:i=ar,cpmmProgram:o,computeBudgetConfig:s,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};return t.forEach(async d=>{var T;let{poolInfo:p,lpFeeAmount:f,nftMint:b}=d;if(f.isZero())return;let[y,g]=[new z(p.mintA.address),new z(p.mintB.address)],P=y.equals(Y),k=g.equals(Y),I=m[p.mintA.address],h=m[p.mintB.address];if(!I)if(P){let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintA.programId,mint:new z(p.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});I=C,M&&l.addInstruction(M),m[p.mintA.address]=C}else{let C=new z(p.mintA.address);I=this.scope.account.getAssociatedTokenAccount(C,new z(p.mintA.programId)),l.addInstruction({instructions:[cl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,C)]}),m[p.mintA.address]=I}if(!h)if(k){let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintB.programId,mint:new z(p.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});h=C,M&&l.addInstruction(M),m[p.mintB.address]=C}else{let C=new z(p.mintB.address);h=this.scope.account.getAssociatedTokenAccount(C,new z(p.mintB.programId)),l.addInstruction({instructions:[cl(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C)]}),m[p.mintB.address]=h}(!I||!h)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:I,tokenAccountB:h});let w=(T=d.poolKeys)!=null?T:await this.getCpmmPoolKeys(p.id),{publicKey:x}=ee(u,b,Mt),{publicKey:S}=Ko(n,b),{publicKey:K}=ee(i,new z(p.lpMint.address),Mt);l.addInstruction({instructions:[Ka({programId:n,nftOwner:this.scope.ownerPubKey,auth:i,nftMint:b,nftAccount:x,lockPda:S,poolId:new z(p.id),mintLp:new z(w.mintLp.address),userVaultA:I,userVaultB:h,poolVaultA:new z(w.vault.A),poolVaultB:new z(w.vault.B),mintA:y,mintB:g,lockLpVault:K,lpFeeAmount:f,cpmmProgram:o==null?void 0:o.programId,cpmmAuthProgram:o==null?void 0:o.authProgram})],instructionTypes:[G.CpmmCollectLockFee]})}),a===0?l.sizeCheckBuildV0({computeBudgetConfig:s}):l.sizeCheckBuild({computeBudgetConfig:s})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let o=n.toString()===e.mintB.address,s=Dr.swap(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ze((1-i)*1e4)).div(new Ze(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var I,h,w,x,S,K,T,C,M;let c=1-Number(o.toSignificant())/100,u=new Ze(new O(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((I=l.fee)!=null?I:new Ze(0)),d=new Ze(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.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),b={amount:Bt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let v=df(f,t,n,d);this.logDebug("lpAmountData:",{amountA:v.amountA.toString(),amountB:v.amountB.toString()}),b=Ce(v[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let y=new rt(new Ze(1)).add(o),g=new rt(new Ze(1)).sub(o),P=Ce(y.mul(b.amount.sub((x=b.fee)!=null?x:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=Ce(g.mul(b.amount.sub((S=b.fee)!=null?S:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",b.amount.toString(),"anotherAmountFee:",(T=(K=b.fee)==null?void 0:K.toString())!=null?T:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(M=(C=P.fee)==null?void 0:C.toString())!=null?M:0),{inputAmountFee:l,anotherAmount:b,maxAnotherAmount:P,minAnotherAmount:k,liquidity:f}}};function df(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 ui}from"@solana/web3.js";import{createTransferInstruction as bl,TOKEN_PROGRAM_ID as $e,TOKEN_2022_PROGRAM_ID as zr}from"@solana/spl-token";import Qr from"bn.js";var ll={[Bs.toBase58()]:3},ml={3:Bs};var Ca=E([Se(5),Se(8),N("ownAddress"),A("vaultSignerNonce"),N("baseMint"),N("quoteMint"),N("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),N("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),N("requestQueue"),N("eventQueue"),N("bids"),N("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Se(7)]),dl={3:Ca};import{PublicKey as pl}from"@solana/web3.js";var Gr=Pe("Serum"),Xr=class{static getProgramId(e){let t=ml[e];return t||Gr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ll[t];return n||Gr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=dl[e];return t||Gr.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=pl.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Gr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:pl.default,nonce:i}}};import{PublicKey as se,SystemProgram as pf,TransactionInstruction as ff}from"@solana/web3.js";import ai from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as bf,TOKEN_2022_PROGRAM_ID as yf,TOKEN_PROGRAM_ID as gf}from"@solana/spl-token";function Af(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){var w;let b=[],y=[B({pubkey:gf,isWritable:!1}),B({pubkey:yf,isWritable:!1}),B({pubkey:bf,isWritable:!1}),B({pubkey:pf.programId,isWritable:!1}),B({pubkey:e,isSigner:!0})];y.push(B({pubkey:t})),y.push(B({pubkey:i}));let g=[c,u],P=[l,m],k=[o,s,a];for(let x=0;x<g.length;x++){let S=g[x],K=k[x]===S.mintA.address;if(y.push(B({pubkey:new se(S.programId),isWritable:!1})),x===g.length-1?y.push(B({pubkey:i})):y.push(B({pubkey:n})),y.push(B({pubkey:new se(k[x])})),y.push(B({pubkey:new se(k[x+1])})),S.version===6){let T=P[x];y.push(B({pubkey:new se(T.config.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(K?T.vault.A:T.vault.B)})),y.push(B({pubkey:new se(K?T.vault.B:T.vault.A)})),y.push(B({pubkey:new se(S.observationId)})),y.push(B({pubkey:Rn})),y.push(B({pubkey:Ye(new se(S.programId),new se(S.id)).publicKey})),b.push(Pf(S.sqrtPriceX64.toString(),K));for(let C of(w=f[x])!=null?w:[])y.push(B({pubkey:new se(C)}))}else if(S.version===5){let T=P[x];y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.authority),isWritable:!1})),y.push(B({pubkey:new se(T.marketProgramId)})),y.push(B({pubkey:new se(T.marketAuthority)})),y.push(B({pubkey:Ru,isWritable:!1})),y.push(B({pubkey:new se(T.openOrders)})),y.push(B({pubkey:new se(T.vault.A)})),y.push(B({pubkey:new se(T.vault.B)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.marketId)})),y.push(B({pubkey:new se(T.marketBids)})),y.push(B({pubkey:new se(T.marketAsks)})),y.push(B({pubkey:new se(T.marketEventQueue)})),y.push(B({pubkey:new se(T.marketBaseVault)})),y.push(B({pubkey:new se(T.marketQuoteVault)}))}else if(S.version===4){let T=P[x],C=S.status!==1;y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(T.authority),isWritable:!1})),y.push(B({pubkey:new se(C?T.id:T.marketProgramId)})),y.push(B({pubkey:new se(C?T.id:T.marketAuthority)})),y.push(B({pubkey:new se(C?T.id:T.openOrders)})),y.push(B({pubkey:new se(T.vault.A)})),y.push(B({pubkey:new se(T.vault.B)})),y.push(B({pubkey:new se(C?T.id:T.marketId)})),y.push(B({pubkey:new se(C?T.id:T.marketBids)})),y.push(B({pubkey:new se(C?T.id:T.marketAsks)})),y.push(B({pubkey:new se(C?T.id:T.marketEventQueue)})),y.push(B({pubkey:new se(C?T.id:T.marketBaseVault)})),y.push(B({pubkey:new se(C?T.id:T.marketQuoteVault)}))}else if(S.version===7){let T=P[x];y.push(B({pubkey:new se(T.authority)})),y.push(B({pubkey:new se(T.config.id)})),y.push(B({pubkey:new se(T.id)})),y.push(B({pubkey:new se(K?T.vault.A:T.vault.B)})),y.push(B({pubkey:new se(K?T.vault.B:T.vault.A)})),y.push(B({pubkey:new se(S.observationId)}))}else throw Error("pool type error")}let I=E([W("insId"),A("amountIn"),A("amountOut"),j(oe(),b.length,"clmmPriceLimit")]),h=Buffer.alloc(I.span);return I.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:b},h),new ff({keys:y,programId:r,data:h})}function Pf(r,e){if(r)if(e){let t=new ai(r).div(new ai(25));return t.gt(Ir)?t:Ir}else{let t=new ai(r).mul(new ai(25));return t.lt(Br)?t:Br}else return e?Ir:Br}function fl({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=lt(m),p=t.equals(d.mintA.address)?Wt.add(Lt):qt.sub(Lt);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 ai(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:[Wr(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 se(m[d?"mintA":"mintB"].address),new se(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?G.CpmmSwapBaseIn:G.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Lr({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 ai(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?G.AmmV5SwapBaseIn:G.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:[Af(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 ai(0)),n.remainingAccounts)],instructionTypes:[G.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(b=>b!==void 0),address:{}}}else throw Error("route type error")}var hn=new Qr(0),Lo=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(Y));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=J(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(a.addInstruction({instructions:[yn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):a.addInstruction({instructions:[yn({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 On({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(Y),d=l.amount.token.mint.equals(Y),p=u.amount.token.mint,f=l.amount.token.mint,{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?zr:$e,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(y&&c.addInstruction(y),b===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?zr:$e);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?zr:$e,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:[yn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:$e})],endInstructionTypes:[G.CloseAccount]});let P;if(e.routeType==="route"){let h=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?zr:$e)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),I=fl({routeProgram:o,inputMint:p,swapInfo:q(_({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:b,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[bl(b,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[G.TransferAmount]}),h.addInstruction(I);let{transactions:w}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[bl(b,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[G.TransferAmount]})}return c.addInstruction(I),s===0?c.sizeCheckBuildV0({computeBudgetConfig:i,address:I.address}):c.sizeCheckBuild({computeBudgetConfig:i,address:I.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ir,clmm:n=Xn,cpmm:i=rr}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ao.offsetOf("baseMint"),length:64}}),s=E([N("baseMint"),N("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=E([N("mintA"),N("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Jn.span}],dataSlice:{offset:Jn.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:qr.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:o}){e=e.toString()===ui.default.toString()?Y:e,t=t.toString()===ui.default.toString()?Y: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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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:$e,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 b 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),b.version===6&&a[b.id.toString()]===void 0?a[b.id.toString()]=b:b.version===7&&c[b.id.toString()]===void 0?c[b.id.toString()]=b:(b.version===4||b.version===5)&&s[b.id.toString()]===void 0&&(s[b.id.toString()]=b)}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(b=>[b.mintA.toBase58(),b.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(b=>b.id)),s=Or(o),a={};Object.values(s).forEach(b=>{i.delete(b.mintA.address),a[b.mintA.address]={address:new ui(b.mintA.address),programId:$e,mintAuthority:null,supply:BigInt(0),decimals:b.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(b.mintB.address),a[b.mintB.address]={address:new ui(b.mintB.address),programId:$e,mintAuthority:null,supply:BigInt(0),decimals:b.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(b=>b.id.toBase58()),!0);Object.values(c).forEach(b=>{let[y,g]=[b.mintA.toBase58(),b.mintB.toBase58()];b.mintProgramA.equals($e)?(i.delete(y),a[y]={address:b.mintA,programId:b.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:b.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(y),b.mintProgramB.equals($e)?(i.delete(g),a[g]={address:b.mintB,programId:b.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:b.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 pi({connection:this.scope.connection,mints:Array.from(i).map(b=>new ui(b))});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(b=>b.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((b,y)=>q(_({},b),{[y]:q(_({},e.routePathDict[y]),{mintProgram:a[y].programId,mDecimals:a[y].decimals,in:e.routePathDict[y].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[y].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,P,k,I,h,w,x,S,K;let m=l===void 0?new Qr(0):e.raw.mul(new Qr(l.feeBps.toNumber())).div(new Qr(1e4)),d=e.raw.sub(m),p=new Ke(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},b=q(_({},t),{address:pt(t.address).toString()}),y=[];for(let T of n)try{y.push(q(_({},this.computeAmountOut({itemPool:T,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",T.version,T.id.toString(),C.message)}this.logDebug("direct done");for(let[T,C]of Object.entries(i)){let M={chainId:101,address:T,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},v=C.in.map(L=>{try{return{pool:L,data:this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:M,amountIn:p})}}catch(F){this.logDebug("route in error",L.version,L.id.toString(),F.message);return}}).sort((L,F)=>{var ce,ke,de,ye;let Q=L===void 0?hn:L.data.amountOut.amount.raw.sub((ke=(ce=L.data.amountOut.fee)==null?void 0:ce.raw)!=null?ke:hn),$=F===void 0?hn:F.data.amountOut.amount.raw.sub((ye=(de=F.data.amountOut.fee)==null?void 0:de.raw)!=null?ye:hn);return Q.lt($)?1:-1})[0];if(v===void 0)continue;let R=new Ke(Cr(M),v.data.amountOut.amount.raw.sub((P=(g=v.data.amountOut.fee)==null?void 0:g.raw)!=null?P:hn));for(let L of C.out)try{let F=this.computeAmountOut({itemPool:L,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:R});y.push(q(_({},F),{allTrade:!!(v.data.allTrade&&F.allTrade),amountIn:v.data.amountIn,amountOut:F.amountOut,minAmountOut:F.minAmountOut,currentPrice:void 0,executionPrice:new O(new It({baseToken:v.data.amountIn.amount.token,denominator:v.data.amountIn.amount.raw,quoteToken:F.amountOut.amount.token,numerator:F.amountOut.amount.raw.sub((I=(k=F.amountOut.fee)==null?void 0:k.raw)!=null?I:hn)}).toFixed()),priceImpact:new O(v.data.priceImpact.add(F.priceImpact).toFixed()),fee:[v.data.fee[0],F.fee[0]],routeType:"route",poolInfoList:[v.pool,L],remainingAccounts:[v.data.remainingAccounts[0],F.remainingAccounts[0]],minMiddleAmountFee:(h=F.amountOut.fee)!=null&&h.raw?new Ke(v.data.amountOut.amount.token,((x=(w=v.data.amountOut.fee)==null?void 0:w.raw)!=null?x:hn).add((K=(S=F.amountOut.fee)==null?void 0:S.raw)!=null?K:hn)):void 0,middleToken:v.data.amountOut.amount.token,poolReady:v.data.poolReady&&F.poolReady,poolType:[v.data.poolType,F.poolType],feeConfig:f,expirationTime:en(v.data.expirationTime,F.expirationTime)}))}catch(F){this.logDebug("route out error",L.version,L.id.toString(),F.message)}}return y.filter(T=>(T.allTrade||this.logDebug(`pool ${T.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),T.allTrade)).sort((T,C)=>T.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(hn)?-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:b,priceImpact:y,fee:g,remainingAccounts:P,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 O(f.toFixed()),executionPrice:new O(b.toFixed()),priceImpact:new O(y.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:en(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:go(q(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:go(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:go(q(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:go(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 ui(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Ca.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Xr.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:ha({programId:new ui(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:Ci(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:At({address:u.mintLp.toBase58(),programId:$e.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 wf,Transaction as Ra,TransactionInstruction as kf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hf}from"@solana/spl-token";import yl from"bn.js";var Pt=class extends _e{static getPdaPoolId(e,t){return le([Pt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return le([Pt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new yl(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=>Pt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Pt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Pt.getPdaOwnerId(t,m,i,l).publicKey));let c=await Ht(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],b=c[d],y=c[n.length+l];if(!(b&&y)||b.data.length!==Pt.POOL_LAYOUT.span||y.data.length!==Pt.OWNER_LAYOUT.span)continue;let g=Pt.POOL_LAYOUT.decode(b.data),P=Pt.OWNER_LAYOUT.decode(y.data),k=g.openTime.toNumber(),I=g.endTime.toNumber(),h=P.tokenInfo.map(S=>S.debtAmount.gt(new yl(0))).filter(S=>!S).length!==3,w=o>k&&o<I&&g.status===1,x=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:Pt.VERSION_PROJECT[m],openTime:k,endTime:I,canClaim:x,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((S,K)=>({mintAddress:S.mintAddress,mintVault:S.mintVault,mintDecimals:S.mintDecimals,perLpLoss:S.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.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(We.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!u.mintAddress.equals(We.WSOL.mint),associatedOnly:u.mintAddress.equals(We.WSOL.mint)?!1:t.associatedOnly});m&&i.addInstruction(m),s.push(l)}i.addInstruction({instructions:[Pt.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(We.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!d.mintAddress.equals(We.WSOL.mint),associatedOnly:d.mintAddress.equals(We.WSOL.mint)?!1:t.associatedOnly});f&&i.addInstruction(f),p&&(s[d.mintAddress.toString()]=p,m.push(p))}i.addInstruction({instructions:[Pt.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 Is(u,[o,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ra().add(...u.slice(0,i.AllTxData.instructions.length-1)),signer:c},{transaction:new Ra().add(...u.slice(i.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ra().add(...i.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=E([]),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:hf,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 kf({keys:o,programId:e,data:a})}},Ut=Pt;Ut.CLAIMED_NUM=3,Ut.POOL_LAYOUT=E([Se(8),W("bump"),W("status"),A("openTime"),A("endTime"),N("ammId"),j(E([W("mintDecimals"),N("mintAddress"),N("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),Pt.CLAIMED_NUM,"tokenInfo"),j(A(),10,"padding")]),Ut.OWNER_LAYOUT=E([Se(8),W("bump"),W("version"),N("poolId"),N("owner"),A("lpAmount"),j(E([N("mintAddress"),A("debtAmount"),A("claimedAmount")]),Pt.CLAIMED_NUM,"tokenInfo"),j(A(),4,"padding")]),Ut.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new wf(e)),Ut.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Ut.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Oo}from"@solana/web3.js";import Pl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as If,TransactionInstruction as gl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Al}from"@solana/spl-token";var Tf=E([W("instruction"),Uu("amount")]),No=E([W("instruction")]);function Hr({programId:r},e){let t=[{pubkey:Al,isSigner:!1,isWritable:!1},{pubkey:yu,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(No.span);return No.encode({instruction:2},n),new gl({keys:t,programId:r,data:n})}function La(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(No.span);No.encode({instruction:2},s);let a=[{pubkey:Al,isWritable:!1,isSigner:!1},{pubkey:If,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 gl({programId:e.programId,keys:a,data:s})}var Bf={[ji.IDO_PROGRAM_ID_V1.toString()]:1,[ji.IDO_PROGRAM_ID_V2.toString()]:2,[ji.IDO_PROGRAM_ID_V3.toString()]:3,[ji.IDO_PROGRAM_ID_V4.toString()]:4},Ri=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=Bf[t.programId];c||this.logAndCreateError("invalid version",c);let u=lt(t),[l,m]=[!new Pl(e.coin).isZero(),!new Pl(e.pc).isZero()],d=u.projectInfo.mint.address.equals(Y),{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 b=u.buyInfo.mint.address.equals(Y),{account:y,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:!b,notUseTokenAccount:b,associatedOnly:b?!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||!y)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[Hr({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Oo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[Hr({programId:new Oo(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:y,userIdoInfo:new Oo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[Hr({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:y,userBaseTokenAccount:p,userIdoInfo:new Oo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let P={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:y,ledgerAccount:new Oo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[La(q(_({},P),{side:"base"}))]:[],...m?[La(q(_({},P),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};var Sf=Buffer.from("vault_auth_seed","utf8"),I0=Buffer.from("global_config","utf8"),xf=Buffer.from("pool_vesting","utf8"),Kf=Buffer.from("platform_config","utf8"),Cf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Rf=Buffer.from("creator_fee_vault_auth_seed","utf8");function dn(r){return le([Sf],r)}function Li(r,e,t){return le([oa,e.toBuffer(),t.toBuffer()],r)}function Na(r,e,t){return le([ra,e.toBuffer(),t.toBuffer()],r)}function ci(r){return le([Buffer.from("__event_authority","utf8")],r)}function Oa(r,e){return le([Kf,e.toBuffer()],r)}function Mo(r,e,t){return le([xf,e.toBuffer(),t.toBuffer()],r)}function li(r,e,t){return le([e.toBuffer(),t.toBuffer()],r)}function Ma(r){return le([Cf],r)}function Ni(r,e,t){return le([e.toBuffer(),t.toBuffer()],r)}function wl(r){return le([Rf],r)}import{SystemProgram as Gt,TransactionInstruction as vt}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as jr,TOKEN_2022_PROGRAM_ID as Lf,TOKEN_PROGRAM_ID as va}from"@solana/spl-token";import vo from"bn.js";var _t={initialize:Buffer.from([175,175,109,31,13,152,155,237]),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])};function kl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([W("decimals"),St("name"),St("symbol"),St("uri")]),h=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod")]),w=E([W("index"),A("supply"),A("totalFundRaisingB"),W("migrateType")]),x=E([W("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),W("migrateType")]),S=[{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:!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:va,isSigner:!1,isWritable:!1},{pubkey:va,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:ci(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(b,"utf-8").length+4*3+1),T=Buffer.alloc(h.span),C=Buffer.alloc(y.type==="ConstantCurve"?x.span:w.span);return I.encode({decimals:d,name:p,symbol:f,uri:b},K),y.type==="ConstantCurve"?x.encode(q(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),C):y.type==="FixedCurve"?w.encode(q(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),C):y.type==="LinearCurve"&&w.encode(q(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),C),h.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:k},T),new vt({keys:S,programId:r,data:Buffer.from([..._t.initialize,...K,...C,...T])})}function hl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([W("decimals"),St("name"),St("symbol"),St("uri")]),h=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),W("transferFeeExtensionParamsOption"),E([Ct("transferFeeBasePoints"),A("maxinumFee")]).replicate("transferFeeExtensionParams")]),w=E([W("index"),A("supply"),A("totalFundRaisingB"),W("migrateType")]),x=E([W("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),W("migrateType")]),S=[{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:!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:Lf,isSigner:!1,isWritable:!1},{pubkey:va,isSigner:!1,isWritable:!1},{pubkey:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],K=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),T=Buffer.alloc(h.span),C=Buffer.alloc(b.type==="ConstantCurve"?x.span:w.span);return I.encode({decimals:m,name:d,symbol:p,uri:f},K),b.type==="ConstantCurve"?x.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:y,cliffPeriod:g,unlockPeriod:P,transferFeeExtensionParamsOption:k?1:0,transferFeeExtensionParams:k!=null?k:{transferFeeBasePoints:0,maxinumFee:new vo(0)}},T),new vt({keys:S,programId:r,data:Buffer.from([..._t.initializeWithToken2022,...K,...C,...T])})}function Tl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountB"),A("minAmountA"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountB:y,minAmountA:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.buyExactIn,...w])})}function Il(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountA"),A("maxAmountB"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountA:y,maxAmountB:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.buyExactOut,...w])})}function Bl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountA"),A("minAmountB"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountA:y,minAmountB:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.sellExactIn,...w])})}function Sl(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,P,k){let I=E([A("amountB"),A("maxAmountA"),A("shareFeeRate")]),h=[{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:!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:ci(r).publicKey,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:Gt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:b,isSigner:!1,isWritable:!0});let w=Buffer.alloc(I.span);return I.encode({amountB:y,maxAmountA:g,shareFeeRate:P!=null?P:new vo(0)},w),new vt({keys:h,programId:r,data:Buffer.from([..._t.sellExactOut,...w])})}function _a(r,e,t,n,i,o,s,a,c){let u=E([]),l=[{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:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:jr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new vt({keys:l,programId:r,data:Buffer.from([..._t.claimVestedToken,...m])})}function Fa(r,e,t,n,i,o){let s=E([A("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Gt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({shareAmount:o},c),new vt({keys:a,programId:r,data:Buffer.from([..._t.createVestingAccount,...c])})}function Ea(r,e,t,n,i,o,s,a,c){let u=[{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:Gt.programId,isSigner:!1,isWritable:!0},{pubkey:jr,isSigner:!1,isWritable:!0}];return new vt({keys:u,programId:r,data:_t.claimPlatformFee})}function xl(r,e,t,n,i,o,s,a,c,u,l,m,d){let p=E([A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),St("name"),St("web"),St("img"),A("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:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],b=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},b),new vt({keys:f,programId:r,data:Buffer.from([..._t.createPlatformConfig,...b])})}function Kl(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=E([W("index"),N("value")]);o=Buffer.alloc(s.span),s.encode({index:0,value:n.value},o)}else if(n.type==="updateLockNftWallet"){let s=E([W("index"),N("value")]);o=Buffer.alloc(s.span),s.encode({index:1,value:n.value},o)}else if(n.type==="migrateCpLockNftScale"){let s=E([W("index"),A("platformScale"),A("creatorScale"),A("burnScale")]);o=Buffer.alloc(s.span),s.encode(_({index:2},n.value),o)}else if(n.type==="updateFeeRate"){let s=E([W("index"),A("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=E([W("index"),St("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=E([W("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=E([W("index"),N("platformClaimFeeWallet"),N("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),St("name"),St("web"),St("img"),N("transferFeeExtensionAuth"),A("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),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 vt({keys:i,programId:r,data:Buffer.from([..._t.updatePlaformConfig,...o])})}function Va(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:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:jr,isSigner:!1,isWritable:!1}];return new vt({keys:c,programId:r,data:_t.claimPlatformFeeFromVault})}function Cl(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:Gt.programId,isSigner:!1,isWritable:!1},{pubkey:jr,isSigner:!1,isWritable:!1}];return new vt({keys:a,programId:r,data:_t.claimCreatorFee})}import{NATIVE_MINT as Tn,TOKEN_2022_PROGRAM_ID as mi,TOKEN_PROGRAM_ID as Qe,createAssociatedTokenAccountIdempotentInstruction as Qt,getTransferFeeConfig as ts,unpackMint as ns}from"@solana/spl-token";import ae from"bn.js";import{PublicKey as Ll}from"@solana/web3.js";var Dn=E([A(),A("epoch"),W("curveType"),Ct("index"),A("migrateFee"),A("tradeFeeRate"),A("maxShareFeeRate"),A("minSupplyA"),A("maxLockRate"),A("minSellRateA"),A("minMigrateRateA"),A("minFundRaisingB"),N("mintB"),N("protocolFeeOwner"),N("migrateFeeOwner"),N("migrateToAmmWallet"),N("migrateToCpmmWallet"),j(A(),16)]),Nf=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),A("startTime"),A("totalAllocatedShare")]),rn=E([A(),A("epoch"),W("bump"),W("status"),W("mintDecimalsA"),W("mintDecimalsB"),W("migrateType"),A("supply"),A("totalSellA"),A("virtualA"),A("virtualB"),A("realA"),A("realB"),A("totalFundRaisingB"),A("protocolFee"),A("platformFee"),A("migrateFee"),Nf.replicate("vestingSchedule"),N("configId"),N("platformId"),N("mintA"),N("mintB"),N("vaultA"),N("vaultB"),N("creator"),W("mintProgramFlag"),j(W(),63)]),_0=E([A(),A("epoch"),N("poolId"),N("beneficiary"),A("claimedAmount"),A("tokenShareAmount"),j(A(),8)]),Oi=E([A(),A("epoch"),N("platformClaimFeeWallet"),N("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),j(W(),64,"name"),j(W(),256,"web"),j(W(),256,"img"),N("cpConfigId"),A("creatorFeeRate"),N("transferFeeExtensionAuth"),j(W(),184)]);import Xt from"bn.js";import Yr from"bn.js";var Wn=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 Zr=class extends Wn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new O(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 Yr(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(o);if(a.lte(new Yr(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 Yr(0))||m.lt(new Yr(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 Qn(i,o)}};import $r from"bn.js";var Jr=class extends Wn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new O(t.toString()).div(e.toString()).mul(10**(n-i))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 $r(0)))throw Error("invalid input 1");let a=new $r(2).mul(t).sub(o),u=t.mul(s).div(a);if(u.lt(new $r(0))||t.lt(new $r(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 Qn(i,n)}};import xt from"bn.js";import Rl from"bn.js";var _o=class{static _multipler(e){return new O(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new O(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 Rl(i.mul(this._Q64).toFixed(0))}};_o._Q64=new O(new Rl(1).shln(64).toString());var es=class extends Wn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:i}){return new O(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualA.mul(e.realA).toString()).div(_o._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:i,migrateFee:o,decimalA:s,decimalB:a}){return new O(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 O(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 xt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new xt(3)).sub(o),u=t.mul(new xt(2)).mul(s).div(a),l=u.mul(u),m=t.mul(new xt(2)).mul(nt).div(l);if(!m.gt(new xt(0)))throw Error("a need gt 0");if(!uo.gt(m))throw Error("a need lt u64 max");if(m.lt(new xt(0))||u.lt(new xt(0)))throw Error("invalid input 0");return{a:m,b:new xt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),i=new xt(2).mul(n).mul(nt).div(e.virtualA);return new xt(new O(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 Qn(e.virtualA.mul(i),new xt(2).mul(nt)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),i=n.mul(n),o=Qn(e.virtualA.mul(i),new xt(2).mul(nt));return e.realB.sub(o)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),i=new xt(2).mul(n).mul(nt).div(e.virtualA),o=new xt(new O(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 Xt(t-1)),f=new Xt(0),b=[{price:d,totalSellSupply:0}],{a:y,b:g}=m,P=f,k=f;for(let I=1;I<t;I++){let h=I!==t-1?p:i.sub(k),w=this.buyExactIn({poolInfo:{virtualA:y,virtualB:g,realA:P,realB:k,totalFundRaisingB:i,totalSellA:o},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});P=P.add(w.amountA.amount),k=k.add(w.amountB);let x=this.getPrice({poolInfo:{virtualA:y,virtualB:g,realA:P,realB:k},decimalA:c,decimalB:u,curveType:e});b.push({price:x,totalSellSupply:new O(P.toString()).div(10**c).toNumber()})}return b}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(tn).lt(i))throw Error("total lock amount gte max lock amount");if(e.lt(s.minSupplyA.mul(new Xt(10**o))))throw Error("supply lt min supply");let u=e.mul(s.minSellRateA).div(tn);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(tn);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(i),p=new Xt(new O(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new Xt(10).pow(new Xt(o));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new Xt(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}),b=e.totalSellA.sub(e.realA),y,g,P;if(f.gt(b)){y=b;let I=p.buyExactOut({poolInfo:e,amount:y});g=this.calculatePreFee({postFeeAmount:I,feeRate:l}),P=g.sub(I)}else y=f,g=t,P=m;let k=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:Ss(y,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=xs(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}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a}),y=this.calculatePreFee({postFeeAmount:f,feeRate:b}),g=y.sub(f),P=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:y,splitFee:P}}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})}),b=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:b}}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 b=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:i,shareFeeRate:s,creatorFeeRate:a});return{amountA:xs(f,c,u),amountB:t,splitFee:b}}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 Xt(0):e.mul(n).div(s),c=s.isZero()?new Xt(0):e.mul(i).div(s),u=s.isZero()?new Xt(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 er(e,t,tn)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(tn),i=tn.sub(t);return n.add(i).sub(new Xt(1)).div(i)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:i}){if(e.add(t).add(n).add(i).gt(new Xt(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 Zr;case 1:return Jr;case 2:return es}throw Error("find curve error")}};var di={initPriceX64:new ae("515752397214619"),supply:new ae(1e15),totalSellA:new ae(7931e11),totalFundRaisingB:new ae(85e9),totalLockedAmount:new ae("0"),cliffPeriod:new ae("0"),unlockPeriod:new ae("0"),decimals:6,virtualA:new ae("1073471847374405"),virtualB:new ae("30050573465"),realA:new ae(0),realB:new ae(0),protocolFee:new ae(0),platformId:new Ll("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ae(0),cliffPeriod:new ae(0),unlockPeriod:new ae(0),startTime:new ae(0),totalAllocatedShare:new ae(0)}},qn=new ae(1e4),Fo=class extends _e{constructor(e){super(e)}async createLaunchpad(C){var M=C,{programId:e=mt,authProgramId:t,platformId:n=di.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:b,txTipConfig:y,feePayer:g,buyAmount:P,minMintAAmount:k,slippage:I,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:x,token2022:S,transferFeeExtensionParams:K}=M,T=Ue(M,["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"]);var _i,Fi,Ei,Vi,Kt,Vo,qa,Ua,Ga,Xa;let v=this.createTxBuilder(g);t=t!=null?t:dn(e).publicKey,S=!!K,S&&(l="cpmm");let R=d;if(!R&&m){let sn=await this.scope.connection.getAccountInfo(m);sn&&(R=Dn.decode(sn.data))}R||this.logAndCreateError("config not found");let L=R.mintB,F=R.curveType,{publicKey:Q}=Li(e,i,L),{publicKey:$}=Na(e,Q,i),{publicKey:ce}=Na(e,Q,L),{publicKey:ke}=Pn(i);this.logDebug(`create token: ${i.toBase58()}, mintB: ${L.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 de=(_i=T==null?void 0:T.supply)!=null?_i:di.supply,ye=(Fi=T==null?void 0:T.totalSellA)!=null?Fi:di.totalSellA,Ae=(Ei=T==null?void 0:T.totalFundRaisingB)!=null?Ei:di.totalFundRaisingB,fe=(Vi=T==null?void 0:T.totalLockedAmount)!=null?Vi:new ae(0),ne=p;if(!p){let sn=await this.scope.connection.getAccountInfo(n);sn||this.logAndCreateError("platform id not found:",n.toString()),ne=Oi.decode(sn.data).feeRate}let Te=zt.getCurve(R.curveType).getInitParam({supply:de,totalFundRaising:Ae,totalSell:ye,totalLockedAmount:fe,migrateFee:R.migrateFee}),He={epoch:new ae(896),bump:254,status:0,mintDecimalsA:o,mintDecimalsB:s,supply:de,totalSellA:ye,mintA:new Ll(i),mintB:L,virtualA:Te.a,virtualB:Te.b,realA:di.realA,realB:di.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:di.protocolFee,platformFee:ne,platformId:n,configId:m,vaultA:$,vaultB:ce,creator:this.scope.ownerPubKey,totalFundRaisingB:Ae,vestingSchedule:{totalLockedAmount:fe,cliffPeriod:new ae(0),unlockPeriod:new ae(0),startTime:new ae(0),totalAllocatedShare:new ae(0)},mintProgramFlag:S?1:0},Un=zt.getCurve(R.curveType),{c:pn}=Un.getInitParam({supply:He.supply,totalFundRaising:He.totalFundRaisingB,totalLockedAmount:fe,totalSell:R.curveType===0?He.totalSellA:new ae(0),migrateFee:R.migrateFee});try{zt.checkParam({supply:He.supply,totalFundRaising:He.totalFundRaisingB,totalSell:pn,totalLockedAmount:fe,decimals:He.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(sn){this.logAndCreateError(`check create mint params failed, ${sn.message}`)}v.addInstruction({instructions:[S?hl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,i,L,$,ce,o,a,c,u||"https://",{type:F===0?"ConstantCurve":F===1?"FixedCurve":F===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:de,totalFundRaisingB:Ae},fe,(Kt=T==null?void 0:T.cliffPeriod)!=null?Kt:new ae(0),(Vo=T==null?void 0:T.unlockPeriod)!=null?Vo:new ae(0),K):kl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,i,L,$,ce,ke,o,a,c,u||"https://",{type:F===0?"ConstantCurve":F===1?"FixedCurve":F===2?"LinearCurve":"ConstantCurve",totalSellA:ye,migrateType:l,supply:de,totalFundRaisingB:Ae},fe,(qa=T==null?void 0:T.cliffPeriod)!=null?qa:new ae(0),(Ua=T==null?void 0:T.unlockPeriod)!=null?Ua:new ae(0))]});let et=S?await this.scope.connection.getEpochInfo():void 0,In=K?{epoch:BigInt((et==null?void 0:et.epoch)||0),maximumFee:BigInt((Ga=K==null?void 0:K.maxinumFee.toString())!=null?Ga:0),transferFeeBasisPoints:(Xa=K==null?void 0:K.transferFeeBasePoints)!=null?Xa:0}:void 0,Mi={amountA:{amount:new ae(0),fee:void 0,expirationTime:void 0},amountB:new ae(0),splitFee:{platformFee:new ae(0),shareFee:new ae(0),protocolFee:new ae(0),creatorFee:new ae(0)}},vi;if(x!=null&&x.length&&v.addInstruction({signers:x}),!T.createOnly){let{builder:sn,extInfo:Nl}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:S?mi:void 0,mintA:i,mintB:L,poolInfo:He,buyAmount:P,minMintAAmount:k,shareFeeRate:T.shareFeeRate,shareFeeReceiver:T.shareFeeReceiver,configInfo:R,platformFeeRate:ne,slippage:I,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!In,transferFeeConfigA:In?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:In,newerTransferFee:In}:void 0});v.addInstruction(_({},sn.AllTxData)),Mi=_({},Nl),vi=(this.scope.cluster==="devnet"||f===1)&&T.shareFeeReceiver?[sn.allInstructions[0]]:void 0}return v.addTipInstruction(y),f===0?v.sizeCheckBuildV0({computeBudgetConfig:b,swapInfo:Mi,splitIns:vi,address:q(_({},He),{poolId:Q})}):v.sizeCheckBuild({computeBudgetConfig:b,swapInfo:Mi,splitIns:vi,address:q(_({},He),{poolId:Q})})}async buyToken({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:i=Qe,mintB:o=Tn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:b,shareFeeRate:y=new ae(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:k=!1,transferFeeConfigA:I,skipCheckMintA:h=!1}){var fe,ne,Ve;p.lte(new ae(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let w=this.createTxBuilder(d),{publicKey:x}=Li(e,n,o);t=t!=null?t:dn(e).publicKey;let S=I;if(!h)if(S)i=mi;else{let Te=await this.scope.connection.getAccountInfo(n);if(Te&&Te.owner.equals(mi)){i=Te.owner;let He=ns(n,Te,i);S=ts(He)||void 0}}let K=this.scope.account.getAssociatedTokenAccount(n,i),T=null,C=o.equals(Tn);w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,K,this.scope.ownerPubKey,n,i)]});let{account:M,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:C?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!C,notUseTokenAccount:C,associatedOnly:C?!1:P,checkCreateATAOwner:k});M&&(T=M),w.addInstruction(v||{}),T===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let Te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});Te||this.logAndCreateError("cannot found pool:",x.toBase58()),R=rn.decode(Te.data)}let L=a,F=await Oe(this.scope.connection,[L?void 0:R.configId,R.platformId].filter(Boolean).map(Te=>({pubkey:Te})));if(!L){let Te=F.find(He=>He.pubkey.equals(R.configId));(!Te||!Te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),L=Dn.decode(Te.accountInfo.data)}let Q=F.find(Te=>Te.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let $=Oi.decode(Q.accountInfo.data);c=c||$.feeRate;let ce=zt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:L.tradeFeeRate,platformFeeRate:c,curveType:L.curveType,shareFeeRate:y,creatorFeeRate:$.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),ke=new O(ce.amountA.amount.toString()).sub((ne=(fe=ce.amountA.fee)==null?void 0:fe.toString())!=null?ne:0),de=b?new O(qn.sub(b).toNumber()/qn.toNumber()).clampedTo(0,1):new O(1),ye=f!=null?f:b?new ae(ke.mul(de).toFixed(0)):ce.amountA.amount.sub((Ve=ce.amountA.fee)!=null?Ve:new ae(0));ce.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ce.amountA.toString()}, input ${o.toBase58()} amount: ${ce.amountB.toString()}`);let Ae=g?ee(g,o,Qe).publicKey:void 0;return Ae&&w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,Ae,g,o)]}),w.addInstruction({instructions:[Tl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,x,K,T,R.vaultA,R.vaultB,n,o,i,Qe,li(e,R.platformId,o).publicKey,Ni(e,R.creator,o).publicKey,ce.amountB.lt(p)?ce.amountB:p,ye,y,Ae)]}),w.addCustomComputeBudget(l),w.addTipInstruction(m),w.versionBuild({txVersion:u,extInfo:q(_({},ce),{decimalOutAmount:ke,minDecimalOutAmount:new O(ye.toString())})})}async buyTokenExactOut({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:i=Qe,mintB:o=Tn,poolInfo:s,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:b,slippage:y,shareFeeRate:g=new ae(0),shareFeeReceiver:P,associatedOnly:k=!0,checkCreateATAOwner:I=!1,skipCheckMintA:h=!1}){b.lte(new ae(0))&&this.logAndCreateError("out amount should gt 0:",b.toString());let w=this.createTxBuilder(p),{publicKey:x}=Li(e,n,o);t=t!=null?t:dn(e).publicKey;let S=s;if(!S){let fe=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});fe||this.logAndCreateError("cannot found pool:",x.toBase58()),S=rn.decode(fe.data)}let K=a,T=await Oe(this.scope.connection,[K?void 0:S.configId,S.platformId].filter(Boolean).map(fe=>({pubkey:fe})));if(!K){let fe=T.find(ne=>ne.pubkey.equals(S.configId));(!fe||!fe.accountInfo)&&this.logAndCreateError("config not found: ",S.configId.toBase58()),K=Dn.decode(fe.accountInfo.data)}let C=T.find(fe=>fe.pubkey.equals(S.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",S.configId.toBase58());let M=Oi.decode(C.accountInfo.data);u=u||M.feeRate;let v=c;if(!h)if(v)i=mi;else{let fe=await this.scope.connection.getAccountInfo(n);if(fe&&fe.owner.equals(mi)){i=fe.owner;let ne=ns(n,fe,i);v=ts(ne)||void 0}}let R=zt.buyExactOut({poolInfo:S,amountA:b,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:M.creatorFeeRate,transferFeeConfigA:v,slot:await this.scope.connection.getSlot()}),L=new O(R.amountB.toString()),F=y?new O(qn.add(y).toNumber()/qn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new O(1),Q=(f!=null?f:y)?new ae(L.mul(F).toFixed(0)):R.amountB,$=this.scope.account.getAssociatedTokenAccount(n,i),ce=null,ke=o.equals(Tn);w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,$,this.scope.ownerPubKey,n,i)]});let{account:de,instructionParams:ye}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:ke?{payer:this.scope.ownerPubKey,amount:R.amountB}:void 0,skipCloseAccount:!ke,notUseTokenAccount:ke,associatedOnly:ke?!1:k,checkCreateATAOwner:I});de&&(ce=de),w.addInstruction(ye||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${o.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Ae=P?ee(P,o,Qe).publicKey:void 0;return Ae&&w.addInstruction({instructions:[Qt(this.scope.ownerPubKey,Ae,P,o)]}),w.addInstruction({instructions:[Il(e,this.scope.ownerPubKey,t,S.configId,S.platformId,x,$,ce,S.vaultA,S.vaultB,n,o,i,Qe,li(e,S.platformId,o).publicKey,Ni(e,S.creator,o).publicKey,b,Q,g,Ae)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:Q,outAmount:b}})}async sellToken({programId:e=mt,authProgramId:t,mintAProgram:n=Qe,mintA:i,mintB:o=Tn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:b,shareFeeRate:y=new ae(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:k=!1,skipCheckMintA:I=!1}){t=t!=null?t:dn(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ae(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=Li(e,i,o),x;if(!I){let ne=await this.scope.connection.getAccountInfo(i);if(ne&&ne.owner.equals(mi)){n=ne.owner;let Ve=ns(i,ne,n);x=ts(Ve)||void 0}}let S=null,K=null,T=o.equals(Tn),{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:k});C&&(S=C),h.addInstruction(M||{}),S===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:P,checkCreateATAOwner:k});v&&(K=v),h.addInstruction(R||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let ne=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",w.toBase58()),L=rn.decode(ne.data)}let F=a,Q=await Oe(this.scope.connection,[F?void 0:L.configId,L.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!F){let ne=Q.find(Ve=>Ve.pubkey.equals(L.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),F=Dn.decode(ne.accountInfo.data)}let $=Q.find(ne=>ne.pubkey.equals(L.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let ce=Oi.decode($.accountInfo.data);c=c||ce.feeRate;let ke=zt.sellExactIn({poolInfo:L,amountA:p,protocolFeeRate:F.tradeFeeRate,platformFeeRate:c,curveType:F.curveType,shareFeeRate:y,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),de=new O(ke.amountB.toString()),ye=b?new O(qn.sub(b).toNumber()/qn.toNumber()).clampedTo(0,1):new O(1),Ae=f!=null?f:b?new ae(de.mul(ye).toFixed(0)):ke.amountB;Ae.lte(new ae(0))&&this.logAndCreateError(`out ${o.toBase58()} amount should be gt 0`);let fe=g?ee(g,o,Qe).publicKey:void 0;return fe&&h.addInstruction({instructions:[Qt(this.scope.ownerPubKey,fe,g,o)]}),h.addInstruction({instructions:[Bl(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,S,K,L.vaultA,L.vaultB,i,o,n,Qe,li(e,L.platformId,o).publicKey,Ni(e,L.creator,o).publicKey,ke.amountA.amount.lt(p)?ke.amountA.amount:p,Ae,y,fe)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:Ae}})}async sellTokenExactOut({programId:e=mt,authProgramId:t,mintAProgram:n=Qe,mintA:i,mintB:o=Tn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:b,shareFeeRate:y=new ae(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:k=!1,skipCheckMintA:I=!1}){t=t!=null?t:dn(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ae(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=Li(e,i,o),x;if(!I){let ne=await this.scope.connection.getAccountInfo(i);if(ne&&ne.owner.equals(mi)){n=ne.owner;let Ve=ns(i,ne,n);x=ts(Ve)||void 0}}let S=null,K=null,T=o.equals(Tn),{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:i,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:k});C&&(S=C),h.addInstruction(M||{}),S===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:o,owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:P,checkCreateATAOwner:k});v&&(K=v),h.addInstruction(R||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=s;if(!L){let ne=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",w.toBase58()),L=rn.decode(ne.data)}let F=a,Q=await Oe(this.scope.connection,[F?void 0:L.configId,L.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!F){let ne=Q.find(Ve=>Ve.pubkey.equals(L.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",L.configId.toBase58()),F=Dn.decode(ne.accountInfo.data)}let $=Q.find(ne=>ne.pubkey.equals(L.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",L.configId.toBase58());let ce=Oi.decode($.accountInfo.data);c=c||ce.feeRate;let ke=zt.sellExactOut({poolInfo:L,amountB:p,protocolFeeRate:F.tradeFeeRate,platformFeeRate:c,curveType:F.curveType,shareFeeRate:y,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),de=new O(ke.amountA.amount.toString()),ye=b?new O(qn.add(b).toNumber()/qn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new O(1),Ae=(f!=null?f:b)?new ae(de.mul(ye).toFixed(0)):ke.amountA.amount,fe=g?ee(g,o,Qe).publicKey:void 0;return fe&&h.addInstruction({instructions:[Qt(this.scope.ownerPubKey,fe,g,o)]}),h.addInstruction({instructions:[Sl(e,this.scope.ownerPubKey,t,L.configId,L.platformId,w,S,K,L.vaultA,L.vaultB,i,o,n,Qe,li(e,L.platformId,o).publicKey,Ni(e,L.creator,o).publicKey,p,Ae,y,fe)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:Ae}})}async createPlatformConfig({programId:e=mt,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:b,feePayer:y}){let g=this.createTxBuilder(y),{publicKey:P}=Oa(e,t);return g.addInstruction({instructions:[xl(e,t,n,i,P,o,a,s,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(b),g.versionBuild({txVersion:p,extInfo:{platformId:P}})}async updatePlatformConfig({programId:e=mt,platformAdmin:t,platformId:n,updateInfo:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Oa(e,t).publicKey;return u.addInstruction({instructions:[Kl(e,t,l,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimPlatformFee({programId:e=mt,authProgramId:t,platformId:n,poolId:i,platformClaimFeeWallet:o,mintB:s,vaultB:a,mintBProgram:c=Qe,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:dn(e).publicKey;let f=s,b=a;if(!f){let P=await this.scope.connection.getAccountInfo(i,{commitment:"processed"});P||this.logAndCreateError("cannot found pool:",i.toBase58());let k=rn.decode(P.data),I=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});I||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Dn.decode(I.data).mintB,b=b!=null?b:k.vaultB}(!f||!b)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=b==null?void 0:b.toBase58())!=null?g:"");let y=ee(this.scope.ownerPubKey,f,Qe).publicKey;return p.addInstruction({instructions:[Qt(this.scope.ownerPubKey,y,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Ea(e,o,t,i,n,b,y,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=mt,authProgramId:t,platformId:n,platformClaimFeeWallet:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:dn(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:rn.span},{memcmp:{offset:rn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=rn.decode(m.account.data);if(d.platformFee.lte(new ae(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Qe).publicKey;u.addInstruction({instructions:[Qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Ea(e,i,t,m.pubkey,n,d.vaultB,p,d.mintB,Qe)]})}),u.addTipInstruction(a),o===0?u.sizeCheckBuildV0({computeBudgetConfig:s}):u.sizeCheckBuild({computeBudgetConfig:s})}async createVesting({programId:e=mt,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=Mo(e,t,n).publicKey;return u.addInstruction({instructions:[Fa(e,this.scope.ownerPubKey,n,t,m,i)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async createMultipleVesting({programId:e=mt,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=Mo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Fa(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),i===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}async claimVesting({programId:e=mt,poolId:t,poolInfo:n,vestingRecord:i,txVersion:o,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=dn(e).publicKey,m=i||Mo(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=rn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Qe).publicKey;return u.addInstruction({instructions:[Qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[_a(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Qe)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:o})}async claimMultiVesting({programId:e=mt,poolIdList:t,poolsInfo:n={},vestingRecords:i={},txVersion:o,computeBudgetConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=dn(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 b=i[p]||Mo(e,d,this.scope.ownerPubKey).publicKey,y=ee(this.scope.ownerPubKey,f.mintA,Qe).publicKey;c.addInstruction({instructions:[Qt(this.scope.ownerPubKey,y,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[_a(e,this.scope.ownerPubKey,l,d,b,y,f.vaultA,f.mintA,Qe)]})}),o===0?c.sizeCheckBuildV0({computeBudgetConfig:s}):c.sizeCheckBuild({computeBudgetConfig:s})}async claimVaultPlatformFee({programId:e=mt,platformId:t,mintB:n,mintBProgram:i=Qe,claimFeeWallet:o,txVersion:s,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=li(e,t,n).publicKey,d=Ma(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,i);return l.addInstruction({instructions:[Qt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,i),Va(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=mt,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 y,g;let d=Ma(e).publicKey,p=li(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Tn)&&n,b=l[m.mintB.toBase58()];if(!b){let{account:P,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});P&&(b=P),u.addInstruction(k||{}),b===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Va(e,m.id,(y=m.claimFeeWallet)!=null?y:this.scope.ownerPubKey,p,d,b,m.mintB,(g=m.mintBProgram)!=null?g:Qe)]})}),i===0?u.sizeCheckBuildV0({computeBudgetConfig:o}):u.sizeCheckBuild({computeBudgetConfig:o})}async claimCreatorFee({programId:e=mt,mintB:t,mintBProgram:n=Qe,txVersion:i,computeBudgetConfig:o,txTipConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=Ni(e,this.scope.ownerPubKey,t).publicKey,l=wl(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Qt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Cl(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(o),c.addTipInstruction(s),c.versionBuild({txVersion: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=rn.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=Dn.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 Of}from"@solana/web3.js";import{MintLayout as Mf,TOKEN_2022_PROGRAM_ID as Da,TOKEN_PROGRAM_ID as Wa}from"@solana/spl-token";var Eo=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(Cn.address,Cn),this._mintGroup.official.add(Cn.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")?Da.toBase58():Wa.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")?Da.toBase58():Wa.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")?Da.toBase58():Wa.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 Cn;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 Of(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Mf.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 is=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 $t(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=o,this._apiCacheTime=c||5*60*1e3,this.logger=Pe("Raydium"),this.farm=new ao({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ji({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new To({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Eo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Bo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ro({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Ut({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new xi({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Ri({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Fo({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=vf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,c=new pr({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),u=new is(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(fr);return this._owner.publicKey}setOwner(e){return this._owner=e?new $t(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(vu);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(fr),new Error(fr)}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{is as Raydium};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=raydium.mjs.map
|