UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

3 lines 229 kB
var Aa=Object.defineProperty,wa=Object.defineProperties;var ka=Object.getOwnPropertyDescriptors;var Un=Object.getOwnPropertySymbols;var Di=Object.prototype.hasOwnProperty,Wi=Object.prototype.propertyIsEnumerable;var Ei=(l,e,t)=>e in l?Aa(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t,V=(l,e)=>{for(var t in e||(e={}))Di.call(e,t)&&Ei(l,t,e[t]);if(Un)for(var t of Un(e))Wi.call(e,t)&&Ei(l,t,e[t]);return l},E=(l,e)=>wa(l,ka(e));var at=(l,e)=>{var t={};for(var n in l)Di.call(l,n)&&e.indexOf(n)<0&&(t[n]=l[n]);if(l!=null&&Un)for(var n of Un(l))e.indexOf(n)<0&&Wi.call(l,n)&&(t[n]=l[n]);return t};import{PublicKey as Z,SystemProgram as ya}from"@solana/web3.js";import{createTransferInstruction as ba,TOKEN_PROGRAM_ID as be,TOKEN_2022_PROGRAM_ID as bn,createAssociatedTokenAccountIdempotentInstruction as gn,createSyncNativeInstruction as ga,createTransferCheckedInstruction as Kc}from"@solana/spl-token";import $ from"bn.js";import se from"decimal.js";import{PublicKey as Gi}from"@solana/web3.js";import{get as qi,set as Ta}from"lodash";var Mo=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}},Ui={},ha={};function te(l){let e=qi(Ui,l);if(!e){let t=qi(ha,l);e=new Mo({name:l,logLevel:t}),Ta(Ui,l,e)}return e}import{MINT_SIZE as Ia,TOKEN_PROGRAM_ID as Ba,getTransferFeeConfig as xa,unpackMint as Sa}from"@solana/spl-token";var Fo=te("Raydium_accountInfo_util");async function st(l,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=V({batchRequest:!1},t),r=vo(e,i),a=new Array(r.length).fill([]);if(n){let c=r.map(f=>{let m=l._buildArgs([f.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=vo(c,10);a=(await(await Promise.all(u.map(async f=>await l._rpcBatchRequest(f)))).flat()).map(f=>(f.error&&Fo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${f.error.message}`),f.result.value.map(m=>{if(m){let{data:p,executable:g,lamports:y,owner:b,rentEpoch:P}=m;return p.length!==2&&p[1]!=="base64"&&Fo.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:g,lamports:y,owner:new Gi(b),rentEpoch:P}}return null})))}else try{a=await Promise.all(r.map(c=>l.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&Fo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function pt(l,e,t){let n=await st(l,e.map(o=>o.pubkey),t);return e.map((o,i)=>E(V({},o),{accountInfo:n[i]}))}async function Gn({connection:l,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await pt(l,e.map(c=>({pubkey:it(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Ia){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Sa(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=E(V({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||Ba,feeConfig:(a=xa(u))!=null?a:void 0})}return o[Gi.default.toBase58()]=o[Ae.toBase58()],o}import _t from"bn.js";import fR from"decimal.js";import Fa from"big.js";import Yn from"bn.js";import Ka from"toformat";var Ca=Ka,An=Ca;import Xn from"big.js";import La from"bn.js";import Oa from"decimal.js-light";import wn from"bn.js";var zi=9007199254740991;function ge(l){let e=te("Raydium_parseBigNumberish");if(l instanceof wn)return l;if(typeof l=="string"){if(l.match(/^-?[0-9]+$/))return new wn(l);e.logWithError(`invalid BigNumberish string: ${l}`)}return typeof l=="number"?(l%1&&e.logWithError(`BigNumberish number underflow: ${l}`),(l>=zi||l<=-zi)&&e.logWithError(`BigNumberish number overflow: ${l}`),new wn(String(l))):typeof l=="bigint"?new wn(l.toString()):(e.error(`invalid BigNumberish value: ${l}`),new wn(0))}var zn=te("module/fraction"),_o=An(Xn),kn=An(Oa),Na={[0]:kn.ROUND_DOWN,[1]:kn.ROUND_HALF_UP,[2]:kn.ROUND_UP},Ma={[0]:Xn.roundDown,[1]:Xn.roundHalfUp,[2]:Xn.roundUp},ue=class{constructor(e,t=new La(1)){this.numerator=ge(e),this.denominator=ge(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ue(this.denominator,this.numerator)}add(e){let t=e instanceof ue?e:new ue(ge(e));return this.denominator.eq(t.denominator)?new ue(this.numerator.add(t.numerator),this.denominator):new ue(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ue?e:new ue(ge(e));return this.denominator.eq(t.denominator)?new ue(this.numerator.sub(t.numerator),this.denominator):new ue(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ue?e:new ue(ge(e));return new ue(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ue?e:new ue(ge(e));return new ue(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||zn.logWithError(`${e} is not an integer.`),e<=0&&zn.logWithError(`${e} is not positive.`),kn.set({precision:e+1,rounding:Na[n]});let o=new kn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||zn.logWithError(`${e} is not an integer.`),e<0&&zn.logWithError(`${e} is negative.`),_o.DP=e,_o.RM=Ma[n]||1,new _o(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var va=te("Raydium_amount"),Xi=An(Fa);function _a(l,e){let t="0",n="0";if(l.includes(".")){let o=l.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):va.logWithError(`invalid number string, num: ${l}`)}else t=l;return[t,n.slice(0,e)||n]}var fe=class extends ue{constructor(t,n,o=!0,i){let r=new Yn(0),a=Vo.pow(new Yn(t.decimals));if(o)r=ge(n);else{let c=new Yn(0),u=new Yn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[s,f]=_a(n.toString(),t.decimals);c=ge(s),u=ge(f)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=te(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Xi.DP=this.token.decimals,new Xi(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as Va}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Yi}from"@solana/spl-token";var Hn={chainId:101,address:Va.default.toBase58(),programId:Yi.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},ft={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Yi.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 Wo}from"@solana/web3.js";import{PublicKey as Te,SystemProgram as Hi,SYSVAR_RENT_PUBKEY as Ea}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Da}from"@solana/spl-token";function N({pubkey:l,isSigner:e=!1,isWritable:t=!0}){return{pubkey:l,isWritable:t,isSigner:e}}var Wa=[N({pubkey:Da,isWritable:!1}),N({pubkey:Hi.programId,isWritable:!1}),N({pubkey:Ea,isWritable:!1})];function Eo({publicKey:l,transformSol:e}){let t=Do(l.toString());if(t instanceof Te)return e&&t.equals(Dt)?Ae:t;if(e&&t.toString()===Dt.toBase58())return Ae;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Do(l){try{return new Te(l)}catch{return l}}var Bt=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new Te("SysvarRent111111111111111111111111111111111"),bl=new Te("SysvarC1ock11111111111111111111111111111111"),Rt=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),qa=new Te("Sysvar1nstructions1111111111111111111111111"),Ua=Hi.programId,gl=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Pl=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Al=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),wl=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),kl=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Tl=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),hl=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Il=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Bl=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),xl=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Sl=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Ae=new Te("So11111111111111111111111111111111111111112"),Dt=Te.default;function it(l){return Eo({publicKey:l,transformSol:!0})}var qo=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===Dt.toBase58()||e instanceof Wo&&Dt.equals(e)){this.decimals=ft.decimals,this.symbol=ft.symbol,this.name=ft.name,this.mint=new Wo(ft.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Wo.default:Eo({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ce=qo;Ce.WSOL=new qo(E(V({},ft),{mint:ft.address}));var Uo=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Qn=Uo;Qn.SOL=new Uo(Hn);import Ga from"bn.js";var Qi=new ue(new Ga(100)),yt=class extends ue{toSignificant(e=5,t,n){return this.mul(Qi).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Qi).toFixed(e,t,n)}};var za=te("Raydium_price"),je=class extends ue{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new ue(Go(n.decimals),Go(o.decimals))}get raw(){return new ue(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new je({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&za.logWithError("mul token not equals");let n=super.mul(t);return new je({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};import{merge as yK}from"lodash";import jl from"axios";var Zi={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",TEMP_HOST:"https://temp-api-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",CLMM_DYNAMIC_CONFIG:"/main/clmm-dynamic-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://lite-api.jup.ag/tokens/v2/tag?query=verified",POOL_LIST:"/pools/info/list-v2",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/list-v2",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_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},Xa=E(V({},Zi),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",TEMP_HOST:"https://temp-api-v1-devnet.raydium.io",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var wm=te("Raydium_Api");import{PublicKey as Wp,SystemProgram as qp}from"@solana/web3.js";import{AccountLayout as Yp,createAssociatedTokenAccountIdempotentInstruction as Hp,TOKEN_PROGRAM_ID as Qp,TOKEN_2022_PROGRAM_ID as Zp}from"@solana/spl-token";import{PublicKey as en,sendAndConfirmTransaction as Zo,SystemProgram as $a,Transaction as In,TransactionMessage as Bn,VersionedTransaction as xn}from"@solana/web3.js";import Ja from"axios";import{PublicKey as zo,AddressLookupTableAccount as $t}from"@solana/web3.js";async function Xo({connection:l,address:e,cluster:t="mainnet"}){let n=await st(l,[...new Set(e.map(i=>i.toString()))].map(i=>new zo(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new $t({key:a,state:$t.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?jt[a.toString()]=c:Zt[a.toString()]=c}return o}var Zt={},Yo=async l=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Zt[e])return Zt;let t=new zo(e),n=await l.getAccountInfo(t);return n&&(Zt[e]=new $t({key:t,state:$t.deserialize(n.data)})),Zt},jt={},Ho=async l=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(jt[e])return jt;let t=new zo(e),n=await l.getAccountInfo(t);return n&&(jt[e]=new $t({key:t,state:$t.deserialize(n.data)})),jt};var j={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{ComputeBudgetProgram as ji,Keypair as Ji,PublicKey as Ya,Transaction as er,TransactionMessage as Ha,VersionedTransaction as tr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qa}from"@solana/spl-token";var $i=te("Raydium_txUtil"),nr=1644;function Zn(l){let e=[],t=[];return l.microLamports&&(e.push(ji.setComputeUnitPrice({microLamports:l.microLamports})),t.push(j.SetComputeUnitPrice)),l.units&&(e.push(ji.setComputeUnitLimit({units:l.units})),t.push(j.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Jt(l,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=l.getLatestBlockhash)==null?void 0:n.call(l,{commitment:t})))==null?void 0:o.blockhash}async function jn(l,e){return l.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);l.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function Qo(l,e){l.length<1&&$i.logWithError(`no instructions provided: ${l.toString()}`),e.length<1&&$i.logWithError(`no signers provided:, ${e.toString()}`);let t=new er;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...l);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<nr}catch{return!1}}function ie(l,e){let[t,n]=Ya.findProgramAddressSync(l,e);return{publicKey:t,nonce:n}}function Tn({instructions:l,payer:e,signers:t}){return Qo(l,[e,...t])}function hn({instructions:l,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ji.generate().publicKey.toString()}){let i=new Ha({payerKey:e,recentBlockhash:n,instructions:l}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new tr(i).serialize()).toString("base64").length<nr}catch{return!1}}var Za=l=>Buffer.isBuffer(l)?l:l instanceof Uint8Array?Buffer.from(l.buffer,l.byteOffset,l.byteLength):Buffer.from(l),ja=l=>{let e=l.serialize({requireAllSignatures:!1,verifySignatures:!1});l instanceof tr&&(e=Za(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Wt(l){let e=[];return l.forEach(t=>{t instanceof er&&(t.recentBlockhash||(t.recentBlockhash=Qa.toBase58()),t.feePayer||(t.feePayer=Ji.generate().publicKey)),e.push(ja(t))}),console.log("simulate tx string:",e),e}var $n=2e3,Jn=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 Ja.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}=Zn(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push($a.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new en(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(j.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...r.filter(a=>a!==en.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(E(V({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new In;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var s;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=i!=null?i:await Jt(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Wt([t]),(s=this.owner)!=null&&s.isKeyPair)return{txId:a?await Zo(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let f=await this.signAllTransactions([t]);if(this.signers.length)for(let m of f)try{m.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(f[0].serialize(),{skipPreflight:r}),signedTx:f[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(s=>s.transaction.instructions.length>0),r=[o,...i.map(s=>s.transaction)],a=[this.signers,...i.map(s=>s.signers)],c=[...this.instructionTypes,...i.map(s=>s.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(s=>{s.some(f=>f.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:c,execute:async s=>{var P;let{sequentially:f,onTxUpdate:m,skipTxCount:p=0,recentBlockHash:g,skipPreflight:y=!0}=s||{},b=g!=null?g:await Jt(this.connection,this.blockhashCommitment);if((P=this.owner)!=null&&P.isKeyPair){if(f){let w=[],h=0;for(let B of r){if(++h,h<=p)continue;let A=await Zo(this.connection,B,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});w.push(A)}return{txIds:w,signedTxs:r}}return{txIds:await await Promise.all(r.map(async w=>(w.recentBlockhash=b,await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let w=r.map((B,A)=>(B.recentBlockhash=b,a[A].length&&B.sign(...a[A]),B));Wt(w);let h=await this.signAllTransactions(w);if(f){let B=0,A=[],k=async()=>{if(!h[B])return;let T=await this.connection.sendRawTransaction(h[B].serialize(),{skipPreflight:y});A.push({txId:T,status:"sent",signedTx:h[B]}),m==null||m([...A]),B++;let K=!1,S=null,x=null,_=F=>{S!==null&&clearInterval(S),x!==null&&this.connection.removeSignatureListener(x);let O=A.findIndex(q=>q.txId===T);if(O>-1){if(A[O].status==="error"||A[O].status==="success")return;A[O].status=F.err?"error":"success"}m==null||m([...A]),F.err||k()};this.loopMultiTxStatus&&(S=setInterval(async()=>{var F;if(K){clearInterval(S);return}try{let O=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});O&&(K=!0,clearInterval(S),_({err:((F=O.meta)==null?void 0:F.err)||null}),console.log("tx status from getTransaction:",T))}catch(O){K=!0,clearInterval(S),console.error("getTransaction timeout:",O,T)}},$n)),x=this.connection.onSignature(T,F=>{if(K){this.connection.removeSignatureListener(x);return}K=!0,_(F)},"confirmed"),this.connection.getSignatureStatus(T)};return await k(),{txIds:A.map(T=>T.txId),signedTxs:h}}else{let B=[];for(let A=0;A<h.length;A+=1){let k=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});B.push(k)}return{txIds:B,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let g=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=g,r=at(g,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=V(V({},this.cluster==="devnet"?await Ho(this.connection):await Yo(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new en(b));let s=await Xo({connection:this.connection,address:u});for(let[b,P]of Object.entries(s))a[b]=P;let f=o?en.default.toBase58():i!=null?i:await Jt(this.connection,this.blockhashCommitment),m=new Bn({payerKey:this.feePayer,recentBlockhash:f,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new xn(m);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var B;let{skipPreflight:P=!0,sendAndConfirm:w,notSendToRpc:h}=b||{};if(Wt([p]),(B=this.owner)!=null&&B.isKeyPair){let A=await this.connection.sendTransaction(p,{skipPreflight:P});return w&&await jn(this.connection,A),{txId:A,signedTx:p}}if(this.signAllTransactions){let A=await this.signAllTransactions([p]);if(this.signers.length)for(let k of A)try{k.sign(this.signers)}catch{}return{txId:h?"":await this.connection.sendTransaction(A[0],{skipPreflight:P}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(s=>s.builder.instructions.length>0),r=[o,...i.map(s=>s.transaction)],a=[this.signers,...i.map(s=>s.signers)],c=[...this.instructionTypes,...i.map(s=>s.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(s=>{s.some(f=>f.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(s,f)=>{s.sign(a[f])}),{builder:this,transactions:r,signers:a,instructionTypes:c,buildProps:n,execute:async s=>{var y;let{sequentially:f,onTxUpdate:m,recentBlockHash:p,skipPreflight:g=!0}=s||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),Wt(r),(y=this.owner)!=null&&y.isKeyPair){if(f){let b=[];for(let P of r){let w=await this.connection.sendTransaction(P,{skipPreflight:g});await jn(this.connection,w),b.push(w)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:g}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(f){let P=0,w=[],h=async()=>{if(!b[P])return;let B=await this.connection.sendTransaction(b[P],{skipPreflight:g});w.push({txId:B,status:"sent",signedTx:b[P]}),m==null||m([...w]),P++;let A=!1,k=null,T=null,K=S=>{k!==null&&clearInterval(k),T!==null&&this.connection.removeSignatureListener(T);let x=w.findIndex(_=>_.txId===B);if(x>-1){if(w[x].status==="error"||w[x].status==="success")return;w[x].status=S.err?"error":"success"}m==null||m([...w]),S.err||h()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var S;if(A){clearInterval(k);return}try{let x=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});x&&(A=!0,clearInterval(k),K({err:((S=x.meta)==null?void 0:S.err)||null}),console.log("tx status from getTransaction:",B))}catch(x){A=!0,clearInterval(k),console.error("getTransaction timeout:",x,B)}},$n)),T=this.connection.onSignature(B,S=>{if(A){this.connection.removeSignatureListener(T);return}A=!0,K(S)},"confirmed"),this.connection.getSignatureStatus(B)};return h(),{txIds:[],signedTxs:b}}else{let P=[];for(let w=0;w<b.length;w+=1){let h=await this.connection.sendTransaction(b[w],{skipPreflight:g});P.push(h)}return{txIds:P,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var m;let f=e||{},{splitIns:t=[],computeBudgetConfig:n}=f,o=at(f,["splitIns","computeBudgetConfig"]),i=n?Zn(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,g)=>E(V({},p),{[g.publicKey.toBase58()]:g}),{}),a=[],c=[],u=[],s=0;if(this.allInstructions.forEach(p=>{let g=[...u,p],y=n?[...i.instructions,...g]:g,P=[...new Set(g.map(w=>w.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat()).values()].map(w=>new en(w));if(p!==t[s]&&u.length<12&&(Tn({instructions:y,payer:this.feePayer,signers:P})||Tn({instructions:g,payer:this.feePayer,signers:P})))u.push(p);else{if(u.length===0)throw Error("item ins too big");s+=p===t[s]?1:0,Tn({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:P})?a.push(new In().add(...i.instructions,...u)):a.push(new In().add(...u)),c.push(Array.from(new Set(u.map(w=>w.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat())).map(w=>r[w]).filter(w=>w!==void 0)),u=[p]}}),u.length>0){let g=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);Tn({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g.map(y=>y.publicKey)})?a.push(new In().add(...i.instructions,...u)):a.push(new In().add(...u)),c.push(g)}return a.forEach(p=>p.feePayer=this.feePayer),(m=this.owner)!=null&&m.signer&&c.forEach(p=>{p.some(g=>g.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var B;let{sequentially:g,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:P,skipPreflight:w=!0}=p||{},h=P!=null?P:await Jt(this.connection,this.blockhashCommitment);if(a.forEach(async(A,k)=>{A.recentBlockhash=h,c[k].length&&A.sign(...c[k])}),Wt(a),(B=this.owner)!=null&&B.isKeyPair){if(g){let A=0,k=[];for(let T of a){if(++A,A<=b){k.push("tx skipped");continue}let K=await Zo(this.connection,T,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:w});k.push(K)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:w}))),signedTxs:a}}if(this.signAllTransactions){let A=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...A];if(g){let T=0,K=[],S=async()=>{if(!k[T])return;T<b&&(K.push({txId:"",status:"success",signedTx:k[T]}),y==null||y([...K]),T++,S());let x=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:w});K.push({txId:x,status:"sent",signedTx:k[T]}),y==null||y([...K]),T++;let _=!1,F=null,O=null,q=W=>{F!==null&&clearInterval(F),O!==null&&this.connection.removeSignatureListener(O);let X=K.findIndex(G=>G.txId===x);if(X>-1){if(K[X].status==="error"||K[X].status==="success")return;K[X].status=W.err?"error":"success"}y==null||y([...K]),W.err||S()};this.loopMultiTxStatus&&(F=setInterval(async()=>{var W;if(_){clearInterval(F);return}try{let X=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});X&&(_=!0,clearInterval(F),q({err:((W=X.meta)==null?void 0:W.err)||null}),console.log("tx status from getTransaction:",x))}catch(X){_=!0,clearInterval(F),console.error("getTransaction timeout:",X,x)}},$n)),O=this.connection.onSignature(x,W=>{if(_){this.connection.removeSignatureListener(O);return}_=!0,q(W)},"confirmed"),this.connection.getSignatureStatus(x)};return await S(),{txIds:K.map(x=>x.txId),signedTxs:k}}else{let T=[];for(let K=0;K<k.length;K+=1){let S=await this.connection.sendRawTransaction(k[K].serialize(),{skipPreflight:w});T.push(S)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var B;let h=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=h,a=at(h,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),c=V(V({},this.cluster==="devnet"?await Ho(this.connection):await Yo(this.connection)),o),u=Array.from(new Set([...this.lookupTableAddress,...i])),s=[];for(let A of u)c[A]===void 0&&s.push(new en(A));let f=await Xo({connection:this.connection,address:s});for(let[A,k]of Object.entries(f))c[A]=k;let m=t?Zn(t):{instructions:[],instructionTypes:[]},p=await Jt(this.connection,this.blockhashCommitment),g=this.signers.reduce((A,k)=>E(V({},A),{[k.publicKey.toBase58()]:k}),{}),y=[],b=[],P=[],w=0;if(this.allInstructions.forEach(A=>{let k=[...P,A],T=t?[...m.instructions,...k]:k;if(A!==n[w]&&P.length<r&&(hn({instructions:T,payer:this.feePayer,lookupTableAddressAccount:c})||hn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:c})))P.push(A);else{if(P.length===0)throw Error("item ins too big");w+=A===n[w]?1:0;let K={};for(let S of[...new Set(u)])c[S]!==void 0&&(K[S]=c[S]);if(t&&hn({instructions:[...m.instructions,...P],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let S=new Bn({payerKey:this.feePayer,recentBlockhash:p,instructions:[...m.instructions,...P]}).compileToV0Message(Object.values(c));y.push(new xn(S))}else{let S=new Bn({payerKey:this.feePayer,recentBlockhash:p,instructions:[...P]}).compileToV0Message(Object.values(c));y.push(new xn(S))}b.push(Array.from(new Set(P.map(S=>S.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat())).map(S=>g[S]).filter(S=>S!==void 0)),P=[A]}}),P.length>0){let k=[...new Set(P.map(T=>T.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat()).values()].map(T=>g[T]).filter(T=>T!==void 0);if(t&&hn({instructions:[...m.instructions,...P],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let T=new Bn({payerKey:this.feePayer,recentBlockhash:p,instructions:[...m.instructions,...P]}).compileToV0Message(Object.values(c));y.push(new xn(T))}else{let T=new Bn({payerKey:this.feePayer,recentBlockhash:p,instructions:[...P]}).compileToV0Message(Object.values(c));y.push(new xn(T))}b.push(k)}return(B=this.owner)!=null&&B.signer&&b.forEach(A=>{A.some(k=>k.publicKey.equals(this.owner.publicKey))||A.push(this.owner.signer)}),y.forEach((A,k)=>{A.sign(b[k])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async A=>{var _;let{sequentially:k,onTxUpdate:T,skipTxCount:K=0,recentBlockHash:S,skipPreflight:x=!0}=A||{};if(y.map(async(F,O)=>{b[O].length&&F.sign(b[O]),S&&(F.message.recentBlockhash=S)}),Wt(y),(_=this.owner)!=null&&_.isKeyPair){if(k){let F=0,O=[];for(let q of y){if(++F,F<=K){console.log("skip tx: ",F),O.push("tx skipped");continue}let W=await this.connection.sendTransaction(q,{skipPreflight:x});await jn(this.connection,W),O.push(W)}return{txIds:O,signedTxs:y}}return{txIds:await Promise.all(y.map(async F=>await this.connection.sendTransaction(F,{skipPreflight:x}))),signedTxs:y}}if(this.signAllTransactions){let F=await this.signAllTransactions(y.slice(K,y.length)),O=[...y.slice(0,K),...F];if(k){let q=0,W=[],X=async()=>{if(!O[q])return;if(q<K){W.push({txId:"",status:"success",signedTx:O[q]}),T==null||T([...W]),q++,X();return}let G=await this.connection.sendTransaction(O[q],{skipPreflight:x});W.push({txId:G,status:"sent",signedTx:O[q]}),T==null||T([...W]),q++;let oe=!1,ye=null,pe=null,ke=me=>{ye!==null&&clearInterval(ye),pe!==null&&this.connection.removeSignatureListener(pe);let ee=W.findIndex(ve=>ve.txId===G);if(ee>-1){if(W[ee].status==="error"||W[ee].status==="success")return;W[ee].status=me.err?"error":"success"}T==null||T([...W]),me.err||X()};this.loopMultiTxStatus&&(ye=setInterval(async()=>{var me;if(oe){clearInterval(ye);return}try{let ee=await this.connection.getTransaction(G,{commitment:"confirmed",maxSupportedTransactionVersion:0});ee&&(oe=!0,clearInterval(ye),ke({err:((me=ee.meta)==null?void 0:me.err)||null}),console.log("tx status from getTransaction:",G))}catch(ee){oe=!0,clearInterval(ye),console.error("getTransaction timeout:",ee,G)}},$n)),pe=this.connection.onSignature(G,me=>{if(oe){this.connection.removeSignatureListener(pe);return}oe=!0,ke(me)},"confirmed"),this.connection.getSignatureStatus(G)};return X(),{txIds:[],signedTxs:O}}else{let q=[];for(let W=0;W<O.length;W+=1){let X=await this.connection.sendTransaction(O[W],{skipPreflight:x});q.push(X)}return{txIds:q,signedTxs:O}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};var jo=(...l)=>l.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=te(t)}createTxBuilder(e){return this.scope.checkOwner(),new Jn({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(jo(e))}logInfo(...e){this.logger.info(jo(e))}logAndCreateError(...e){let t=jo(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Ts,SystemProgram as hs}from"@solana/web3.js";import Is from"bn.js";import{createCloseAccountInstruction as Bs,createInitializeAccountInstruction as xs,createTransferInstruction as Lp,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";import{Keypair as Ps,PublicKey as As}from"@solana/web3.js";import bp from"bn.js";import{TOKEN_PROGRAM_ID as ws}from"@solana/spl-token";function es(l){return l instanceof Uint8Array||l!=null&&typeof l=="object"&&l.constructor.name==="Uint8Array"}function $o(l,...e){if(!es(l))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(l.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${l.length}`)}function Jo(l,e=!0){if(l.destroyed)throw new Error("Hash instance has been destroyed");if(e&&l.finished)throw new Error("Hash#digest() has already been called")}function or(l,e){$o(l);let t=e.outputLen;if(l.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var to=l=>new DataView(l.buffer,l.byteOffset,l.byteLength),bt=(l,e)=>l<<32-e|l>>>e;var cd=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function ts(l){if(typeof l!="string")throw new Error(`utf8ToBytes expected string, got ${typeof l}`);return new Uint8Array(new TextEncoder().encode(l))}function ei(l){return typeof l=="string"&&(l=ts(l)),$o(l),l}var eo=class{clone(){return this._cloneInto()}},ld={}.toString;function ir(l){let e=n=>l().update(ei(n)).digest(),t=l();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>l(),e}function ns(l,e,t,n){if(typeof l.setBigUint64=="function")return l.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;l.setUint32(e+c,r,n),l.setUint32(e+u,a,n)}var rr=(l,e,t)=>l&e^~l&t,ar=(l,e,t)=>l&e^l&t^e&t,no=class extends eo{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=to(this.buffer)}update(e){Jo(this);let{view:t,buffer:n,blockLen:o}=this;e=ei(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let c=to(e);for(;o<=i-r;r+=o)this.process(c,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Jo(this),or(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let f=r;f<o;f++)t[f]=0;ns(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=to(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,s=this.get();if(u>s.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f<u;f++)a.setUint32(4*f,s[f],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var os=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]),Lt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ot=new Uint32Array(64),ti=class extends no{constructor(){super(64,32,8,!1),this.A=Lt[0]|0,this.B=Lt[1]|0,this.C=Lt[2]|0,this.D=Lt[3]|0,this.E=Lt[4]|0,this.F=Lt[5]|0,this.G=Lt[6]|0,this.H=Lt[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:c}=this;return[e,t,n,o,i,r,a,c]}set(e,t,n,o,i,r,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=c|0}process(e,t){for(let f=0;f<16;f++,t+=4)Ot[f]=e.getUint32(t,!1);for(let f=16;f<64;f++){let m=Ot[f-15],p=Ot[f-2],g=bt(m,7)^bt(m,18)^m>>>3,y=bt(p,17)^bt(p,19)^p>>>10;Ot[f]=y+Ot[f-7]+g+Ot[f-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:c,G:u,H:s}=this;for(let f=0;f<64;f++){let m=bt(a,6)^bt(a,11)^bt(a,25),p=s+m+rr(a,c,u)+os[f]+Ot[f]|0,y=(bt(n,2)^bt(n,13)^bt(n,22))+ar(n,o,i)|0;s=u,u=c,c=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,s=s+this.H|0,this.set(n,o,i,r,a,c,u,s)}roundClean(){Ot.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var sr=ir(()=>new ti);import{PublicKey as ys}from"@solana/web3.js";import dr,{isBN as pr}from"bn.js";import{bits as is,BitStructure as Ad,blob as rs,Blob as wd,cstr as kd,f32 as Td,f32be as hd,f64 as Id,f64be as Bd,greedy as xd,Layout as as,ns64 as Sd,ns64be as Kd,nu64 as Cd,nu64be as Rd,offset as ss,s16 as Ld,s16be as Od,s24 as Nd,s24be as Md,s32 as us,s32be as Fd,s40 as vd,s40be as _d,s48 as Vd,s48be as Ed,s8 as Dd,seq as cs,struct as Wd,Structure as ls,u16 as ms,u16be as qd,u24 as Ud,u24be as Gd,u32 as ds,u32be as zd,u40 as Xd,u40be as Yd,u48 as Hd,u48be as Qd,u8 as ps,UInt as fs,union as Zd,Union as jd,unionLayoutDiscriminator as $d,utf8 as Jd}from"@solana/buffer-layout";var oo=as,ur=ls;var ni=fs;var cr=ps,Oe=ms;var io=ds;var Ne=us;var lr=cs;var J=rs;var oi=is,mr=ss;var Ut=class extends oo{constructor(t,n,o){super(t,o);this.blob=J(t),this.signed=n}decode(t,n=0){let o=new dr(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new dr(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},ro=class extends oo{constructor(t){super(8,t);this._lower=oi(io(),!1),this._upper=oi(io(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return V(V({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function M(l){return new ni(1,l)}function he(l){return new ni(4,l)}function d(l){return new Ut(8,!1,l)}function z(l){return new Ut(16,!1,l)}function fr(l){return new Ut(1,!0,l)}function tn(l){return new Ut(8,!0,l)}function yr(l){return new Ut(16,!0,l)}var Sn=class extends oo{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function I(l){return new Sn(J(32),e=>new ys(e),e=>e.toBuffer(),l)}function Ie(l){return new Sn(cr(),bs,gs,l)}function bs(l){if(l===0)return!1;if(l===1)return!0;throw new Error("Invalid bool: "+l)}function gs(l){return l?1:0}function br(l,e){let t=io("length"),n=L([t,D(l,mr(t,-t.span),"values")]);return new Sn(n,({values:o})=>o,o=>({values:o}),e)}var ii=class extends ur{decode(e,t){return super.decode(e,t)}};function L(l,e,t){return new ii(l,e,t)}function D(l,e,t){let n,o=typeof e=="number"?e:pr(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=pr(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,r)},set(i,r,a){return r==="count"&&(n=a),Reflect.set(i,r,a)}});return lr(l,o,t)}var nn=L([I("mint"),I("owner"),d("amount"),he("delegateOption"),I("delegate"),M("state"),he("isNativeOption"),d("isNative"),d("delegatedAmount"),he("closeAuthorityOption"),I("closeAuthority")]);function on({fromPublicKey:l,programId:e=ws,assignSeed:t}){let n=t?btoa(t).slice(0,32):Ps.generate().publicKey.toBase58().slice(0,32);return{publicKey:ks(l,n,e),seed:n}}function ks(l,e,t){let n=Buffer.concat([l.toBuffer(),Buffer.from(e),t.toBuffer()]),o=sr(n);return new As(o)}function gr(l){let{mint:e,tokenAccount:t,owner:n,programId:o=Kn}=l;return xs(t,e,n,o)}function rn(l){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Kn}=l;return Bs(e,t,o,n,i)}async function ao(l){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:r}=l,a=await e.getMinimumBalanceForRentExemption(nn.span,n),c=ge(t).add(new Is(a)),u=on({fromPublicKey:o,programId:Kn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[hs.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:nn.span,programId:Kn}),gr({mint:new Ts(ft.address),tokenAccount:u.publicKey,owner:i,programId:Kn})],instructionTypes:[j.CreateAccount,j.InitAccount],endInstructionTypes:r?[]:[j.CloseAccount],endInstructions:r?[]:[rn({tokenAccount:u.publicKey,payer:o,owner:i})]}}import{PublicKey as UA,SystemProgram as GA}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as XA}from"@solana/spl-token";import{PublicKey as Ss}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ks}from"@solana/spl-token";function ce(l,e,t){return ie([l.toBuffer(),(t!=null?t:Ks).toBuffer(),e.toBuffer()],new Ss("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as Y}from"@solana/web3.js";var Pr=new Y("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Ar=new Y("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),wr=new Y("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ri=new Y("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),uf=new Y("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Cs=new Y("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ai=new Y("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),si=new Y("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),cf=new Y("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),kr=new Y("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ui=new Y("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Rs=new Y("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ls=new Y("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),so=new Y("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),lf=new Y("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Os=new Y("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),uo=new Y("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Ns=new Y("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),mf=new Y("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Ms=new Y("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Fs=new Y("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),vs=new Y("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),df=new Y("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),pf=new Y("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),ff=new Y("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),yf=new Y("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),bf=new Y("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX");var Nt={OPEN_BOOK_PROGRAM:new Y("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new Y("Ray1111111111111111111111111111111111111111"),AMM_V4:new Y("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new Y("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new Y("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new Y("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new Y("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new Y("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new Y("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new Y("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new Y("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new Y("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:Y.default,Router:new Y("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new Y("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new Y("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new Y("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new Y("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new Y("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new Y("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new Y("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new Y("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new Y("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new Y("Ray1111111111111111111111111111111111111111")};import nw from"decimal.js";import{createAssociatedTokenAccountIdempotentInstruction as Tg,TOKEN_2022_PROGRAM_ID as hg,TOKEN_PROGRAM_ID as Ig}from"@solana/spl-token";import{PublicKey as xg}from"@solana/web3.js";import Kg from"bn.js";import Rg from"decimal.js";import{TOKEN_PROGRAM_ID as Rf}from"@solana/spl-token";import{PublicKey as Mf}from"@solana/web3.js";var _s=L([he("mintAuthorityOption"),I("mintAuthority"),d("supply"),M("decimals"),M("isInitialized"),he("freezeAuthorityOption"),I("freezeAuthority")]);var co=l=>new Ce({mint:l.address,decimals:l.decimals,symbol:l.symbol,name:l.name}),Me=o=>{var i=o,{amount:l,isRaw:e,name:t}=i,n=at(i,["amount","isRaw","name"]);return new fe(new Ce({mint:it(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),l,e,t)};var At=o=>{var i=o,{address:l,programId:e,decimals:t}=i,n=at(i,["address","programId","decimals"]);return V({chainId:101,address:it(l).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)};import{ASSOCIATED_TOKEN_PROGRAM_ID as Ai,TOKEN_2022_PROGRAM_ID as Le,TOKEN_PROGRAM_ID as de}from"@solana/spl-token";import{Keypair as bo,PublicKey as v,SystemProgram as kt,TransactionInstruction as Ke}from"@solana/web3.js";import go from"bn.js";import re from"bn.js";var le=new re(1).shln(64),an=64,Vs=new re(1).shln(128),wt=new re(1).shln(64).subn(1),Es=new re(1).shln(128).subn(1),ct=-443636,lt=443636,Ye=new re("4295048016"),He=new re("79226673521066979257578248091"),Tr=new re("59543866431248"),hr=new re("184467440737095516"),Ir=new re("15793534762490258745"),Br=16,lo=512,Je=60,Xf=new re("18446743708227953217"),xr=[{bit:0,factor:new re("fffcb933bd6fb800",16)},{bit:1,factor:new re("fff97272373d4000",16)},{bit:2,factor:new re("fff2e50f5f657000",16)},{bit:3,factor:new re("ffe5caca7e10f000",16)},{bit:4,factor:new re("ffcb9843d60f7000",16)},{bit:5,factor:new re("ff973b41fa98e800",16)},{bit:6,factor:new re("ff2ea16466c9b000",16)},{bit:7,factor:new re("fe5dee046a9a3800",16)},{bit:8,factor:new re("fcbe86c7900bb000",16)},{bit:9,factor:new re("f987a7253ac65800",16)},{bit:10,factor:new re("f3392b0822bb6000",16)},{bit:11,factor:new re("e7159475a2caf000",16)},{bit:12,factor:new re("d097f3bdfd2f2000",16)},{bit:13,factor:new re("a9f746462d9f8000",16)},{bit:14,factor:new re("70d869a156f31c00",16)},{bit:15,factor:new re("31be135f97ed3200",16)},{bit:16,factor:new re("9aa508b5b85a500",16)},{bit:17,factor:new re("5d6af8dedc582c",16)},{bit:18,factor:new re("2216e584f5fa",16)}],xt=1e6;var mo=1e5,Cn=1e4,Sr=1e4,Kr=1e5;var Rn=3,Cr=100;var Rr=10,Lr=100,sn=14;var U=new re(0),De=new re(1),Yf=new re(-1);var Hf=new re("18446744073700000000");var Ds=L([J(8),M("bump"),Oe("index"),I("owner"),he("protocolFeeRate"),he("tradeFeeRate"),Oe("tickSpacing"),he("fundFeeRate"),D(he(),1),I("fundOwner"),D(d(),3)]),Ws=L([he("blockTimestamp"),tn("tickCumulative"),D(d(),4)]),Or=L([J(8),Ie("initialized"),d("recentEpoch"),Oe("observationIndex"),I("poolId"),D(Ws,Cr,"observations"),D(d(),4)]),qs=L([Oe("filterPeriod"),Oe("decayPeriod"),Oe("reductionFactor"),he("dynamicFeeControl"),he("maxVolatilityAccumulator"),Ne("tickSpacingIndexReference"),he("volatilityReference"),he("volatilityAccumulator"),d("lastUpdateTimestamp"),D(M(),46)]),Us=L([M("state"),d("openTime"),d("endTime"),d("lastUpdateTime"),z("emissionsPerSecondX64"),d("totalEmissioned"),d("claimed"),I("mint"),I("vault"),I("creator"),z("growthGlobalX64")]),un=L([J(8),M("bump"),I("configId"),I("creator"),I("mintA"),I("mintB"),I("vaultA"),I("vaultB"),I("observationId"),M("mintDecimalsA"),M("mintDecimalsB"),Oe("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),Ne("tickCurrent"),he(),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),d("protocolFeesTokenA"),d("protocolFeesTokenB"),D(z(),4),M("status"),M("feeOn"),J(6),D(Us,Rn,"rewardInfos"),J(8*16,"tickArrayBitmap"),D(d(),4),d("fundFeesTokenA"),d("fundFeesTokenB"),d("startTime"),d("recentEpoch"),qs.replicate("dynamicFeeInfo"),D(d(),46)]),Gs=L([z("growthInsideLastX64"),d("rewardAmountOwed")]),zs=L([J(8),M("bump"),I("nftMint"),I("poolId"),Ne("tickLower"),Ne("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),d("tokenFeesOwedA"),d("tokenFeesOwedB"),D(Gs,Rn,"rewardInfos"),d("recentEpoch"),D(d(),7)]),$f=L([J(8),M("bump"),I("poolId"),Ne("tickLower"),Ne("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),d("tokenFeesOwedA"),d("tokenFeesOwedB"),D(z(),Rn,"rewardGrowthInside"),d("recentEpoch"),D(d(),7)]),Xs=L([Ne("tick"),yr("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),D(z(),Rn,"rewardGrowthsOutsideX64"),d("orderPhase"),d("ordersAmount"),d("partFilledOrdersRemaining"),z("unfilledRatioX64"),D(he(),3)]),Ln=L([J(8),I("poolId"),Ne("startTickIndex"),D(Xs,Je,"ticks"),M("initializedTickCount"),d("recentEpoch"),D(M(),107)]),Ys=L([J(8),M("bump"),D(I(),Rr,"operationOwners"),D(I(),Lr,"whitelistMints")]),Hs=L([J(8),I("poolId"),I("owner"),Ne("tick"),Ie("zeroForOne"),d("orderPhase"),d("totalAmount"),d("filledAmount"),d("settleBase"),d("settleOutput"),d("openTime"),z("unfilledRatioX64"),D(d(),4)]),ci=L([J(8),I("poolId"),J(8*8*sn,"positiveTickArrayBitmap"),J(8*8*sn,"negativeTickArrayBitmap")]),Jf=L([J(8),Oe("index"),Oe("filterPeriod"),Oe("decayPeriod"),Oe("reductionFactor"),he("dynamicFeeControl"),he("maxVolatilityAccumulator"),D(d(),8)]),Qs=L([J(8),I("wallet"),M("nonceIndex"),d("orderNonce"),D(d(),4)]),ey=L([d(),M("bump"),I("owner"),I("poolId"),I("positionId"),I("nftAccount"),D(d(),8)]),Zs=L([J(8),M("bump"),I("lockOwner"),I("poolId"),I("positionId"),I("nftAccount"),I("lockNftMint"),d("recentEpoch"),D(d(),8)]);import oy from"bn.js";function li(l){let e=Buffer.alloc(2);return e.writeUInt16LE(l),e}function mi(l){let e=Buffer.alloc(4);return e.writeInt32LE(l),e}function Nr(l){let e=Buffer.alloc(4);return e.writeInt32BE(l),e}var dy=Buffer.from("amm_config","utf8"),di=Buffer.from("pool","utf8"),Mr=Buffer.from("pool_vault","utf8"),js=Buffer.from("pool_reward_vault","utf8"),Fr=Buffer.from("position","utf8"),$s=Buffer.from("tick_array","utf8"),Js=Buffer.from("operation","utf8"),eu=Buffer.from("pool_tick_array_bitmap_extension","utf8"),tu=Buffer.from("observation","utf8"),py=Buffer.from("support_mint","utf8"),fy=Buffer.from("dynamic_fee_config","utf8"),nu=Buffer.from("permission","utf8");function vr(l,e,t,n){return ie([di,e.toBuffer(),t.toBuffer(),n.toBuffer()],l)}function _r(l,e){return ie([nu,e.toBuffer()],l)}function Vr(l,e,t,n,o){return ie([di,e.toBuffer(),t.toBuffer(),n.toBuffer(),li(o)],l)}function cn(l,e,t){return ie([Mr,e.toBuffer(),t.toBuffer()],l)}function Er(l,e,t){return ie([js,e.toBuffer(),t.toBuffer()],l)}function Be(l,e,t){return ie([$s,e.toBuffer(),Nr(t)],l)}function St(l,e,t,n){return ie([Fr,e.toBuffer(),mi(t),mi(n)],l)}function mt(l,e){return ie([Fr,e.toBuffer()],l)}function Gt(l){return ie([Buffer.from("metadata","utf8"),Rt.toBuffer(),l.toBuffer()],Rt)}function po(l){return ie([Js],l)}function xe(l,e){return ie([eu,e.toBuffer()],l)}function pi(l,e){return ie([tu,e.toBuffer()],l)}var Dr=Buffer.from("locked_position","utf8");function fi(l,e){return ie([Dr,e.toBuffer()],l)}function yi(l,e){return ie([Dr,e.toBuffer()],l)}import{sha256 as iu}from"js-sha256";import Wr from"bn.js";import bi from"decimal.js";function Se(l,e,t){if(t.isZero())throw new Error("Division by zero");return l.mul(e).div(t)}function we(l,e,t){if(t.isZero())throw new Error("Division by zero");let n=l.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function fo(l,e){return l.div(e).add(l.mod(e).isZero()?U:De)}var Ay=new Wr(1).shln(256).subn(1);function qr(l){return l.isZero()?-1:l.bitLength()-1}function Ur(l,e){return new bi(l.toString()).div(bi.pow(2,64)).toDecimalPlaces(e)}function gi(l){return new Wr(l.mul(bi.pow(2,64)).floor().toFixed())}import Oy from"bn.js";import _e from"bn.js";import ln from"decimal.js";var Mt=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let i=[],r=e.length*8,a=0,c=r-1;if(o){let f=o.tick/(t*Je)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(f)):c=Math.min(r-1,Math.floor(f))}if(a>c)return i;let u=Math.floor(a/8),s=Math.floor(c/8);for(let f=u;f<=s;f++){if(!e[f])continue;let m=f===u?a%8:0,p=f===s?c%8:7;for(let g=m;g<=p;g++)e[f]&1<<g&&i.push((f*8+g+n)*t*Je)}return i}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Je/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-lo,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Je/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:lo,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let i=[];if(o){let c=Math.floor(o.tick/Je/t);if(o.valueType==="gte"&&c>=-512)return i}let r=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(Je*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(Je*t))+7680:0;e:for(let c=0;c<sn;c++){let u=sn-1-c;for(let s=0;s<512;s++){let f=c*512+s;if(f>r)break e;if(f<a)continue;let m=u*64+Math.floor(s/8);if(!e[m]){s=Math.floor(s/8)*8+7;continue}if(e[m]&1<<s%8){let p=(c*512+s-7680)*Je*t;if(i.push(p),n!==void 0&&i.length>=n)break e}}}return i}static findTickArrayStartIndex({tickSpacing:e,poolBitmap:t,tickArrayBitmap:n,findInfo:o}){if(o.type==="all")return[...this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap}),...this.findPoolBitmap({tickSpacing:e,bitmap:t}),...this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap})];let i=ae.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:r}=o;if(o.type==="oneForZero"){let a={tick:i,valueType:"gte"},c=[()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}),()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a})];return this.collectUntil(c,r)}if(o.type==="zeroForOne"){let a={tick:i,valueType:"lte"},c=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((u,s)=>s-u),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((u,s)=>s-u),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((u,s)=>s-u)];return this.collectUntil(c,r)}throw new Error("find info type check error")}static collectUntil(e,t){let n=[];for(let o of e){if(t!==void 0&&n.length>=t)break;n.push(...o())}return n.slice(0,t)}static findTickArrayAddress(e){return this.findTickArrayStartIndex(e).map(t=>Be(e.programId,e.poolId,t).publicKey)}static maxTickInTickarrayBitmap(e){return e*Je*lo}},ae=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(Q.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(Q.isInitialized({data:e.ticks[n]}))return e.ticks[n]}static nextInitalizedTick({data:e,currentTickIndex:t,tickSpacing:n,zeroForOne:o}){if(this.getTickArrayStartIndex(t,n)!==e.startTickIndex)return;let r=Math.floor((t-e.startTickIndex)/n);if(o){for(let a=r;a>=0;a--)if(Q.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=r+1;a<Je;a++)if(Q.isInitialized({data:e.ticks[a]}))return e.ticks[a]}static getTickArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=this.getTickArrayStartIndex(e,t);return Math.floor((e-n)/t)}static tickCount(e){return Je*e}static getMinTick(e){return Math.ceil(ct/e)*e}static getMaxTick(e){return Math.floor(lt/e)*e}},Q=class{static isInitialized({data:e}){return this.hasLiquidity({data:e})||this.hasLimitOrders({data:e})}static hasLimitOrders({data:e}){return!e.ordersAmount.isZero()||!e.partFilledOrdersRemaining.isZero()}static hasLiquidity({data:e}){return!e.liquidityGross.isZero()}static isValidTick(e){return e>=ct&&e<=lt}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${ct}, ${lt}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=le.clone();for(let{bit:o,factor:i}of xr)(t&1<<o)!==0&&(n=Se(n,i,le));return e>0&&(n=Se(le,le,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=Q.getPriceAtTick(t,!1);return Se(e,o,le)}else{let o=Q.getPriceAtTick(t,!0);return Se(e,le,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=Q.getPriceAtTick(t,!0);return we(e,o,le)}else{let o=Q.getPriceAtTick(t,!1);return we(e,le,o)}}static limitOrderUnfilledAmount({tick:e}){return e.ordersAmount.add(e.partFilledOrdersRemaining)}static matchLimitOrder({tick:e,swapAmount:t,swapDirectionZeroForOne:n,isBaseInput:o,feeRate:i,isFeeOnInput:r}){let a={amountIn:U,amountOut:U,ammFeeAmount:U},c=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||c.isZero())return a;if(o)r?(a.ammFeeAmount=we(t,new _e(i),We),a.amountIn=t.sub(a.ammFeeAmount)):a.amountIn=t,a.amountOut=this.getLimitOrderOutput({amountIn:a.amountIn,tick:e.tick,zeroForOne:n}),a.amountOut.gt(c)&&(a.amountOut=c,a.amountIn=this.getLimitOrderInput({amountOut:c,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=we(a.amountIn,new _e(i),We.sub(new _e(i)))));else{let f=_e.min(t,c);r?a.amountOut=f:a.amountOut=_e.min(we(f,We,We.sub(new _e(i))),c),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=we(a.amountIn,new _e(i),We.sub(new _e(i))))}let u=U;e.partFilledOrdersRemaining.gt(U)&&(u=_e.min(e.partFilledOrdersRemaining,a.amountOut),u.gt(U)&&(e.unfilledRatioX64=Se(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(u),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(u));let s=a.amountOut.sub(u);if(s.gt(U)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(s))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add(De),e.unfilledRatioX64=Se(le,e.ordersAmount.sub(s),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(s),e.ordersAmount=U}return r||(a.ammFeeAmount=we(a.amountOut,new _e(i),We),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(le.subn(1)).div(le):n.mul(n).div(le)}static getTickAtSqrtPrice(e){if(!(e.gte(Ye)&&e.lte(He)))throw Error("SqrtPriceX64");let t=qr(e),n=t-64,o;n>=0?o=new _e(n).shln(32):o=new _e(-n).shln(32).neg();let i;t>=64?i=e.shrn(t-63):i=e.shln(63-t);let r=new _e(0),a=new _e(1).shln(63);for(let b=0;b<Br&&!a.isZero();b++){i=i.mul(i);let P=i.shrn(127).toNumber();i=i.shrn(63+P),P&&(r=r.add(a)),a=a.shrn(1)}let c=r.shrn(32),s=o.add(c).mul(Tr),f=s.sub(hr),m=s.add(Ir),p=this.signedShrn64(f),g=this.signedShrn64(m);return p===g?p:Q.getSqrtPriceAtTick(g).lte(e)?g:p}static signedShrn64(e){if(e.isNeg()){let t=new _e(1).shln(64),n=e.div(t);return!e.mod(t).isZero()&&e.isNeg()?n.subn(1).toNumber():n.toNumber()}else return e.shrn(64).toNumber()}static sqrtPriceX64ToPrice(e,t,n){let o=e.mul(e),i=t-n,r=20,a=new _e(10).pow(new _e(r)),c=o.mul(a),u=new _e(1).shln(128),f=c.div(u).toString();for(;f.length<=r;)f="0"+f;let m=f.slice(0,-r),p=f.slice(-r),g=m+"."+p;return new ln(g).mul(new ln(10).pow(i))}static tickToPrice(e,t,n){let o=Q.getSqrtPriceAtTick(e);return this.sqrtPriceX64ToPrice(o,t,n)}static priceToTick(e,t,n){let i=e.div(Math.pow(10,t-n)).log().div(new ln(1.0001).log()).floor();return Math.max(ct,Math.min(lt,i.toNumber()))}static priceToSqrtPriceX64(e,t,n){let r=e.div(Math.pow(10,t-n)).sqrt().mul(new ln(2).pow(64));return new _e(r.toFixed(0))}static toTickIndex(e,t){return e>=0?e-e%t:e-e%t-(e%t!==0?t:0)}static getPriceAndTick({price:e,mintADecimals:t,mintBDecimals:n,zeroForOne:o,tickSpacing:i}){let r=e.clamp(1/10**Math.max(t,n),Number.MAX_SAFE_INTEGER);o||(r=new ln(1).div(r));let a=Q.toTickIndex(Q.priceToTick(r,t,n),i),c=Q.tickToPrice(a,t,n);return{price:o?c:new ln(1).div(c),tick:a}}};import yo from"bn.js";import Gr from"decimal.js";var Re=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.shln(an),r=t.sub(e);if(!e.gt(U))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?fo(we(i,r,t),e):Se(i,r,t).div(e);if(a.gt(wt))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=o?we(n,t.sub(e),le):Se(n,t.sub(e),le);if(i.gt(wt))throw Error("MaxTokenOverflow");return i}static addDelta(e,t){if(t.isNeg()){let n=t.neg();if(e.lt(n))throw new Error("Liquidity underflow");return e.sub(n)}else return e.add(t)}static getLiquidityFromAmountA(e,t,n){if(n.isZero())return U;e.gt(t)&&([e,t]=[t,e]);let o=Se(e,t,le),i=t.sub(e);return Se(n,o,i)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return U;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return Se(n,le,o)}static getLiquidityFromAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return this.getLiquidityFromAmountA(t,n,o);if(e.lt(n)){let r=this.getLiquidityFromAmountA(e,n,o),a=this.getLiquidityFromAmountB(t,e,i);return r.lt(a)?r:a}else return this.getLiquidityFromAmountB(t,n,i)}static getAmountsForLiquidity(e,t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let r=U,a=U;return e.lte(t)?r=this.getDeltaAmountAUnsigned(t,n,o,i):e.lt(n)?(r=this.getDeltaAmountAUnsigned(e,n,o,i),a=this.getDeltaAmountBUnsigned(t,e,o,i)):a=this.getDeltaAmountBUnsigned(t,n,o,i),{amountA:r,amountB:a}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=this.getAmountsForLiquidity(e,t,n,o,r),s=i?1+a:1-a,f=new yo(new Gr(c.toString()).mul(s).toFixed(0)),m=new yo(new Gr(u.toString()).mul(s).toFixed(0));return{amountSlippageA:f,amountSlippageB:m}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:e,sqrtPriceLowerX64:t,sqrtPriceUpperX64:n,amountInfo:o}){let i;if(o.type==="liquidity")i=o.amount;else if(o.type==="amountA")i=e.gte(n)?U:this.getLiquidityFromAmountA(yo.max(e,t),n,o.amount);else if(o.type==="amountB")i=e.lte(t)?U:this.getLiquidityFromAmountB(t,yo.min(e,n),o.amount);else throw Error("amount info type check error");return V({liquidity:i},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};import{PublicKey as tt}from"@solana/web3.js";import qe from"bn.js";import{TOKEN_2022_PROGRAM_ID as zr,TOKEN_PROGRAM_ID as Pb}from"@solana/spl-token";import ne from"decimal.js";import dn from"bn.js";import Fe from"bn.js";var On=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let i=t.shln(an);if(o){let r=n.mul(e),a=i.add(r);if(a.gte(i))return we(i,e,a);let c=Se(i,De,e);return we(i,De,c.add(n))}else{let r=n.mul(e);if(i.lte(r))throw new Error("Insufficient liquidity for token0 removal");let a=i.sub(r);return we(i,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let i=n.shln(an).div(t);return e.add(i)}else{let i=fo(n.shln(an),t);return e.sub(i)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(U))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(U))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceFromOutput(e,t,n,o){if(!e.gt(U))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(U))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var gt=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:i}){let r={amountSpecifiedRemaining:t,amountCalculated:U,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:U,protocolFee:U,fundFee:U,liquidity:e.liquidity,sqrtPriceNextX64:U,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:mn.getDynamicFeeInfo({poolInfo:e})};return r.dynamicFeeInfo&&(r.tickSpacingIndex=Mn.tickSpacingIndexFromTick(r.tick,r.tickSpacing),mn.updateReference({dynamicFeeInfo:r.dynamicFeeInfo,tickSpacingIndex:r.tickSpacingIndex,currentTimestamp:i})),r}static getTargetPriceBasedOnNextTick({data:e,tickNext:t,zeroForOne:n,sqrtPriceLimitX64:o}){e.tickNext=t,e.tickNext<ct?e.tickNext=ct:e.tickNext>lt&&(e.tickNext=lt),e.sqrtPriceNextX64=Q.getSqrtPriceAtTick(e.tickNext);let i;if(n&&e.sqrtPriceNextX64.lt(o)||!n&&e.sqrtPriceNextX64.gt(o)?i=o:i=e.sqrtPriceNextX64,n){if(e.tick<e.tickNext)throw Error("data.tick < data.tickNext");if(e.sqrtPriceX64.lt(e.sqrtPriceNextX64))throw Error("data.sqrtPriceX64.lt(data.sqrtPriceNextX64)");if(e.sqrtPriceX64.lt(i))throw Error("data.sqrtPriceX64.lt(targetPrice)")}else{if(e.tickNext<=e.tick)throw Error("data.tickNext <= data.tick");if(e.sqrtPriceNextX64.lt(e.sqrtPriceX64))throw Error("data.sqrtPriceNextX64.lt(data.sqrtPriceX64)");if(i.lt(e.sqrtPriceX64))throw Error("targetPrice.lt(data.sqrtPriceX64)")}return i}static updateVolatilityAccumulator({state:e}){!e.dynamicFeeInfo||mn.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,i=Kr*Cn*Cn,r=we(new Fe(e.dynamicFeeControl),new Fe(o),new Fe(i)).toNumber();return r>mo?mo:r}static getTotalFeeRate({data:e}){if(e.dynamicFeeInfo){let t=this.computeDynamicFeeRate({data:e.dynamicFeeInfo,tickSpacing:e.tickSpacing}),n=e.baseFeeRate+t;return Math.min(mo,n)}return e.baseFeeRate}static getSpacingBoundedPrice({data:e,targetPrice:t,zeroForOne:n}){if(e.dynamicFeeInfo===void 0)return{isSkipped:!0,boundedPrice:t};if(e.liquidity.isZero()||e.dynamicFeeInfo.volatilityAccumulator===e.dynamicFeeInfo.maxVolatilityAccumulator)return{isSkipped:!0,boundedPrice:t};let o=e.tickSpacing,i=n?e.tickSpacingIndex*o:(e.tickSpacingIndex+1)*o,r=Math.max(ct,Math.min(lt,i)),a=Q.getSqrtPriceAtTick(r);return n?{isSkipped:!1,boundedPrice:Fe.max(t,a)}:{isSkipped:!1,boundedPrice:Fe.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:i,isFeeOnInput:r,protocolFeeRate:a,fundFeeRate:c}){let u=r?t.add(o):t;i?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(u),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(u)),this.splitFee({state:e,feeAmount:o,protocolFeeRate:a,fundFeeRate:c})}static updateDynamicFeeIndex({state:e,zeroForOne:t,isSkippedTickSpacing:n}){if(e.dynamicFeeInfo!==void 0){if(n){let o=e.sqrtPriceX64.eq(e.sqrtPriceNextX64)?e.tickNext:e.tick,i=Mn.tickSpacingIndexFromTick(o,e.tickSpacing);!t&&o%e.tickSpacing===0&&(i=i-1),e.tickSpacingIndex=i,e.dynamicFeeInfo.volatilityAccumulator!==e.dynamicFeeInfo.maxVolatilityAccumulator&&this.updateVolatilityAccumulator({state:e})}e.tickSpacingIndex+=t?-1:1}}static splitFee({state:e,feeAmount:t,protocolFeeRate:n,fundFeeRate:o}){let i=t;if(n.gt(U)){let r=t.mul(n).div(new Fe(We));e.protocolFee=e.protocolFee.add(r),i=i.sub(r)}if(o.gt(U)){let r=t.mul(o).div(new Fe(We));e.fundFee=e.fundFee.add(r),i=i.sub(r)}if(e.liquidity.gt(U)){let r=Se(i,le,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(r),e.lpFee=e.lpFee.add(i)}}},Nn=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:U,amountIn:U,amountOut:U,feeAmount:U}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:i}){if(i)try{return o?Re.getDeltaAmountAUnsigned(t,e,n,!0):Re.getDeltaAmountBUnsigned(e,t,n,!0)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}else try{return o?Re.getDeltaAmountBUnsigned(t,e,n,!1):Re.getDeltaAmountAUnsigned(e,t,n,!1)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}}static computeSwap(e,t,n,o,i,r,a,c){let u=this.newSwapComputationResult({});if(r){let f=c?Se(o,new Fe(xt-i),new Fe(xt)):o,m=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});m!==null&&(u.amountIn=m),u.sqrtPriceNextX64=m!==null&&f.gte(u.amountIn)?t:On.getNextSqrtPriceFromInput(e,n,f,a)}else{let f=c?o:we(o,new Fe(xt),new Fe(xt-i)),m=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});m!==null&&(u.amountOut=m),u.sqrtPriceNextX64=m!==null&&f.gte(u.amountOut)?t:On.getNextSqrtPriceFromOutput(e,n,f,a)}if(a){if(!u.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(u.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let s=t.eq(u.sqrtPriceNextX64);if(a?(s&&r||(u.amountIn=Re.getDeltaAmountAUnsigned(u.sqrtPriceNextX64,e,n,!0)),s&&!r||(u.amountOut=Re.getDeltaAmountBUnsigned(u.sqrtPriceNextX64,e,n,!1))):(s&&r||(u.amountIn=Re.getDeltaAmountBUnsigned(e,u.sqrtPriceNextX64,n,!0)),s&&!r||(u.amountOut=Re.getDeltaAmountAUnsigned(e,u.sqrtPriceNextX64,n,!1))),r)c?u.sqrtPriceNextX64.eq(t)?u.feeAmount=we(u.amountIn,new Fe(i),new Fe(xt-i)):u.feeAmount=o.sub(u.amountIn):(u.feeAmount=we(u.amountOut,new Fe(i),new Fe(xt)),u.amountOut=u.amountOut.sub(u.feeAmount),s||(u.amountIn=o));else if(c)u.amountOut=Fe.min(u.amountOut,o),u.feeAmount=we(u.amountIn,new Fe(i),new Fe(xt-i));else{u.feeAmount=we(u.amountOut,new Fe(i),new Fe(xt));let f=u.amountOut.sub(u.feeAmount);f.gt(o)?(u.feeAmount=u.amountOut.sub(o),u.amountOut=o):u.amountOut=f}return u}};function Pi({programId:l,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:i,amountSpecified:r,sqrtPriceLimitX64:a,zeroForOne:c,isBaseInput:u,blockTimestamp:s,includeExtraTickArrays:f}){a.isZero()&&(a=c?new dn(Ye).addn(1):new dn(He).subn(1));let m=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:r,amountCalculated:U,feeAmount:U,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let p=f?Mt.findTickArrayAddress({programId:l,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:i,findInfo:{type:c?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(k=>k.toString()!==n[0].address.toString()):[],g=ae.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:y,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[m].value.startTickIndex===g,firstValidTickArrayStartIndex:n[m].value.startTickIndex},P=y,w=b,h=n[m],B=et.isFeeOnInput(t.feeOn,c),A=gt.newValue({poolInfo:t,amountSpecified:r,zeroForOne:c,feeRate:o.tradeFeeRate,blockTimestamp:s});for(;!A.amountSpecifiedRemaining.isZero()&&!A.sqrtPriceX64.eq(a);){let k=(()=>{let S=ae.nextInitalizedTick({data:h.value,tickSpacing:A.tickSpacing,zeroForOne:c,currentTickIndex:A.tick});if(S!==void 0)return S;if(P){let x=n[++m];return x===void 0?void 0:(w=x.value.startTickIndex,h=x,ae.firstinitializedTick({data:x.value,zeroForOne:c}))}else return P=!0,ae.firstinitializedTick({data:h.value,zeroForOne:c})})();if(k===void 0)return{allTrade:!1,amountSpecifiedRemaining:A.amountSpecifiedRemaining,amountCalculated:A.amountCalculated,feeAmount:A.lpFee.add(A.fundFee).add(A.protocolFee),sqrtPriceX64:A.sqrtPriceX64,liquidity:A.liquidity,tickCurrent:A.tick,accounts:n.slice(0,m).map(S=>S.address)};let T=gt.getTargetPriceBasedOnNextTick({data:A,tickNext:k.tick,zeroForOne:c,sqrtPriceLimitX64:a}),K=A.liquidity;do{gt.updateVolatilityAccumulator({state:A});let S=gt.getTotalFeeRate({data:A}),{isSkipped:x,boundedPrice:_}=gt.getSpacingBoundedPrice({data:A,targetPrice:T,zeroForOne:c}),F=!A.sqrtPriceX64.eq(_),O;F?(O=Nn.computeSwap(A.sqrtPriceX64,_,A.liquidity,A.amountSpecifiedRemaining,S,u,c,B),gt.applySwapAmounts({state:A,amountIn:O.amountIn,amountOut:O.amountOut,feeAmount:O.feeAmount,isBaseInput:u,isFeeOnInput:B,protocolFeeRate:new dn(o.protocolFeeRate),fundFeeRate:new dn(o.fundFeeRate)})):O=Nn.newSwapComputationResult({sqrtPriceNextX64:_});let q=Q.limitOrderUnfilledAmount({tick:k});if(A.sqrtPriceNextX64.eq(O.sqrtPriceNextX64)){let W=Q.matchLimitOrder({tick:k,swapAmount:A.amountSpecifiedRemaining,swapDirectionZeroForOne:c,isBaseInput:u,feeRate:S,isFeeOnInput:B});if(W.amountIn.gt(U)&&gt.applySwapAmounts({state:A,amountIn:W.amountIn,amountOut:W.amountOut,feeAmount:W.ammFeeAmount,isBaseInput:u,isFeeOnInput:B,protocolFeeRate:new dn(o.protocolFeeRate),fundFeeRate:new dn(o.fundFeeRate)}),Q.hasLiquidity({data:k})&&!Q.hasLimitOrders({data:k})){let X=c?k.liquidityNet.neg():k.liquidityNet;K=Re.addDelta(A.liquidity,X)}A.tick=c&&!Q.hasLimitOrders({data:k})||!c&&Q.hasLimitOrders({data:k})?A.tickNext-1:A.tickNext}else A.sqrtPriceX64.eq(O.sqrtPriceNextX64)||(A.tick=Q.getTickAtSqrtPrice(O.sqrtPriceNextX64));if(A.sqrtPriceX64=O.sqrtPriceNextX64,gt.updateDynamicFeeIndex({state:A,zeroForOne:c,isSkippedTickSpacing:x}),A.amountSpecifiedRemaining.isZero()||A.sqrtPriceX64.eq(T)){let W=Q.limitOrderUnfilledAmount({tick:k});if(!A.amountSpecifiedRemaining.isZero()&&!W.eq(q)&&!W.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);A.liquidity=K}return{allTrade:!0,amountSpecifiedRemaining:U,amountCalculated:A.amountCalculated,feeAmount:A.lpFee.add(A.fundFee).add(A.protocolFee),sqrtPriceX64:A.sqrtPriceX64,liquidity:A.liquidity,tickCurrent:A.tick,accounts:[...p,...n.slice(0,m+1+(f?1:0)).map(k=>k.address)]}}var Mn=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},mn=class{static getDynamicFeeInfo({poolInfo:e}){if(!(e.dynamicFeeInfo.filterPeriod===0&&e.dynamicFeeInfo.decayPeriod===0&&e.dynamicFeeInfo.reductionFactor===0&&e.dynamicFeeInfo.dynamicFeeControl===0&&e.dynamicFeeInfo.maxVolatilityAccumulator===0&&e.dynamicFeeInfo.tickSpacingIndexReference===0&&e.dynamicFeeInfo.volatilityReference===0&&e.dynamicFeeInfo.volatilityAccumulator===0&&e.dynamicFeeInfo.lastUpdateTimestamp.isZero()))return e.dynamicFeeInfo}static updateReference({dynamicFeeInfo:e,tickSpacingIndex:t,currentTimestamp:n}){let o=n-e.lastUpdateTimestamp.toNumber();o<e.filterPeriod||(o<e.decayPeriod?(e.tickSpacingIndexReference=t,e.volatilityReference=Math.floor(e.volatilityAccumulator*e.reductionFactor/Sr),e.lastUpdateTimestamp=new qe(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new qe(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*Cn;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},et=class{static isFeeOnInput(e,t){switch(e){case 0:return!0;case 1:return t;case 2:return!t;default:return!0}}static isFeeOnTokenA(e,t){return e.feeOn===0?t:e.feeOn===1}static isOverflowDefaultTickarrayBitmap({tickSpacing:e,tickIndexs:t}){let{maxTickBoundary:n,minTickBoundary:o}=this.tickArrayStartIndexRange({tickSpacing:e});for(let i of t){let r=ae.getTickArrayStartIndex(i,e);if(r>=n||r<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=Mt.maxTickInTickarrayBitmap(e),n=-t;return t>lt&&(t=ae.getTickArrayStartIndex(lt,e)+ae.tickCount(e)),n<ct&&(n=ae.getTickArrayStartIndex(ct,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let r=[];for(let s=0;s<i.length;s++){let f=i[s],m=(u=(a=t.rewardDefaultInfos[s])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(f.mint))==null?void 0:c.owner;if(m===void 0)throw Error("get new reward mint info error");let p=E(V({},f),{perSecond:Ur(f.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new tt(m)});if(p.mint.equals(tt.default)||p.totalEmissioned.eq(wt))continue;if(n<=p.openTime.toNumber()||o.eq(U)){r.push(p);continue}let g=new qe(Math.min(p.endTime.toNumber(),n)),y=g.sub(p.lastUpdateTime);if(y.isZero()){r.push(p);continue}let b=we(y,p.emissionsPerSecondX64,le),P=Se(y,p.emissionsPerSecondX64,o),w,h=p.totalEmissioned.add(b);if(h.lte(wt))w=h;else{let A=wt.sub(p.totalEmissioned);w=wt,P=Se(A,le,o)}let B=p.growthGlobalX64.add(P);r.push(E(V({},p),{growthGlobalX64:B,totalEmissioned:w,lastUpdateTime:g}))}return r}},Qe=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r,a){let c=o.toBase58()===e.mintA.address,u=ae.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:s,amountCalculated:f,feeAmount:m,sqrtPriceX64:p,accounts:g}=Pi({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:y[1].address,value:y[1]})).filter(y=>c?y.value.startTickIndex<=u:y.value.startTickIndex>=u).sort((y,b)=>c?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:U,zeroForOne:c,isBaseInput:!0,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:s,expectedAmountOut:f,remainingAccounts:g,executionPrice:p,feeAmount:m}}static getInputAmountAndRemainAccounts(e,t,n,o,i,r,a){let c=o.toBase58()===e.mintB.address,u=ae.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:s,amountCalculated:f,feeAmount:m,sqrtPriceX64:p,accounts:g}=Pi({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:new tt(y[0]),value:y[1]})).filter(y=>c?y.value.startTickIndex<=u:y.value.startTickIndex>=u).sort((y,b)=>c?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:U,zeroForOne:c,isBaseInput:!1,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:s,expectedAmountIn:f,remainingAccounts:g,executionPrice:p,feeAmount:m}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await pt(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=ci.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=[...Mt.findTickArrayStartIndex({tickSpacing:c.tickSpacing,poolBitmap:c.tickArrayBitmap,tickArrayBitmap:c.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:c.tickCurrent}}),...Mt.findTickArrayStartIndex({tickSpacing:c.tickSpacing,poolBitmap:c.tickArrayBitmap,tickArrayBitmap:c.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:c.tickCurrent}})];for(let s of u){let{publicKey:f}=Be(c.programId,c.id,s);o[f.toString()]===void 0&&(i.push({pubkey:f}),o[f.toString()]=c.id)}}let r=await pt(e,i,{batchRequest:n}),a={};for(let c of r){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let s=Ln.decode(c.accountInfo.data);a[u.toString()][s.startTickIndex]=E(V({},s),{address:c.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountIn:r,slippage:a,blockTimestamp:c,priceLimit:u=new ne(0)}){var O;let s,f=o.toBase58()===e.mintA.address,[m,p]=f?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];u.equals(new ne(0))?s=f?Ye.add(new qe(1)):He.sub(new qe(1)):s=Q.priceToSqrtPriceX64(u,e.mintA.decimals,e.mintB.decimals);let g=rt(r,m,i,!1),{allTrade:y,expectedAmountOut:b,remainingAccounts:P,executionPrice:w,feeAmount:h}=Qe.getOutputAmountAndRemainAccounts(e,t,n,o,g.amount.sub((O=g.fee)!=null?O:U),c,s),B=rt(b,p,i,!1),A=Q.sqrtPriceX64ToPrice(w,e.mintA.decimals,e.mintB.decimals),k=f?A:new ne(1).div(A),T=b.mul(new qe(Math.floor((1-a)*1e10))).div(new qe(1e10)),K=rt(T,p,i,!1),S=f?e.currentPrice:new ne(1).div(e.currentPrice),x=new ne(k).sub(S).abs(),_=S,F=new yt(new ne(x).mul(10**15).toFixed(0),new ne(_).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:g,amountOut:B,minAmountOut:K,expirationTime:Kt(g.expirationTime,B.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:F,fee:h,remainingAccounts:P,executionPriceX64:w}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:i,slippage:r,epochInfo:a,blockTimestamp:c,catchLiquidityInsufficient:u=!1}){let s=i.address===e.mintB.address,[f,m]=s?[e.mintA,e.mintB]:[e.mintB,e.mintA],[p,g]=[new Ce(E(V({},f),{mint:f.address,isToken2022:f.programId===zr.toBase58()})),new Ce(E(V({},m),{mint:m.address,isToken2022:m.programId===zr.toBase58()}))],{allTrade:y,realAmountIn:b,amountOut:P,minAmountOut:w,expirationTime:h,currentPrice:B,executionPrice:A,priceImpact:k,fee:T,remainingAccounts:K,executionPriceX64:S}=Qe.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new tt(f.address),amountIn:o,slippage:r,epochInfo:a,catchLiquidityInsufficient:u,blockTimestamp:c}),x=E(V({},b),{amount:new fe(p,b.amount),fee:b.fee===void 0?void 0:new fe(p,b.fee)}),_=E(V({},P),{amount:new fe(g,P.amount),fee:P.fee===void 0?void 0:new fe(g,P.fee)}),F=E(V({},w),{amount:new fe(g,w.amount),fee:w.fee===void 0?void 0:new fe(g,w.fee)}),O=new je({baseToken:p,denominator:new qe(10).pow(new qe(20+p.decimals)),quoteToken:g,numerator:B.mul(new ne(10**(20+g.decimals))).toFixed(0)}),q=new je({baseToken:p,denominator:new qe(10).pow(new qe(20+p.decimals)),quoteToken:g,numerator:A.mul(new ne(10**(20+g.decimals))).toFixed(0)}),W=new fe(p,T);return{allTrade:y,realAmountIn:x,amountOut:_,minAmountOut:F,expirationTime:h,currentPrice:O,executionPrice:q,priceImpact:k,fee:W,remainingAccounts:K,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountOut:r,slippage:a,priceLimit:c=new ne(0),blockTimestamp:u}){var O;let s=o.toBase58()===e.mintA.address,f={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},m;c.equals(new ne(0))?m=s?He.sub(new qe(1)):Ye.add(new qe(1)):m=Q.priceToSqrtPriceX64(c,e.mintA.decimals,e.mintB.decimals);let p=rt(r,f[o.toString()],i,!0),{allTrade:g,expectedAmountIn:y,remainingAccounts:b,executionPrice:P,feeAmount:w}=Qe.getInputAmountAndRemainAccounts(e,t,n,o,p.amount.sub((O=p.fee)!=null?O:U),u,m),h=s?e.mintB.address:e.mintA.address,B=rt(y,f[h],i,!1),A=Q.sqrtPriceX64ToPrice(P,e.mintA.decimals,e.mintB.decimals),k=s?A:new ne(1).div(A),T=y.mul(new qe(Math.floor((1+a)*1e10))).div(new qe(1e10)),K=rt(T,f[h],i,!0),S=s?e.currentPrice:new ne(1).div(e.currentPrice),x=new ne(k).sub(S).abs(),_=S,F=new yt(new ne(x).mul(10**15).toFixed(0),new ne(_).mul(10**15).toFixed(0));return{allTrade:g,amountIn:B,maxAmountIn:K,realAmountOut:p,expirationTime:Kt(B.expirationTime,p.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:F,fee:w,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var g,y,b;let i=e[t],r=Q.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=Q.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),c=Math.max(r,i.priceMin),s=Math.min(a,i.priceMax)-c,f=a-r,m=i.priceMax-i.priceMin,p;return s<=0?p=0:f===s?p=m/s:m===s?p=s/f:p=s/m*(s/f),{feeApr:i.feeApr*p,rewardsApr:[((g=i.rewardApr[0])!=null?g:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,s=e[n],f=o[it(e.mintA.address).toString()],m=o[it(e.mintB.address).toString()],p=e.mintA.decimals,g=e.mintB.decimals;if(!s||!f||!m)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=Q.priceToSqrtPriceX64(new ne(e.price),e.mintA.decimals,e.mintB.decimals),b=Q.getSqrtPriceAtTick(r),P=Q.getSqrtPriceAtTick(a),{amountSlippageA:w,amountSlippageB:h}=Re.getAmountsFromLiquidityWithSlippage(y,b,P,t,!1,!1,0),{amountSlippageA:B,amountSlippageB:A}=Re.getAmountsFromLiquidityWithSlippage(y,b,P,i,!1,!1,0),k=new ne(w.toString()).div(new ne(10).pow(p)).mul(f.value).add(new ne(h.toString()).div(new ne(10).pow(g)).mul(m.value)),T=new ne(B.toString()).div(new ne(10).pow(p)).mul(f.value).add(new ne(A.toString()).div(new ne(10).pow(g)).mul(m.value)),K=new ne(1).div(k.add(T)),x=new ne(s.volumeFee).mul(365).div(u).mul(K).mul(100).toNumber(),_=3600*24*365,F=e.rewardDefaultInfos.map(O=>{var X,G;let q=O.mint.decimals,W=o[O.mint.address];return c<((X=O.startTime)!=null?X:0)||c>((G=O.endTime)!=null?G:0)||!O.perSecond||!W||q===void 0?0:new ne(W.value).mul(new ne(O.perSecond).mul(_)).div(new ne(10).pow(q)).mul(K).mul(100).toNumber()});return{feeApr:x,rewardsApr:F,apr:x+F.reduce((O,q)=>O+q,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var P,w;let s=Q.priceToSqrtPriceX64(new ne(e.price),e.mintA.decimals,e.mintB.decimals),f=Q.getSqrtPriceAtTick(n),m=Q.getSqrtPriceAtTick(o),p=rt(i,(P=e[t?"mintA":"mintB"].extensions)==null?void 0:P.feeConfig,c,!u),g=new qe(new ne(p.amount.sub((w=p.fee)!=null?w:U).toString()).toFixed(0)),y;if(s.lte(f))y=t?Re.getLiquidityFromAmountA(f,m,g):new qe(0);else if(s.lte(m)){let h=Re.getLiquidityFromAmountA(s,m,g),B=Re.getLiquidityFromAmountB(f,s,g);y=t?h:B}else y=t?new qe(0):Re.getLiquidityFromAmountB(f,m,g);let b=await Qe.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,P,w,h;let c=Q.getSqrtPriceAtTick(n),u=Q.getSqrtPriceAtTick(o),s=a?1+r:1-r,f=Re.getAmountsForLiquidity(Q.priceToSqrtPriceX64(new ne(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[m,p]=[rt(f.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),rt(f.amountB,(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)],[g,y]=[rt(f.amountA.muln(s),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),rt(f.amountB.muln(s),(h=t.mintB.extensions)==null?void 0:h.feeConfig,e,!0)];return{liquidity:i,amountA:m,amountB:p,amountSlippageA:g,amountSlippageB:y,expirationTime:Kt(m.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(u=>!n[u.id]).map(u=>new tt(u.id));(await st(e,o)).forEach((u,s)=>{!u||(n[o[s].toBase58()]=un.decode(u.data))});let r=t.map(u=>xe(new tt(u.programId),new tt(u.id)).publicKey),a=await Qe.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1}),c={};return t.reduce((u,s)=>E(V({},u),{[s.id]:E(V({accInfo:n[s.id]},n[s.id]),{id:new tt(s.id),version:6,programId:new tt(s.programId),mintA:s.mintA,mintB:s.mintB,ammConfig:E(V({},s.config),{id:new tt(s.config.id),fundOwner:""}),currentPrice:new ne(s.price),exBitmapAccount:xe(new tt(s.programId),new tt(s.id)).publicKey,exBitmapInfo:a[xe(new tt(s.programId),new tt(s.id)).publicKey.toBase58()],startTime:n[s.id].startTime.toNumber(),rewardInfos:n[s.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]}static async fetchTickArrayInfo({connection:e,programId:t,poolId:n,tick:o,tickSpacing:i}){let r=ae.getTickArrayStartIndex(o,i),a=Be(t,n,r).publicKey,c=await e.getAccountInfo(a);if(!c)throw new Error(`tick array ${a.toBase58()} not found`);return Ln.decode(c.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(i=>{let r=ae.getTickArrayStartIndex(i.tick,i.tickSpacing);return Be(i.programId,i.poolId,r).publicKey});return(await st(e,n)).map(i=>i&&Ln.decode(i.data))}};import Ob from"bn.js";function Ue(l){let e=`global:${l}`;return Buffer.from(iu.digest(e)).slice(0,8)}Or.span;var Xr=te("Raydium_Clmm"),Ge={createPool:Ue("create_pool"),createCustomizablePool:Ue("create_customizable_pool"),createPermissionedPool:Ue("create_permissioned_pool"),openPositionV2:Ue("open_position_v2"),openPositionWithToken22Nft:Ue("open_position_with_token22_nft"),closePosition:Ue("close_position"),increaseLiquidityV2:Ue("increase_liquidity_v2"),decreaseLiquidityV2:Ue("decrease_liquidity_v2"),initializeReward:Ue("initialize_reward"),setRewardParams:Ue("set_reward_params"),updateRewardInfos:Ue("update_reward_infos"),collectRemainingRewards:Ue("collect_remaining_rewards"),swapV2:Ue("swap_v2"),openLimitOrder:Ue("open_limit_order"),increaseLimitOrder:Ue("increase_limit_order"),decreaseLimitOrder:Ue("decrease_limit_order"),settleLimitOrder:Ue("settle_limit_order"),closeLimitOrder:Ue("close_limit_order")},Yr=[188,37,179,131,82,150,84,73],Hr=[16,72,250,198,14,162,212,19],dt=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g){let y=L([z("sqrtPriceX64"),d("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},...(g!=null?g:[]).map(h=>({pubkey:h,isSigner:!1,isWritable:!1}))],P=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,startTime:U},P);let w=Buffer.from([...Ge.createPool,...P]);return new Ke({keys:b,programId:e,data:w})}static createCustomizablePoolInstruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b){let P=L([z("sqrtPriceX64"),M("collectFeeOn"),Ie("enableDynamicFee")]),w=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},...y.map(A=>({pubkey:A,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],h=Buffer.alloc(P.span);P.encode({sqrtPriceX64:p,collectFeeOn:g,enableDynamicFee:b!==void 0},h);let B=Buffer.from([...Ge.createCustomizablePool,...h]);return new Ke({keys:w,programId:e,data:B})}static createPermissionedPoolInstruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h){let B=L([z("sqrtPriceX64"),M("collectFeeOn"),Ie("enableDynamicFee"),Oe("seedIndex")]),A=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},...w.map(K=>({pubkey:K,isSigner:!1,isWritable:!1})),...h?[{pubkey:h,isSigner:!1,isWritable:!1}]:[]],k=Buffer.alloc(B.span);B.encode({sqrtPriceX64:y,collectFeeOn:b,enableDynamicFee:h!==void 0,seedIndex:P},k);let T=Buffer.from([...Ge.createPermissionedPool,...k]);return new Ke({keys:A,programId:e,data:T})}static initializeRewardInstruction(e,t,n,o,i,r,a,c,u,s,f,m){let p=L([d("openTime"),d("endTime"),z("emissionsPerSecondX64")]),g=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:s,endTime:f,emissionsPerSecondX64:m},y);let b=Buffer.from([...Ge.initializeReward,...y]);return new Ke({keys:g,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Ge.updateRewardInfos]);return new Ke({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,i,r,a,c,u,s,f,m){let p=L([M("rewardIndex"),z("emissionsPerSecondX64"),d("openTime"),d("endTime")]),g=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:m,openTime:s,endTime:f},y);let b=Buffer.from([...Ge.setRewardParams,...y]);return new Ke({keys:g,programId:e,data:b})}static closePositionInstruction(e,t,n,o,i,r,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:r?Le:de,isSigner:!1,isWritable:!1}];a&&c.push({pubkey:a,isSigner:!1,isWritable:!0});let u=Buffer.from([...Ge.closePosition]);return new Ke({keys:c,programId:e,data:u})}static openPositionV2Instruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h,B,A,k,T,K,S,x,_){let F=L([Ne("tickLower"),Ne("tickUpper"),Ne("tickArrayLowerStart"),Ne("tickArrayUpperStart"),z("liquidity"),d("amountMaxA"),d("amountMaxB"),Ie("withMetadata"),M("optionBaseFlag"),Ie("baseFlag")]),O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Ai,isSigner:!1,isWritable:!1},{pubkey:Rt,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},..._?[{pubkey:_,isSigner:!1,isWritable:!0}]:[]],q=Buffer.alloc(F.span);F.encode({tickLower:w,tickUpper:h,tickArrayLowerStart:B,tickArrayUpperStart:A,liquidity:k,amountMaxA:T,amountMaxB:K,withMetadata:S,optionBaseFlag:x!==null?1:0,baseFlag:x!=null?x:!1},q);let W=Buffer.from([...Ge.openPositionV2,...q]);return new Ke({keys:O,programId:e,data:W})}static increaseLiquidityV2Instruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h){let B=L([z("liquidity"),d("amountMaxA"),d("amountMaxB"),M("optionBaseFlag"),Ie("baseFlag")]),A=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],k=Buffer.alloc(B.span);B.encode({liquidity:y,amountMaxA:b,amountMaxB:P,optionBaseFlag:w!==null?1:0,baseFlag:w!=null?w:!1},k);let T=Buffer.from([...Ge.increaseLiquidityV2,...k]);return new Ke({keys:A,programId:e,data:T})}static decreaseLiquidityV2Instruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h){let B=L([z("liquidity"),d("amountMinA"),d("amountMinB")]),A=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:Bt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=Buffer.alloc(B.span);B.encode({liquidity:b,amountMinA:P,amountMinB:w},k);let T=Buffer.from([...Ge.decreaseLiquidityV2,...k]);return new Ke({keys:A,programId:e,data:T})}static swapV2Instruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P){let w=L([d("amount"),d("otherAmountThreshold"),z("sqrtPriceLimitX64"),Ie("isBaseInput")]),h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:Bt,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(k=>({pubkey:k,isSigner:!1,isWritable:!0}))],B=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:g,sqrtPriceLimitX64:y,isBaseInput:b},B);let A=Buffer.from([...Ge.swapV2,...B]);return new Ke({keys:h,programId:e,data:A})}static collectRemainingRewardsInstruction(e,t,n,o,i,r,a){let c=L([M("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:Bt,isSigner:!1,isWritable:!1}],s=Buffer.alloc(c.span);c.encode({rewardIndex:a},s);let f=Buffer.from([...Ge.collectRemainingRewards,...s]);return new Ke({keys:u,programId:e,data:f})}static openPositionWithToken22NftInstruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h,B,A,k,T,K,S,x){let _=L([Ne("tickLower"),Ne("tickUpper"),Ne("tickArrayLowerStart"),Ne("tickArrayUpperStart"),z("liquidity"),d("amountMaxA"),d("amountMaxB"),Ie("withMetadata"),M("optionBaseFlag"),Ie("baseFlag")]),F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Ai,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=Buffer.alloc(_.span);_.encode({tickLower:P,tickUpper:w,tickArrayLowerStart:h,tickArrayUpperStart:B,liquidity:A,amountMaxA:k,amountMaxB:T,withMetadata:K,optionBaseFlag:S!==null?1:0,baseFlag:S!=null?S:!1},O);let q=Buffer.from([...Ge.openPositionWithToken22Nft,...O]);return new Ke({keys:F,programId:e,data:q})}static openLimitOrderInstruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w){let h=L([M("nonceIndex"),Ie("zeroForOne"),Ne("tickIndex"),d("amount")]),B=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],A=Buffer.alloc(h.span);h.encode({nonceIndex:g,zeroForOne:y,tickIndex:b,amount:P},A);let k=Buffer.from([...Ge.openLimitOrder,...A]);return new Ke({keys:B,programId:e,data:k})}static increaseLimitOrderInstruction(e,t,n,o,i,r,a,c,u,s){let f=L([d("amount")]),m=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1}],p=Buffer.alloc(f.span);f.encode({amount:s},p);let g=Buffer.from([...Ge.increaseLimitOrder,...p]);return new Ke({keys:m,programId:e,data:g})}static decreaseLimitOrderInstruction(e,t,n,o,i,r,a,c,u,s,f,m,p,g){let y=L([d("amount"),d("amountMin")]),b=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[]],P=Buffer.alloc(y.span);y.encode({amount:m,amountMin:p},P);let w=Buffer.from([...Ge.decreaseLimitOrder,...P]);return new Ke({keys:b,programId:e,data:w})}static settleLimitOrderInstruction(e,t,n,o,i,r,a,c,u){let s=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1}],f=Buffer.from([...Ge.settleLimitOrder]);return new Ke({keys:s,programId:e,data:f})}static closeLimitOrderInstruction(e,t,n,o){let i=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],r=Buffer.from([...Ge.closeLimitOrder]);return new Ke({keys:i,programId:e,data:r})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,s]=[new v(o.address),new v(i.address)],[f,m]=[new v(o.programId||de),new v(i.programId||de)],{publicKey:p}=vr(t,r,u,s),{publicKey:g}=pi(t,p),{publicKey:y}=cn(t,p,u),{publicKey:b}=cn(t,p,s),P=xe(t,p).publicKey,w=[this.createPoolInstruction(t,p,n,r,g,u,y,f,s,b,m,P,a,c)];return{signers:[],instructions:w,instructionTypes:[j.CreateAccount,j.ClmmCreatePool],address:{poolId:p,observationId:g,exBitmapAccount:P,mintA:u,mintB:s,mintAProgram:f,mintBProgram:m,mintAVault:y,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c,payer:u,seedIndex:s}=e,[f,m]=[new v(o.address),new v(i.address)],[p,g]=[new v(o.programId||de),new v(i.programId||de)],{publicKey:y}=Vr(t,r,f,m,s),{publicKey:b}=_r(t,u),{publicKey:P}=pi(t,y),{publicKey:w}=cn(t,y,f),{publicKey:h}=cn(t,y,m),B=xe(t,y).publicKey,A=[this.createPoolInstruction(t,y,n,r,P,f,w,p,m,h,g,B,a,c)];return{signers:[],instructions:A,instructionTypes:[j.CreateAccount,j.ClmmCreatePool],address:{poolId:y,observationId:P,exBitmapAccount:B,mintA:f,mintB:m,mintAProgram:p,mintBProgram:g,mintAVault:w,mintBVault:h,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,base:u,withMetadata:s,getEphemeralSigners:f,nft2022:m}){let p=[],[g,y]=[new v(e.programId),new v(e.id)],b;if(f)b=new v((await f(1))[0]);else{let x=bo.generate();p.push(x),b=x.publicKey}let P=ae.getTickArrayStartIndex(o,e.config.tickSpacing),w=ae.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:h}=Be(g,y,P),{publicKey:B}=Be(g,y,w),{publicKey:A}=m?ce(n.wallet,b,Le):ce(n.wallet,b,de),{publicKey:k}=Gt(b),{publicKey:T}=mt(g,b),{publicKey:K}=St(g,y,o,i),S=m?this.openPositionWithToken22NftInstruction(g,n.feePayer,y,n.wallet,b,A,K,h,B,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,r,a,c,s==="create",u&&u==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0):this.openPositionV2Instruction(g,n.feePayer,y,n.wallet,b,A,k,K,h,B,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,r,a,c,s==="create",null,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0);return{signers:p,instructions:[S],instructionTypes:[j.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:h,tickArrayUpper:B,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:K}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,liquidity:u,withMetadata:s,getEphemeralSigners:f,nft2022:m}){let p=[],[g,y]=[new v(e.programId),new v(e.id)],b;if(f)b=new v((await f(1))[0]);else{let x=bo.generate();p.push(x),b=x.publicKey}let P=ae.getTickArrayStartIndex(o,e.config.tickSpacing),w=ae.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:h}=Be(g,y,P),{publicKey:B}=Be(g,y,w),{publicKey:A}=m?ce(n.wallet,b,Le):ce(n.wallet,b,de),{publicKey:k}=Gt(b),{publicKey:T}=mt(g,b),{publicKey:K}=St(g,y,o,i),S=m?this.openPositionWithToken22NftInstruction(g,n.feePayer,y,n.wallet,b,A,K,h,B,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,u,!r||r==="MintA"?a:c,!r||r==="MintA"?c:a,s==="create",r&&r==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0):this.openPositionV2Instruction(g,n.feePayer,y,n.wallet,b,A,k,K,h,B,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,U,r==="MintA"?a:c,r==="MintA"?c:a,s==="create",r==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:h,tickArrayUpper:B,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:K},instructions:[S],signers:p,instructionTypes:[j.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,base:u,withMetadata:s,getEphemeralSigners:f,nft2022:m}){let p,g=[];if(f)p=new v((await f(1))[0]);else{let x=bo.generate();g.push(x),p=x.publicKey}let[y,b]=[new v(e.programId),new v(e.id)],P=ae.getTickArrayStartIndex(o,e.config.tickSpacing),w=ae.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:h}=Be(y,b,P),{publicKey:B}=Be(y,b,w),{publicKey:A}=m?ce(n.wallet,p,Le):ce(n.wallet,p,de),{publicKey:k}=Gt(p),{publicKey:T}=mt(y,p),{publicKey:K}=St(y,b,o,i),S=m?this.openPositionWithToken22NftInstruction(y,n.wallet,b,n.wallet,p,A,K,h,B,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),o,i,P,w,r,a,c,s==="create",u&&u==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(y,b).publicKey:void 0):this.openPositionV2Instruction(y,n.wallet,b,n.wallet,p,A,k,K,h,B,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),o,i,P,w,r,a,c,s==="create",null,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(y,b).publicKey:void 0);return{address:{nftMint:p,tickArrayLower:h,tickArrayUpper:B,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:K},instructions:[S],signers:g,instructionTypes:[j.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new v(e.programId),a=i?ce(n.wallet,o.nftMint,Le).publicKey:ce(n.wallet,o.nftMint,de).publicKey,{publicKey:c}=mt(r,o.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,c,!!i,new v(e.id))),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[j.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,s]=[new v(e.programId),new v(e.id)],f=ae.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=ae.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Be(u,s,f),{publicKey:g}=Be(u,s,m),{publicKey:y}=c?ce(o.wallet,n.nftMint,Le):ce(o.wallet,n.nftMint,de),{publicKey:b}=mt(u,n.nftMint),{publicKey:P}=St(u,s,n.tickLower,n.tickUpper),w=this.increaseLiquidityV2Instruction(u,o.wallet,y,b,s,P,p,g,o.tokenAccountA,o.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,r,a,null,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[f,m]})?xe(u,s).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:g,positionNftAccount:y,personalPosition:b,protocolPosition:P},signers:[],instructions:[w],instructionTypes:[j.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:c}){let[u,s]=[new v(e.programId),new v(e.id)],f=ae.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=ae.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Be(u,s,f),{publicKey:g}=Be(u,s,m),{publicKey:y}=c?ce(o.wallet,n.nftMint,Le):ce(o.wallet,n.nftMint,de),{publicKey:b}=mt(u,n.nftMint),{publicKey:P}=St(u,s,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:g,positionNftAccount:y,personalPosition:b,protocolPosition:P},instructions:[this.increaseLiquidityV2Instruction(u,o.wallet,y,b,s,P,p,g,o.tokenAccountA,o.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),U,i==="MintA"?r:a,i==="MintA"?a:r,i==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[f,m]})?xe(u,s).publicKey:void 0)],signers:[],instructionTypes:[j.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[s,f]=[new v(e.programId),new v(e.id)],m=ae.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),p=ae.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:g}=Be(s,f,m),{publicKey:y}=Be(s,f,p),{publicKey:b}=u?ce(o.wallet,n.nftMint,Le):ce(o.wallet,n.nftMint,c),{publicKey:P}=mt(s,n.nftMint),{publicKey:w}=St(s,f,n.tickLower,n.tickUpper),h=new Map;for(let T=0;T<t.rewardInfos.length;T++)h.set(t.rewardInfos[T].mint.address,o.rewardAccounts[T]);let B=[];for(let T=0;T<t.rewardInfos.length;T++){let K=t.rewardInfos[T].mint.address,S=h.get(K);S&&B.push({poolRewardVault:new v(t.rewardInfos[T].vault),ownerRewardVault:S,rewardMint:new v(K)})}let A=[],k=this.decreaseLiquidityV2Instruction(s,o.wallet,b,P,f,w,g,y,o.tokenAccountA,o.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),B,i,r,a,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[m,p]})?xe(s,f).publicKey:void 0);return A.push(k),{address:{tickArrayLower:g,tickArrayUpper:y,positionNftAccount:b,personalPosition:P,protocolPosition:w},signers:[],instructions:A,instructionTypes:[j.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[s,f]=[new v(e.programId),new v(e.id)],[m,p]=[new v(t.vault.A),new v(t.vault.B)],[g,y]=[new v(e.mintA.address),new v(e.mintB.address)],b=e.mintA.address.toString()===i.toString(),P=[this.swapV2Instruction(s,o.wallet,f,new v(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?m:p,b?p:m,b?g:y,b?y:g,u,n,r,a,c,!0,xe(s,f).publicKey)];return{signers:[],instructions:P,instructionTypes:[j.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[s,f]=[new v(e.programId),new v(e.id)],[m,p]=[new v(t.vault.A),new v(t.vault.B)],[g,y]=[new v(e.mintA.address),new v(e.mintB.address)],b=e.mintB.address.toString()===i.toBase58(),P=[this.swapV2Instruction(s,o.wallet,f,new v(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?m:p,b?p:m,b?g:y,b?y:g,u,n,r,a,c,!1,xe(s,f).publicKey)];return{signers:[],instructions:P,instructionTypes:[j.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new v(e.programId),new v(e.id)],a=Er(i,r,o.mint).publicKey,c=po(i).publicKey,u=[this.initializeRewardInstruction(i,n.wallet,r,c,new v(e.config.id),n.tokenAccount,o.programId,o.mint,a,new go(o.openTime),new go(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[j.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new v(e.programId),new v(e.id)],a,c,u;for(let m=0;m<e.rewardDefaultInfos.length;m++)e.rewardDefaultInfos[m].mint.address===o.mint.toString()&&(a=m,c=new v(t.rewardInfos[m].vault),u=new v(t.rewardInfos[m].mint.address));(a===void 0||c===void 0)&&Xr.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let s=po(i).publicKey,f=[this.setRewardParamsInstruction(i,n.wallet,r,s,new v(e.config.id),n.tokenAccount,c,u,a,new go(o.openTime),new go(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:s},signers:[],instructions:f,instructionTypes:[j.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new v(e.programId),new v(e.id)],a,c;for(let s=0;s<e.rewardDefaultInfos.length;s++)e.rewardDefaultInfos[s].mint.address===o.toString()&&(a=s,c=new v(t.rewardInfos[s].vault));(a===void 0||c===void 0)&&Xr.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRemainingRewardsInstruction(i,n.wallet,r,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[j.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:c}){let u=[],s;if(c)s=new v((await c(1))[0]);else{let P=bo.generate();u.push(P),s=P.publicKey}let f=a?ce(i,r,Le).publicKey:ce(i,r,de).publicKey,{publicKey:m}=mt(n,r),p=yi(e,s).publicKey,g=ce(i,s,de).publicKey,y=Gt(s).publicKey,b=dt.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:f,positionId:m,lockPositionId:p,lockNftMint:s,lockNftAccount:g,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:ce(t,r,a?Le:de).publicKey,positionNftProgram:a?Le:de});return{address:{positionId:m,lockPositionId:p,lockNftAccount:g,lockNftMint:s,positionNftAccount:f,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[j.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:s,lockPositionId:f,lockNftMint:m,lockNftAccount:p,metadataAccount:g,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Rt,isSigner:!1,isWritable:!1},{pubkey:Ai,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1}],P=L([Ie("withMetadata")]),w=Buffer.alloc(P.span);P.encode({withMetadata:y},w);let h=Buffer.from([...Yr,...w]);return new Ke({keys:b,programId:e,data:h})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ce(o,i,de),{publicKey:a}=mt(n,i),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:fi(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1}];return new Ke({keys:c,programId:e,data:Buffer.from(Yr)})}static harvestLockPositionInstruction(e){let[t,n]=[new v(e.poolKeys.programId),new v(e.poolKeys.id)],o=ae.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=ae.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=Be(t,n,o),{publicKey:a}=Be(t,n,i),{publicKey:c}=ce(e.owner,e.ownerPosition.nftMint,de),{publicKey:u}=mt(t,e.ownerPosition.nftMint),{publicKey:s}=St(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),f=[];for(let g=0;g<e.poolKeys.rewardInfos.length;g++)f.push({poolRewardVault:new v(e.poolKeys.rewardInfos[g].vault),ownerRewardVault:e.ownerRewardAccounts[g],rewardMint:new v(e.poolKeys.rewardInfos[g].mint.address)});let m=[...f.map(g=>[{pubkey:g.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:g.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:g.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:fi(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:s,isSigner:!1,isWritable:!0},{pubkey:new v(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new v(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:Bt,isSigner:!1,isWritable:!1},{pubkey:new v(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new v(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...m];return new Ke({keys:p,programId:e.programId,data:Buffer.from(Hr)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:s,protocolPosition:f,vaultA:m,vaultB:p,tickArrayLower:g,tickArrayUpper:y,userVaultA:b,userVaultB:P,mintA:w,mintB:h,rewardAccounts:B,exTickArrayBitmap:A}){let k=[...A?[{pubkey:A,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()],T=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:P,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:Bt,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:h,isSigner:!1,isWritable:!1},...k];return new Ke({keys:T,programId:e,data:Buffer.from(Hr)})}};import{PublicKey as wi}from"@solana/web3.js";var au=L([M("instruction")]),su=L([M("instruction")]),uu=L([d("rewardState"),d("rewardOpenTime"),d("rewardEndTime"),d("rewardLastUpdateTime"),d("totalReward"),d("totalRewardEmissioned"),d("rewardClaimed"),d("rewardPerSecond"),z("accRewardPerShare"),I("rewardVault"),I("rewardMint"),I("rewardSender"),d("rewardType"),D(d(),15,"padding")]),cu=L([d("state"),d("nonce"),I("lpVault"),I("rewardVault"),I(),I(),d(),d(),d("totalReward"),z("perShareReward"),d("lastSlot"),d("perSlotReward")]),lu=L([d("state"),d("nonce"),I("lpVault"),I("rewardVaultA"),d("totalRewardA"),z("perShareRewardA"),d("perSlotRewardA"),M("option"),I("rewardVaultB"),J(7),d("totalRewardB"),z("perShareRewardB"),d("perSlotRewardB"),d("lastSlot"),I()]),mu=L([d(),d("state"),d("nonce"),d("validRewardTokenNum"),z("rewardMultiplier"),d("rewardPeriodMax"),d("rewardPeriodMin"),d("rewardPeriodExtend"),I("lpMint"),I("lpVault"),D(uu,5,"rewardInfos"),I("creator"),I(),D(d(),32,"padding")]),du=new Proxy(cu,{get(l,e,t){return e==="decode"?(...n)=>{let o=l.decode(...n);return E(V({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(l,e,t)}}),pu=new Proxy(lu,{get(l,e,t){return e==="decode"?(...n)=>{let o=l.decode(...n);return E(V({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(l,e,t)}}),Zr=new Proxy(mu,{get(l,e,t){return e==="decode"?(...n)=>{let o=l.decode(...n);return E(V({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return E(V({},i),{rewardType:((r=Object.entries(Fn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(l,e,t)}}),fu=L([d("isSet"),d("rewardPerSecond"),d("rewardOpenTime"),d("rewardEndTime"),d("rewardType")]),yu=L([M("instruction"),d("nonce"),D(fu,5,"rewardTimeInfo")]),bu=L([M("instruction"),d("rewardReopenTime"),d("rewardEndTime"),d("rewardPerSecond")]),gu=L([M("instruction"),d("isSet"),d("rewardPerSecond"),d("rewardOpenTime"),d("rewardEndTime"),d("rewardType")]),cP=L([d("state"),I("id"),I("owner"),d("deposited"),D(d(),1,"rewardDebts")]),jr=L([d("state"),I("id"),I("owner"),d("deposited"),D(z(),1,"rewardDebts"),d(""),d("voteLockedBalance"),D(d(),15)]),lP=L([d("state"),I("id"),I("owner"),d("deposited"),D(d(),2,"rewardDebts")]),Pu=L([d("state"),I("id"),I("owner"),d("deposited"),D(z(),2,"rewardDebts"),D(d(),17)]),Au=L([d(),d("state"),I("id"),I("owner"),d("deposited"),D(z(),5,"rewardDebts"),D(d(),16)]),wu=L([M("instruction"),d("amount")]),ku=L([I("mint"),I("grantAuthority"),d("baselineVoteWeightScaledFactor"),d("maxExtraLockupVoteWeightScaledFactor"),d("lockupSaturationSecs"),fr("digitShift"),D(M(),7,"reserved1"),D(d(),7,"reserved2")]),Tu=L([J(8),I("governanceProgramId"),I("realm"),I("realmGoverningTokenMint"),I("realmAuthority"),D(M(),32,"reserved1"),D(ku,4,"votingMints"),tn("timeOffset"),M("bump"),D(M(),7,"reserved2"),D(d(),11,"reserved3")]),hu=L([tn("startTime"),tn("endTime"),M("kind"),D(M(),15,"reserved")]),Iu=L([D(hu,1,"lockup"),d("amountDeposited_native"),d("amountInitiallyLockedNative"),Ie("isUsed"),Ie("allowClawback"),M("votingMintConfigIdx"),D(M(),29,"reserved")]),Bu=L([J(8),I("voterAuthority"),I("registrar"),D(Iu,32,"deposits"),M("voterBump"),M("voterWweightRecordBump"),D(M(),94,"reserved")]);import{NATIVE_MINT as AP}from"@solana/spl-token";var wP=te("Raydium_farm_config"),xu=new wi("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Su=new wi("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var kP=new wi("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Fn={"Standard SPL":0,"Option tokens":1},$r={[Pr.toString()]:3,[Ar.toString()]:4,[wr.toString()]:5,[ri.toString()]:6,[Nt.FARM_PROGRAM_ID_V3.toString()]:3,[Nt.FARM_PROGRAM_ID_V4.toString()]:4,[Nt.FARM_PROGRAM_ID_V5.toString()]:5,[Nt.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as iA,SystemProgram as rA,SYSVAR_CLOCK_PUBKEY as aA,SYSVAR_RENT_PUBKEY as sA,TransactionInstruction as uA}from"@solana/web3.js";import lA from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as dA,createAssociatedTokenAccountIdempotentInstruction as pA,TOKEN_PROGRAM_ID as fA}from"@solana/spl-token";import MP from"bn.js";import{PublicKey as Ku}from"@solana/web3.js";import Cu from"bn.js";function Ru(l){return typeof l=="object"&&l!==null&&![Ce,fe,Ku,ue,Cu,je,yt].some(e=>typeof e=="object"&&l instanceof e)}function Ct(l){return typeof l=="string"?Do(l):Array.isArray(l)?l.map(e=>Ct(e)):Ru(l)?Object.fromEntries(Object.entries(l).map(([e,t])=>[e,Ct(t)])):l}var YP=te("Raydium.farm.util");var BA=te("Raydium_farm_instruction"),xA={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])};import pw from"bn.js";import{PublicKey as mT}from"@solana/web3.js";import{AccountLayout as fT,MintLayout as yT,NATIVE_MINT as bT,TOKEN_PROGRAM_ID as PT}from"@solana/spl-token";import Pe from"bn.js";var Tt=1e4;function rt(l,e,t,n){if(e===void 0)return{amount:l,fee:void 0,expirationTime:void 0};let o=E(V({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,r=new Pe(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Tt){let c=new Pe(i.maximumFee.toString());return{amount:l.add(c),fee:c,expirationTime:a}}else{let c=zt(l.mul(new Pe(Tt)),new Pe(Tt-i.transferFeeBasisPoints)),u=new Pe(i.maximumFee.toString()),s=c.sub(l).gt(u)?l.add(u):c,f=zt(s.mul(new Pe(i.transferFeeBasisPoints)),new Pe(Tt)),m=f.gt(r)?r:f;return{amount:s,fee:m,expirationTime:a}}else{let c=zt(l.mul(new Pe(i.transferFeeBasisPoints)),new Pe(Tt)),u=c.gt(r)?r:c;return{amount:l,fee:u,expirationTime:a}}}function Kt(l,e){return l===void 0?e:e===void 0?l:Math.min(l,e)}function zt(l,e){let{div:t,mod:n}=l.divmod(e);return n.gt(new Pe(0))?t.add(new Pe(1)):t}function Xt(l,e){if(l.isZero())return new Pe(0);let t=l.div(e);return t.isZero()?new Pe(1):l.mod(e).gt(new Pe(0))?t.add(new Pe(1)):t}function vn(l,e,t){if(e===void 0)return{amount:l,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Pe(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=zt(l.mul(new Pe(o.transferFeeBasisPoints)),new Pe(Tt)),c=a.gt(i)?i:a;return{amount:l,fee:c,expirationTime:r}}function pn(l,e,t){if(e===void 0)return{amount:l,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Pe(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Tt){let a=new Pe(o.maximumFee.toString());return{amount:l.add(a),fee:a,expirationTime:r}}else{let a=zt(l.mul(new Pe(Tt)),new Pe(Tt-o.transferFeeBasisPoints)),c=new Pe(o.maximumFee.toString()),u=a.sub(l).gt(c)?l.add(c):a,s=zt(u.mul(new Pe(o.transferFeeBasisPoints)),new Pe(Tt)),f=s.gt(i)?i:s;return{amount:u,fee:f,expirationTime:r}}}import ea from"bn.js";var Vu=new ea(25),Eu=new ea(1e4);import{ASSOCIATED_TOKEN_PROGRAM_ID as _w,TOKEN_PROGRAM_ID as wo}from"@solana/spl-token";import{PublicKey as ht,SystemProgram as Ew,SYSVAR_RENT_PUBKEY as Dw,TransactionInstruction as ko}from"@solana/web3.js";import Po from"bn.js";var ki=L([M("instruction"),d("amountIn"),d("minAmountOut")]),Ti=L([M("instruction"),d("maxAmountIn"),d("amountOut")]),Nw=L([M("instruction"),M("nonce")]),Du=L([M("instruction"),M("nonce"),d("startTime")]),hi=L([d("status"),d("nonce"),d("maxOrder"),d("depth"),d("baseDecimal"),d("quoteDecimal"),d("state"),d("resetFlag"),d("minSize"),d("volMaxCutRatio"),d("amountWaveRatio"),d("baseLotSize"),d("quoteLotSize"),d("minPriceMultiplier"),d("maxPriceMultiplier"),d("systemDecimalValue"),d("minSeparateNumerator"),d("minSeparateDenominator"),d("tradeFeeNumerator"),d("tradeFeeDenominator"),d("pnlNumerator"),d("pnlDenominator"),d("swapFeeNumerator"),d("swapFeeDenominator"),d("baseNeedTakePnl"),d("quoteNeedTakePnl"),d("quoteTotalPnl"),d("baseTotalPnl"),d("poolOpenTime"),d("punishPcAmount"),d("punishCoinAmount"),d("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),d("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),d("swapQuote2BaseFee"),I("baseVault"),I("quoteVault"),I("baseMint"),I("quoteMint"),I("lpMint"),I("openOrders"),I("marketId"),I("marketProgramId"),I("targetOrders"),I("withdrawQueue"),I("lpVault"),I("owner"),d("lpReserve"),D(d(),3,"padding")]),Mw=L([d("accountType"),d("status"),d("nonce"),d("maxOrder"),d("depth"),d("baseDecimal"),d("quoteDecimal"),d("state"),d("resetFlag"),d("minSize"),d("volMaxCutRatio"),d("amountWaveRatio"),d("baseLotSize"),d("quoteLotSize"),d("minPriceMultiplier"),d("maxPriceMultiplier"),d("systemDecimalsValue"),d("abortTradeFactor"),d("priceTickMultiplier"),d("priceTick"),d("minSeparateNumerator"),d("minSeparateDenominator"),d("tradeFeeNumerator"),d("tradeFeeDenominator"),d("pnlNumerator"),d("pnlDenominator"),d("swapFeeNumerator"),d("swapFeeDenominator"),d("baseNeedTakePnl"),d("quoteNeedTakePnl"),d("quoteTotalPnl"),d("baseTotalPnl"),d("poolOpenTime"),d("punishPcAmount"),d("punishCoinAmount"),d("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),d("swapQuote2BaseFee"),d("swapBase2QuoteFee"),I("baseVault"),I("quoteVault"),I("baseMint"),I("quoteMint"),I("lpMint"),I("modelDataAccount"),I("openOrders"),I("marketId"),I("marketProgramId"),I("targetOrders"),I("owner"),D(d(),64,"padding")]),Wu=L([M("instruction"),d("baseAmountIn"),d("quoteAmountIn"),d("fixedSide"),d("otherAmountMin")]),qu=L([M("instruction"),d("lpAmount"),d("baseAmountMin"),d("quoteAmountMin")]);var Uu=L([d("fee")]);var Ao=te("Raydium_liquidity_instruction");function Gu({poolKeys:l,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=so},i){let r=Ct(l),a=Buffer.alloc(ki.span);ki.encode({instruction:9,amountIn:ge(t),minAmountOut:ge(n)},a);let c=[N({pubkey:wo,isWritable:!1}),N({pubkey:r.id}),N({pubkey:r.authority,isWritable:!1}),N({pubkey:r.openOrders})];return i===4&&c.push(N({pubkey:r.targetOrders})),c.push(N({pubkey:r.vault.A}),N({pubkey:r.vault.B})),i===5&&c.push(N({pubkey:o})),c.push(N({pubkey:r.marketProgramId,isWritable:!1}),N({pubkey:r.marketId}),N({pubkey:r.marketBids}),N({pubkey:r.marketAsks}),N({pubkey:r.marketEventQueue}),N({pubkey:r.marketBaseVault}),N({pubkey:r.marketQuoteVault}),N({pubkey:r.marketAuthority,isWritable:!1}),N({pubkey:e.tokenAccountIn}),N({pubkey:e.tokenAccountOut}),N({pubkey:e.owner,isWritable:!1,isSigner:!0})),new ko({programId:r.programId,keys:c,data:a})}function zu({poolKeys:l,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=so},i){let r=Ct(l),a=Buffer.alloc(Ti.span);Ti.encode({instruction:11,maxAmountIn:ge(t),amountOut:ge(n)},a);let c=[N({pubkey:wo,isWritable:!1}),N({pubkey:r.id}),N({pubkey:r.authority,isWritable:!1}),N({pubkey:r.openOrders}),N({pubkey:r.targetOrders}),N({pubkey:r.vault.A}),N({pubkey:r.vault.B})];return i===5&&c.push(N({pubkey:o})),c.push(N({pubkey:r.marketProgramId,isWritable:!1}),N({pubkey:r.marketId}),N({pubkey:r.marketBids}),N({pubkey:r.marketAsks}),N({pubkey:r.marketEventQueue}),N({pubkey:r.marketBaseVault}),N({pubkey:r.marketQuoteVault}),N({pubkey:r.marketAuthority,isWritable:!1}),N({pubkey:e.tokenAccountIn}),N({pubkey:e.tokenAccountOut}),N({pubkey:e.owner,isWritable:!1,isSigner:!0})),new ko({programId:r.programId,keys:c,data:a})}function Xu(l,e,t,n,o,i,r,a,c,u){let s=L([M("instructionId"),d("amountIn"),d("minAmountOut")]),f=Buffer.alloc(s.span);s.encode({instructionId:16,amountIn:c,minAmountOut:u},f);let m=[{pubkey:wo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new ko({programId:l,keys:m,data:f})}function Yu(l,e,t,n,o,i,r,a,c,u){let s=L([M("instructionId"),d("maxAmountIn"),d("amountOut")]),f=Buffer.alloc(s.span);s.encode({instructionId:17,maxAmountIn:c,amountOut:u},f);let m=[{pubkey:wo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new ko({programId:l,keys:m,data:f})}function Ii(l){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=l;if(t===4){if(r==="in")return Xu(new ht(e.programId),new ht(e.id),new ht(e.authority),new ht(e.vault.A),new ht(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Po(o.toString()),new Po(i.toString()));if(r==="out")return Yu(new ht(e.programId),new ht(e.id),new ht(e.authority),new ht(e.vault.A),new ht(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Po(o.toString()),new Po(i.toString()));Ao.logWithError("invalid params","params",l)}throw Ao.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function Bi(l){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=l;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return Gu(E(V({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return zu(E(V({},a),{maxAmountIn:o,amountOut:i}),t);Ao.logWithError("invalid params","params",l)}throw Ao.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var Hu=5e4,Qu=L([d("x"),d("y"),d("price")]),Jw=L([d("accountType"),d("status"),d("multiplier"),d("validDataCount"),D(Qu,Hu,"DataElement")]);import{PublicKey as mk}from"@solana/web3.js";import To from"decimal.js";import{TOKEN_PROGRAM_ID as Zu}from"@solana/spl-token";import{PublicKey as ok}from"@solana/web3.js";var ak=te("Raydium_liquidity_serum");function ta({programId:l}){let{publicKey:e}=ie([Buffer.from("amm_config_account_seed","utf-8")],l);return e}function na({programId:l}){return ie([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],l)}var xi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Si=l=>{let e={},t=Zu.toBase58();return Object.keys(l).map(n=>{let o=l[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:At({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:At({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new To(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new To(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new To(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:xi,week:xi,month:xi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:ta({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new To(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:At({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0,feeOn:"Both",hasDynamicFee:!1,tips:[],launchMigratePool:!1}}),e};import VT from"bn.js";import DT from"decimal.js";import{TOKEN_PROGRAM_ID as Dk}from"@solana/spl-token";import{PublicKey as qk}from"@solana/web3.js";import Gk from"bn.js";import{SystemProgram as Sk,SYSVAR_RENT_PUBKEY as Kk,Transaction as Ck,TransactionInstruction as Rk}from"@solana/web3.js";import{createInitializeAccountInstruction as Ok,TOKEN_PROGRAM_ID as Nk}from"@solana/spl-token";function ju(l="accountFlags"){let e=new ro(l);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var $u=L([J(5),ju("accountFlags"),I("ownAddress"),d("vaultSignerNonce"),I("baseMint"),I("quoteMint"),I("baseVault"),d("baseDepositsTotal"),d("baseFeesAccrued"),I("quoteVault"),d("quoteDepositsTotal"),d("quoteFeesAccrued"),d("quoteDustThreshold"),I("requestQueue"),I("eventQueue"),I("bids"),I("asks"),d("baseLotSize"),d("quoteLotSize"),d("feeRateBps"),d("referrerRebatesAccrued"),J(7)]);import{PublicKey as sI}from"@solana/web3.js";import{AccountLayout as cI,NATIVE_MINT as lI,TOKEN_2022_PROGRAM_ID as mI,TOKEN_PROGRAM_ID as dI,createAssociatedTokenAccountIdempotentInstruction as pI}from"@solana/spl-token";import lh from"bn.js";import tc from"bn.js";var ZT=new tc(0);import nh from"bn.js";import nc from"bn.js";var We=new nc(1e6);import kI from"bn.js";import hI from"decimal.js";import{PublicKey as xh,TransactionInstruction as ac,Keypair as Kh,SystemProgram as Ch}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Lh,TOKEN_2022_PROGRAM_ID as Oh,TOKEN_PROGRAM_ID as Nh}from"@solana/spl-token";var oc=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),yh=Buffer.from("amm_config","utf8"),bh=Buffer.from("pool","utf8"),gh=Buffer.from("pool_lp_mint","utf8"),Ph=Buffer.from("pool_vault","utf8"),ic=Buffer.from("observation","utf8"),Ah=Buffer.from("permission","utf8"),wh=Buffer.from("support_mint","utf8");function Ci(l){return ie([oc],l)}function Ri(l,e){return ie([ic,e.toBuffer()],l)}var kh=Buffer.from("locked_liquidity","utf8");var Dh=te("Raydium_cpmm"),sc={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132]),collectCreatorFeePermissionless:Buffer.from([202,202,34,83,226,122,145,229])};function _n(l,e,t,n,o,i,r,a,c,u,s,f,m,p,g,y){let b=L([d("amountIn"),d("amounOutMin")]),P=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(b.span);return b.encode({amountIn:g,amounOutMin:y},w),new ac({keys:P,programId:l,data:Buffer.from([...sc.swapBaseInput,...w])})}var uc=L([J(8),M("bump"),Ie("disableCreatePool"),Oe("index"),d("tradeFeeRate"),d("protocolFeeRate"),d("fundFeeRate"),d("createPoolFee"),I("protocolOwner"),I("fundOwner"),d("creatorFeeRate"),D(d(),15)]),Li=L([J(8),I("configId"),I("poolCreator"),I("vaultA"),I("vaultB"),I("mintLp"),I("mintA"),I("mintB"),I("mintProgramA"),I("mintProgramB"),I("observationId"),M("bump"),M("status"),M("lpDecimals"),M("mintDecimalA"),M("mintDecimalB"),d("lpAmount"),d("protocolFeesMintA"),d("protocolFeesMintB"),d("fundFeesMintA"),d("fundFeesMintB"),d("openTime"),d("epoch"),M("feeOn"),Ie("enableCreatorFee"),D(M(),6),d("creatorFeesMintA"),d("creatorFeesMintB"),D(d(),28)]),Uh=L([J(8),I("configId"),D(d(),30)]);import{PublicKey as cc,Transaction as Oi,TransactionInstruction as lc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mc}from"@solana/spl-token";import oa from"bn.js";var Ze=class extends $e{static getPdaPoolId(e,t){return ie([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ie([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new oa(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let r=n.map(s=>Ze.getPdaPoolId(t,s).publicKey),a=[];for(let s=0;s<Ze.VERSION_PROJECT.length;s++)a.push(...r.map(f=>Ze.getPdaOwnerId(t,f,o,s).publicKey));let c=await st(e,[...r,...a]),u=[];for(let s=0;s<c.length;s++){let f=Math.floor(s/n.length),m=s%n.length,p=r[m],g=a[s],y=c[m],b=c[n.length+s];if(!(y&&b)||y.data.length!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let P=Ze.POOL_LAYOUT.decode(y.data),w=Ze.OWNER_LAYOUT.decode(b.data),h=P.openTime.toNumber(),B=P.endTime.toNumber(),A=w.tokenInfo.map(K=>K.debtAmount.gt(new oa(0))).filter(K=>!K).length!==3,k=i>h&&i<B&&P.status===1,T=A&&k;u.push({programId:t,poolId:p,ammId:P.ammId,ownerAccountId:g,snapshotLpAmount:w.lpAmount,project:Ze.VERSION_PROJECT[f],openTime:h,endTime:B,canClaim:T,canClaimErrorType:A?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:P.tokenInfo.map((K,S)=>({mintAddress:K.mintAddress,mintVault:K.mintVault,mintDecimals:K.mintDecimals,perLpLoss:K.perLpLoss,debtAmount:w.tokenInfo[S].debtAmount.add(w.tokenInfo[S].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:s,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(Ce.WSOL.mint),associatedOnly:u.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),r.push(s)}o.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let s of e){let f=[];for(let m of s.tokenInfo){let{account:p,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(Ce.WSOL.mint),associatedOnly:m.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});g&&o.addInstruction(g),p&&(r[m.mintAddress.toString()]=p,f.push(p))}o.addInstruction({instructions:[Ze.makeClaimInstruction({programId:s.programId,poolInfo:s,ownerInfo:{wallet:i,ownerPda:s.ownerAccountId,claimAddress:f}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return Qo(u,[i,...c.map(s=>s.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Oi().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Oi().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Oi().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=L([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:mc,isSigner:!1,isWritable:!1}],r=Buffer.alloc(o.span);o.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new lc({keys:i,programId:e,data:a})}},Pt=Ze;Pt.CLAIMED_NUM=3,Pt.POOL_LAYOUT=L([J(8),M("bump"),M("status"),d("openTime"),d("endTime"),I("ammId"),D(L([M("mintDecimals"),I("mintAddress"),I("mintVault"),d("perLpLoss"),d("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),D(d(),10,"padding")]),Pt.OWNER_LAYOUT=L([J(8),M("bump"),M("version"),I("poolId"),I("owner"),d("lpAmount"),D(L([I("mintAddress"),d("debtAmount"),d("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),D(d(),4,"padding")]),Pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new cc(e)),Pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];var dc=Buffer.from("vault_auth_seed","utf8"),fB=Buffer.from("global_config","utf8"),yB=Buffer.from("pool_vesting","utf8"),bB=Buffer.from("platform_config","utf8"),gB=Buffer.from("platform_fee_vault_auth_seed","utf8"),PB=Buffer.from("creator_fee_vault_auth_seed","utf8"),AB=Buffer.from("platform_global_access","utf8"),wB=Buffer.from("platform_allow_config","utf8");function fn(l){return ie([dc],l)}function Ni(l){return ie([Buffer.from("__event_authority","utf8")],l)}function Vn(l,e,t){return ie([e.toBuffer(),t.toBuffer()],l)}function En(l,e,t){return ie([e.toBuffer(),t.toBuffer()],l)}import{ASSOCIATED_TOKEN_PROGRAM_ID as CB,TOKEN_2022_PROGRAM_ID as RB,TOKEN_PROGRAM_ID as LB}from"@solana/spl-token";import{SystemProgram as ra,TransactionInstruction as aa}from"@solana/web3.js";import Mi from"bn.js";var pc=L([d(),d("epoch"),M("curveType"),Oe("index"),d("migrateFee"),d("tradeFeeRate"),d("maxShareFeeRate"),d("minSupplyA"),d("maxLockRate"),d("minSellRateA"),d("minMigrateRateA"),d("minFundRaisingB"),I("mintB"),I("protocolFeeOwner"),I("migrateFeeOwner"),I("migrateToAmmWallet"),I("migrateToCpmmWallet"),D(d(),16)]),fc=L([d("totalLockedAmount"),d("cliffPeriod"),d("unlockPeriod"),d("startTime"),d("totalAllocatedShare")]),yc=L([d(),d("epoch"),M("bump"),M("status"),M("mintDecimalsA"),M("mintDecimalsB"),M("migrateType"),d("supply"),d("totalSellA"),d("virtualA"),d("virtualB"),d("realA"),d("realB"),d("totalFundRaisingB"),d("protocolFee"),d("platformFee"),d("migrateFee"),fc.replicate("vestingSchedule"),I("configId"),I("platformId"),I("mintA"),I("mintB"),I("vaultA"),I("vaultB"),I("creator"),M("mintProgramFlag"),M("cpmmCreatorFeeOn"),d("platformVestingShare"),D(M(),54)]),hB=L([d(),d("epoch"),I("poolId"),I("beneficiary"),d("claimedAmount"),d("tokenShareAmount"),D(d(),8)]),ia=L([M("migrateType"),M("migrateCpmmFeeOn"),d("supply"),d("totalSellA"),d("totalFundRaisingB"),d("totalLockedAmount"),d("cliffPeriod"),d("unlockPeriod")]),bc=L([d("epoch"),M("index"),I("configId"),ia.replicate("bondingCurveParam"),D(d(),50)]),yn=L([d(),d("epoch"),I("platformClaimFeeWallet"),I("platformLockNftWallet"),d("platformScale"),d("creatorScale"),d("burnScale"),d("feeRate"),D(M(),64,"name"),D(M(),256,"web"),D(M(),256,"img"),I("cpConfigId"),d("creatorFeeRate"),I("transferFeeExtensionAuth"),I("platformVestingWallet"),d("platformVestingScale"),I("platformCpCreator"),M("restrictGlobalConfig"),D(M(),107),br(bc,"platformCurve")]);var sa={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106]),createPlatformAllowConfig:Buffer.from([69,71,168,7,214,250,107,102]),closePlatformAllowConfig:Buffer.from([82,205,36,216,16,6,240,215])};function ho(l,e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h){let B=L([d("amountB"),d("minAmountA"),d("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Ni(l).publicKey,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1}];h&&A.push({pubkey:h,isSigner:!1,isWritable:!0}),A.push({pubkey:ra.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:g,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(B.span);return B.encode({amountB:b,minAmountA:P,shareFeeRate:w!=null?w:new Mi(0)},k),new aa({keys:A,programId:l,data:Buffer.from([...sa.buyExactIn,...k])})}function Fi(l,e,t,n,o,i,r,a,c,u,s,f,m,p,g,y,b,P,w,h){let B=L([d("amountA"),d("minAmountB"),d("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Ni(l).publicKey,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1}];h&&A.push({pubkey:h,isSigner:!1,isWritable:!0}),A.push({pubkey:ra.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:g,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(B.span);return B.encode({amountA:b,minAmountB:P,shareFeeRate:w!=null?w:new Mi(0)},k),new aa({keys:A,programId:l,data:Buffer.from([...sa.sellExactIn,...k])})}var VB=new Mi("18446744073709551615");import{NATIVE_MINT as kS,TOKEN_2022_PROGRAM_ID as TS,TOKEN_PROGRAM_ID as hS,createAssociatedTokenAccountIdempotentInstruction as BS,createSyncNativeInstruction as xS,getTransferFeeConfig as SS,unpackMint as KS}from"@solana/spl-token";import Ve from"bn.js";import{PublicKey as wc,SystemProgram as LS}from"@solana/web3.js";import ot from"bn.js";import ca from"decimal.js";import Io from"bn.js";import Dn from"decimal.js";var Ft=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var Bo=class extends Ft{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Dn(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Dn(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Dn(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Dn(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Dn(e.virtualB.add(e.realB.add(i)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new Io(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new Io(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(r),u=a.mul(n).div(r).sub(t),s=c.div(u),f=t.mul(t).div(u);if(s.lt(new Io(0))||f.lt(new Io(0)))throw Error("invalid input 0");return{a:s,b:f,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return Xt(o,i)}};import xo from"bn.js";import Wn from"decimal.js";var So=class extends Ft{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Wn(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Wn(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Wn(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Wn(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Wn(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new xo(0)))throw Error("invalid input 1");let a=new xo(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new xo(0))||t.lt(new xo(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return Xt(o,n)}};import nt from"bn.js";import Yt from"decimal.js";import ua from"bn.js";import vi from"decimal.js";var qn=class{static _multipler(e){return new vi(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new vi(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new ua(o.mul(this._Q64).toFixed(0))}};qn._Q64=new vi(new ua(1).shln(64).toString());var Ko=class extends Ft{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Yt(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Yt(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Yt(e.virtualA.mul(e.realA).toString()).div(qn._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Yt(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Yt(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new nt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new nt(3)).sub(i),u=t.mul(new nt(2)).mul(r).div(a),s=u.mul(u),f=t.mul(new nt(2)).mul(le).div(s);if(!f.gt(new nt(0)))throw Error("a need gt 0");if(!wt.gt(f))throw Error("a need lt u64 max");if(f.lt(new nt(0))||u.lt(new nt(0)))throw Error("invalid input 0");return{a:f,b:new nt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new nt(2).mul(n).mul(le).div(e.virtualA);return new nt(new Yt(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return Xt(e.virtualA.mul(o),new nt(2).mul(le)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=Xt(e.virtualA.mul(o),new nt(2).mul(le));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new nt(2).mul(n).mul(le).div(e.virtualA),i=new nt(new Yt(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var It=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let s=this.getCurve(e),f=s.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),m=s.getPoolInitPriceByInit(E(V({},f),{decimalA:c,decimalB:u})),p=o.div(new ot(t-1)),g=new ot(0),y=[{price:m,totalSellSupply:0}],{a:b,b:P}=f,w=g,h=g;for(let B=1;B<t;B++){let A=B!==t-1?p:o.sub(h),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:P,realA:w,realB:h,totalFundRaisingB:o,totalSellA:i},amountB:A,protocolFeeRate:g,platformFeeRate:g,curveType:e,shareFeeRate:g,creatorFeeRate:g,transferFeeConfigA:void 0,transferFeeConfigB:void 0,slot:0});w=w.add(k.amountA.amount),h=h.add(k.amountB);let T=this.getPrice({poolInfo:{virtualA:b,virtualB:P,realA:w,realB:h},decimalA:c,decimalB:u,curveType:e});y.push({price:T,totalSellSupply:new ca(w.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:i}){return this.getCurve(i).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(We).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new ot(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(We);if(n.lt(u))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let s=e.sub(n).sub(o),f=e.mul(r.minMigrateRateA).div(We);if(s.lt(f))throw Error("migrate lt min migrate amoount");let m=e.sub(n).sub(o),p=new ot(new ca(m.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let g=new ot(10).pow(new ot(i));if(p.lte(g))throw Error("check migrate lp error")}else if(a==="cpmm"){let g=new ot(100);if(p.lte(g))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){var K;let f=vn(t,u,s),m=t.sub((K=f.fee)!=null?K:new ot(0)),p=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),g=this.calculateFee({amount:m,feeRate:p}),y=m.sub(g),b=this.getCurve(i),P=b.buyExactIn({poolInfo:e,amount:y}),w=e.totalSellA.sub(e.realA),h,B,A,k;if(P.gt(w)){h=w;let S=b.buyExactOut({poolInfo:e,amount:h}),x=this.calculatePreFee({postFeeAmount:S,feeRate:p});A=x.sub(S);let _=pn(x,u,s);B=_.amount,k=_.fee}else h=P,B=t,A=g,k=f.fee;let T=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:vn(h,c,s),amountB:B,splitFee:T,transferFeeB:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){let f=e.totalSellA.sub(e.realA),m=pn(t,c,s),p=m.fee?m.amount.add(m.fee):m.amount;t.gt(f)&&(p=f);let y=this.getCurve(i).buyExactOut({poolInfo:e,amount:p}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),P=this.calculatePreFee({postFeeAmount:y,feeRate:b}),w=P.sub(y),h=pn(P,u,s),B=this.splitFee({totalFee:w,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:h.amount,splitFee:B,transferFeeB:h.fee}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){var h;let f=this.getCurve(i),m=vn(t,c,s),p=m.fee?m.amount.sub(m.fee):m.amount,g=f.sellExactIn({poolInfo:e,amount:p}),y=this.calculateFee({amount:g,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),b=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),P=g.sub(y),w=vn(P,u,s);return{amountA:m,amountB:P.sub((h=w.fee)!=null?h:new ot(0)),splitFee:b,transferFeeB:w.fee}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){let f=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=pn(t,u,s),p=m.amount,g=this.calculatePreFee({postFeeAmount:p,feeRate:f});if(e.realB.lt(g))throw Error("Insufficient liquidity");let y=g.sub(p),P=It.getCurve(i).sellExactOut({poolInfo:e,amount:g});if(P.gt(e.realA))throw Error();let w=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:pn(P,c,s),amountB:t,splitFee:w,transferFeeB:m.fee}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new ot(0):e.mul(n).div(r),c=r.isZero()?new ot(0):e.mul(o).div(r),u=r.isZero()?new ot(0):e.mul(i).div(r),s=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:s,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return Ki(e,t,We)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(We),o=We.sub(t);return n.add(o).sub(new ot(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new ot(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return Bo;case 1:return So;case 2:return Ko}throw Error("find curve error")}};import{TOKEN_2022_PROGRAM_ID as gc,TOKEN_PROGRAM_ID as Pc}from"@solana/spl-token";function Ac(l,e){return l>>e&1?gc:Pc}function Co(l){return Ac(l,0)}import VS from"decimal.js";var ES={initPriceX64:new Ve("515752397214619"),supply:new Ve(1e15),totalSellA:new Ve(7931e11),totalFundRaisingB:new Ve(85e9),totalFundRaisingBUSD:new Ve(125e8),totalLockedAmount:new Ve("0"),cliffPeriod:new Ve("0"),unlockPeriod:new Ve("0"),decimals:6,virtualA:new Ve("1073471847374405"),virtualB:new Ve("30050573465"),realA:new Ve(0),realB:new Ve(0),protocolFee:new Ve(0),platformId:new wc("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new Ve(0),cliffPeriod:new Ve(0),unlockPeriod:new Ve(0),startTime:new Ve(0),totalAllocatedShare:new Ve(0)}},DS=new Ve(1e4);import{PublicKey as GS}from"@solana/web3.js";import{getTransferFeeConfig as XS,MintLayout as YS,TOKEN_2022_PROGRAM_ID as HS,TOKEN_PROGRAM_ID as QS,unpackMint as ZS}from"@solana/spl-token";import{ASSOCIATED_TOKEN_PROGRAM_ID as kc,TOKEN_2022_PROGRAM_ID as Tc,TOKEN_PROGRAM_ID as hc}from"@solana/spl-token";import{PublicKey as H,SystemProgram as Ic,TransactionInstruction as Bc}from"@solana/web3.js";import vt from"bn.js";function xc(l,e,t,n,o,i,r,a,c,u,s,f,m,p,g){var k;let y=[],b=[N({pubkey:hc,isWritable:!1}),N({pubkey:Tc,isWritable:!1}),N({pubkey:kc,isWritable:!1}),N({pubkey:Ic.programId,isWritable:!1}),N({pubkey:e,isSigner:!0})];b.push(N({pubkey:t})),b.push(N({pubkey:o}));let P=[c,u],w=[s,f],h=[i,r,a];for(let T=0;T<P.length;T++){let K=P[T],S=h[T]===K.mintA.address;if(b.push(N({pubkey:new H(K.programId),isWritable:!1})),T===P.length-1?b.push(N({pubkey:o})):b.push(N({pubkey:n})),b.push(N({pubkey:new H(h[T])})),b.push(N({pubkey:new H(h[T+1])})),K.version===6){let x=w[T];b.push(N({pubkey:new H(x.config.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(S?x.vault.A:x.vault.B)})),b.push(N({pubkey:new H(S?x.vault.B:x.vault.A)})),b.push(N({pubkey:new H(K.observationId)})),b.push(N({pubkey:Bt})),b.push(N({pubkey:xe(new H(K.programId),new H(K.id)).publicKey})),y.push(Sc(K.sqrtPriceX64.toString(),S));for(let _ of(k=g[T])!=null?k:[])b.push(N({pubkey:new H(_)}))}else if(K.version===5){let x=w[T];b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.authority),isWritable:!1})),b.push(N({pubkey:new H(x.marketProgramId)})),b.push(N({pubkey:new H(x.marketAuthority)})),b.push(N({pubkey:kr,isWritable:!1})),b.push(N({pubkey:new H(x.openOrders)})),b.push(N({pubkey:new H(x.vault.A)})),b.push(N({pubkey:new H(x.vault.B)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.marketId)})),b.push(N({pubkey:new H(x.marketBids)})),b.push(N({pubkey:new H(x.marketAsks)})),b.push(N({pubkey:new H(x.marketEventQueue)})),b.push(N({pubkey:new H(x.marketBaseVault)})),b.push(N({pubkey:new H(x.marketQuoteVault)}))}else if(K.version===4){let x=w[T],_=K.status!==1;b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(x.authority),isWritable:!1})),b.push(N({pubkey:new H(_?x.id:x.marketProgramId)})),b.push(N({pubkey:new H(_?x.id:x.marketAuthority)})),b.push(N({pubkey:new H(_?x.id:x.openOrders)})),b.push(N({pubkey:new H(x.vault.A)})),b.push(N({pubkey:new H(x.vault.B)})),b.push(N({pubkey:new H(_?x.id:x.marketId)})),b.push(N({pubkey:new H(_?x.id:x.marketBids)})),b.push(N({pubkey:new H(_?x.id:x.marketAsks)})),b.push(N({pubkey:new H(_?x.id:x.marketEventQueue)})),b.push(N({pubkey:new H(_?x.id:x.marketBaseVault)})),b.push(N({pubkey:new H(_?x.id:x.marketQuoteVault)}))}else if(K.version===7){let x=w[T];b.push(N({pubkey:new H(x.authority)})),b.push(N({pubkey:new H(x.config.id)})),b.push(N({pubkey:new H(x.id)})),b.push(N({pubkey:new H(S?x.vault.A:x.vault.B)})),b.push(N({pubkey:new H(S?x.vault.B:x.vault.A)})),b.push(N({pubkey:new H(K.observationId)}))}else throw Error("pool type error")}let B=L([M("insId"),d("amountIn"),d("amountOut"),D(z(),y.length,"clmmPriceLimit")]),A=Buffer.alloc(B.span);return B.encode({insId:0,amountIn:m,amountOut:p,clmmPriceLimit:y},A),new Bc({keys:b,programId:l,data:A})}function Sc(l,e){if(l)if(e){let t=new vt(l).div(new vt(25));return t.gt(Ye.add(De))?t:Ye.add(De)}else{let t=new vt(l).mul(new vt(25));return t.lt(He.sub(De))?t:He.sub(De)}else return e?Ye.add(De):He.sub(De)}function la({routeProgram:l,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,s,f,m;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],g=Ct(p),y=t.equals(g.mintA.address)?Ye.add(De):He.sub(De);return dt.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:g.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:g.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new vt(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],g=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[_n(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,g?p.vaultA:p.vaultB,g?p.vaultB:p.vaultA,g?p.mintProgramA:p.mintProgramB,g?p.mintProgramB:p.mintProgramA,new H(p[g?"mintA":"mintB"].address),new H(p[g?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[g?j.CpmmSwapBaseIn:j.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?Bi({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new vt(0)),fixedSide:"in"}):Ii({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((s=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?s:new vt(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?j.AmmV5SwapBaseIn:j.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=n.poolInfo[0],g=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[xc(l,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,g,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((m=(f=n.minAmountOut.fee)==null?void 0:f.raw)!=null?m:new vt(0)),n.remainingAccounts)],instructionTypes:[j.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(P=>P!==void 0),address:{}}}else throw Error("route type error")}var ma={[ai.toBase58()]:3},da={3:ai};var _i=L([J(5),J(8),I("ownAddress"),d("vaultSignerNonce"),I("baseMint"),I("quoteMint"),I("baseVault"),d("baseDepositsTotal"),d("baseFeesAccrued"),I("quoteVault"),d("quoteDepositsTotal"),d("quoteFeesAccrued"),d("quoteDustThreshold"),I("requestQueue"),I("eventQueue"),I("bids"),I("asks"),d("baseLotSize"),d("quoteLotSize"),d("feeRateBps"),d("referrerRebatesAccrued"),J(7)]),pa={3:_i};import{PublicKey as fa}from"@solana/web3.js";var Lo=te("Serum"),Oo=class{static getProgramId(e){let t=da[e];return t||Lo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ma[t];return n||Lo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=pa[e];return t||Lo.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=fa.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Lo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:fa.default,nonce:o}}};var IR=new _t(2),BR=new _t(3),xR=new _t(5),Vo=new _t(10),SR=new _t(100),KR=new _t(1e3),CR=new _t(1e4);function Go(l){return Vo.pow(ge(l))}function Ki(l,e,t){return l.mul(e).add(t).sub(new _t(1)).div(t)}function vo(l,e=1,t=[]){let n=[...l];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var ze=new $(0);function Vt(l,e){var n,o,i,r,a;let t=(n=l.extensions)==null?void 0:n.feeConfig;if(!!t)return{transferFeeConfigAuthority:Z.default,withdrawWithheldAuthority:Z.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((i=(o=t.olderTransferFee.epoch)!=null?o:e)!=null?i:0),maximumFee:BigInt(t.olderTransferFee.maximumFee),transferFeeBasisPoints:t.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((a=(r=t.newerTransferFee.epoch)!=null?r:e)!=null?a:0),maximumFee:BigInt(t.newerTransferFee.maximumFee),transferFeeBasisPoints:t.newerTransferFee.transferFeeBasisPoints}}}function No(l){return l.programId?new Z(l.programId):be}var Ro=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(Ae));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ge(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[rn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[rn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await ao({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,s=e.amountOut,f=u.amount.token.mint.equals(Ae),m=s.amount.token.mint.equals(Ae),p=u.amount.token.mint,g=s.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?bn:be,mint:p,notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:f?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let P;if(e.routeType==="route"&&!m)P=this.scope.account.getAssociatedTokenAccount(g,s.amount.token.isToken2022?bn:be);else{let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:s.amount.token.isToken2022?bn:be,mint:g,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});P=A,k&&c.addInstruction(k)}m&&c.addInstruction({endInstructions:[rn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:P,programId:be})],endInstructionTypes:[j.CloseAccount]});let w;if(e.routeType==="route"){let A=e.middleToken;w=this.scope.account.getAssociatedTokenAccount(A.mint,A.isToken2022?bn:be)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),B=la({routeProgram:i,inputMint:p,swapInfo:E(V({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:g}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:w,destinationToken:P}});if(e.feeConfig!==void 0){let A=this.createTxBuilder(),k=u.amount.token.isToken2022?Kc(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],bn):ba(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());A.addInstruction({instructions:[k],instructionTypes:[j.TransferAmount]}),A.addInstruction(B);let{transactions:T}=r===0?await A.sizeCheckBuildV0():await A.sizeCheckBuild();T.length<2&&c.addInstruction({instructions:[ba(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[j.TransferAmount]})}return c.addInstruction(B),r===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:B.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:B.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:c=new $(0),shareFeeReceiver:u,launchPlatformInfo:s,slot:f,mintInfo:m,epochInfo:p,ownerInfo:g={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:P,blockTimestamp:w}){let h=(g==null?void 0:g.feePayer)||this.scope.ownerPubKey,B=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:A,clmmComputeAmount:{maxClmmAmountIn:k,clmmAmountOut:T,remainingAccounts:K},launchPoolInfo:S,launchAuthProgramId:x,launchSwapInfo:_,launchMintProgramB:F,outAmount:O,minOutAmount:q}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:B,shareFeeRate:c,launchPlatformInfo:s,slot:f,mintInfo:m,blockTimestamp:w}),W=e.toString()===A.poolInfo.mintA.address,X=g.useSOLBalance&&A.poolInfo.mintA.address===Ae.toBase58(),G=g.useSOLBalance&&A.poolInfo.mintB.address===Ae.toBase58(),oe={},ye;!r||r.equals(new se(0))?ye=W?Ye.add(new $(1)):He.sub(new $(1)):ye=Q.priceToSqrtPriceX64(r,A.poolInfo.mintA.decimals,A.poolInfo.mintB.decimals);let pe=this.createTxBuilder(h),[ke,me]=[new Z(A.poolInfo.mintA.address),new Z(A.poolInfo.mintB.address)],[ee,ve]=[new Z(A.poolInfo.mintA.programId),new Z(A.poolInfo.mintB.programId)],Ee=this.scope.account.getAssociatedTokenAccount(ke,ee),Xe=this.scope.account.getAssociatedTokenAccount(me,ve);pe.addInstruction({instructions:[gn(this.scope.ownerPubKey,Ee,this.scope.ownerPubKey,ke,ee),gn(this.scope.ownerPubKey,Xe,this.scope.ownerPubKey,me,ve)]}),(W&&X||!W&&G)&&pe.addInstruction({instructions:[ya.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:W?Ee:Xe,lamports:BigInt(k.toString())}),ga(W?Ee:Xe)]}),oe[A.poolInfo.mintA.address]=Ee,oe[A.poolInfo.mintB.address]=Xe,(!Ee||!Xe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:Ee,ownerTokenAccountB:Xe}),pe.addInstruction(n?dt.makeSwapBaseOutInstructions({poolInfo:A.poolInfo,poolKeys:A.poolKeys,observationId:A.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:Ee,tokenAccountB:Xe},outputMint:W?me:ke,amountOut:T,amountInMax:k,sqrtPriceLimitX64:ye,remainingAccounts:K}):dt.makeSwapBaseInInstructions({poolInfo:A.poolInfo,poolKeys:A.poolKeys,observationId:A.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:Ee,tokenAccountB:Xe},inputMint:new Z(e),amountIn:t,amountOutMin:T,sqrtPriceLimitX64:ye,remainingAccounts:K}));let Et=Co(S.mintProgramFlag),Ht=this.scope.account.getAssociatedTokenAccount(S.mintA,Et),Pn=oe[S.mintB.toBase58()];if(pe.addInstruction({instructions:[gn(this.scope.ownerPubKey,Ht,this.scope.ownerPubKey,S.mintA,Et)]}),!Pn){let Qt=S.mintB.equals(Ae),{account:Pa,instructionParams:Vi}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F,mint:S.mintB,notUseTokenAccount:Qt,owner:this.scope.ownerPubKey,skipCloseAccount:!Qt,createInfo:Qt?{payer:this.scope.ownerPubKey,amount:T}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Pn=Pa,Vi&&pe.addInstruction(Vi)}return pe.addInstruction({instructions:[ho(S.programId,this.scope.ownerPubKey,x,S.configId,S.platformId,new Z(i),Ht,Pn,S.vaultA,S.vaultB,S.mintA,S.mintB,Et,F,Vn(S.programId,S.platformId,S.mintB).publicKey,En(S.programId,S.creator,S.mintB).publicKey,_.amountB.lt(T)?_.amountB:T,q,c,u)]}),pe.addCustomComputeBudget(b),pe.versionBuild({txVersion:P,extInfo:{routes:[{mint:new Z(e),amount:n?k:t,decimal:A.poolInfo[W?"mintA":"mintB"].decimals},{mint:W?me:ke,amount:T,decimal:A.poolInfo[W?"mintB":"mintA"].decimals},{mint:S.mintA,amount:O,decimal:S.mintDecimalsA}],outAmount:O,minOutAmount:q}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new $(0),clmmPoolData:u,launchPoolInfo:s,launchPlatformInfo:f,slot:m,mintInfo:p,blockTimestamp:g}){var G,oe;let y=r>0?new se(r).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():r,b=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==b.poolInfo.mintA.address&&e.toString()!==b.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let P=e.toString()===b.poolInfo.mintA.address,w=b.poolInfo[P?"mintB":"mintA"],h=s;if(h||(h=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(i)})),w.address!==h.mintB.toBase58())throw new Error(`clmm swap mint(${w.address}) != launch pool mintB(${h.mintB.toBase58()})`);let B=n?await Qe.computeAmountIn({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountOut:t,baseMint:new Z(b.poolInfo[P?"mintB":"mintA"].address),slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:g}):await Qe.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountIn:t,tokenOut:w,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:g}),A=f;if(!A){let ye=await this.scope.connection.getAccountInfo(h.platformId);A=yn.decode(ye.data)}let k=p!=null?p:await this.scope.token.getTokenInfo(h.mintA),T=fn(h.programId).publicKey,K=Vt(k,a==null?void 0:a.epoch),S=No(w),x=Vt(w,a==null?void 0:a.epoch),_=n?t:B.minAmountOut.amount.raw,F=It.buyExactIn({poolInfo:h,amountB:_,protocolFeeRate:h.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:h.configInfo.curveType,shareFeeRate:c,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:K,transferFeeConfigB:x,slot:m!=null?m:await this.scope.connection.getSlot()}),O=F.amountA.amount.sub((G=F.amountA.fee)!=null?G:new $(0)),q=new se(O.toString()),W=new $(1e4),X=y?new se(W.sub(new $(y*1e4)).toNumber()/W.toNumber()).clampedTo(0,1):new se(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:n?B.maxAmountIn.amount:t,clmmAmountOut:_,remainingAccounts:B.remainingAccounts},clmmComputeInfo:B,launchPoolInfo:h,launchAuthProgramId:T,launchMintTransferFeeConfig:K,launchMintProgramB:S,launchMintTransferFeeConfigB:x,launchSwapInfo:F,outAmount:F.amountA.amount.sub((oe=F.amountA.fee)!=null?oe:new $(0)),minOutAmount:new $(q.mul(X).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new $(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:s,txVersion:f,blockTimestamp:m}){let p=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,g=await this.scope.fetchEpochInfo(),{clmmPoolData:y,clmmComputeAmount:{remainingAccounts:b},launchPoolInfo:P,launchAuthProgramId:w,launchSwapInfo:h,launchMintProgramB:B,minLaunchOutAmount:A,outAmount:k,minOutAmount:T}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:g,shareFeeRate:r,blockTimestamp:m}),K=this.createTxBuilder(p),S={},x=Co(P.mintProgramFlag),{account:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:P.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!_)throw new Error(`do not have launch mint(${P.mintA.toString()}) token account`);let F=P.mintB.equals(Ae),{account:O,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:P.mintB,notUseTokenAccount:F,owner:this.scope.ownerPubKey,skipCloseAccount:!F,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(q&&K.addInstruction(q),!O)throw new Error(`do not have launch mint(${P.mintA.toString()}) token account`);S[P.mintB.toBase58()]=O,K.addInstruction({instructions:[Fi(P.programId,this.scope.ownerPubKey,w,P.configId,P.platformId,new Z(n),_,O,P.vaultA,P.vaultB,P.mintA,P.mintB,x,B,Vn(P.programId,P.platformId,P.mintB).publicKey,En(P.programId,P.creator,P.mintB).publicKey,h.amountA.amount.lt(e)?h.amountA.amount:e,A,r,a)]});let W=P.mintB.toString()===y.poolInfo.mintA.address,X=c.useSOLBalance&&y.poolInfo.mintA.address===Ae.toBase58(),G=c.useSOLBalance&&y.poolInfo.mintB.address===Ae.toBase58(),oe;!o||o.equals(new se(0))?oe=W?Ye.add(new $(1)):He.sub(new $(1)):oe=Q.priceToSqrtPriceX64(o,y.poolInfo.mintA.decimals,y.poolInfo.mintB.decimals);let[ye,pe]=[new Z(y.poolInfo.mintA.address),new Z(y.poolInfo.mintB.address)],[ke,me]=[new Z(y.poolInfo.mintA.programId),new Z(y.poolInfo.mintB.programId)],ee=X?void 0:this.scope.account.getAssociatedTokenAccount(ye,ke),ve=G?void 0:this.scope.account.getAssociatedTokenAccount(pe,me);if(!ee){let{account:Ee,instructionParams:Xe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ke,mint:ye,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:W?e:0},associatedOnly:!1,checkCreateATAOwner:u});ee=Ee,Xe&&K.addInstruction(Xe)}if(!ve){let{account:Ee,instructionParams:Xe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:me,mint:pe,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:W?0:e},associatedOnly:!1,checkCreateATAOwner:u});ve=Ee,Xe&&K.addInstruction(Xe)}return S[y.poolInfo.mintA.address]=ee,S[y.poolInfo.mintB.address]=ve,(!ee||!ve)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ee,ownerTokenAccountB:ve}),K.addInstruction(dt.makeSwapBaseInInstructions({poolInfo:y.poolInfo,poolKeys:y.poolKeys,observationId:y.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ee,tokenAccountB:ve},inputMint:new Z(y.poolKeys[W?"mintA":"mintB"].address),amountIn:A,amountOutMin:T,sqrtPriceLimitX64:oe,remainingAccounts:b})),K.addCustomComputeBudget(s),K.versionBuild({txVersion:f,extInfo:{routes:[{mint:P.mintA,amount:e,decimal:P.mintDecimalsA},{mint:P.mintB,amount:A,decimal:P.mintDecimalsB},{mint:new Z(y.poolKeys[W?"mintB":"mintA"].address),amount:k,decimal:y.poolKeys[W?"mintB":"mintA"].decimals}],outAmount:k,minOutAmount:T}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new $(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u,blockTimestamp:s}){let f=o>0?new se(o).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(n)}));let p=m.mintB,g=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(p.toString()!==g.poolInfo.mintA.address&&p.toString()!==g.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=p.toString()===g.poolInfo.mintA.address,b=g.poolInfo[y?"mintB":"mintA"],P=g.poolInfo[y?"mintA":"mintB"],w=u;if(!w){let W=await this.scope.connection.getAccountInfo(m.platformId);w=yn.decode(W.data)}let h=await this.scope.token.getTokenInfo(m.mintA),B=fn(m.programId).publicKey,A=Vt(h,i==null?void 0:i.epoch),k=No(P),T=Vt(P,i==null?void 0:i.epoch),K=It.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:w.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:w.creatorFeeRate,transferFeeConfigA:A,transferFeeConfigB:T,slot:await this.scope.connection.getSlot()}),S=K.amountB,x=new se(S.toString()),_=new $(1e4),F=f?new se(_.sub(new $(f*1e4)).toNumber()/_.toNumber()).clampedTo(0,1):new se(1),O=new $(x.mul(F).toFixed(0)),q=await Qe.computeAmountOutFormat({poolInfo:g.computePoolInfo,tickarrayBitmapExtension:g.computePoolInfo.exBitmapInfo,tickArrayCache:g.tickData[t.toString()],amountIn:O,tokenOut:b,slippage:f,epochInfo:i!=null?i:await this.scope.fetchEpochInfo(),blockTimestamp:s});return{clmmPoolData:g,clmmComputeAmount:q,launchPoolInfo:m,launchAuthProgramId:B,launchMintTransferFeeConfig:A,launchMintProgramB:k,launchMintTransferFeeConfigB:T,launchSwapInfo:K,minLaunchOutAmount:O,outAmount:q.amountOut.amount.raw,minOutAmount:q.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:i,slippage:r=.01,shareFeeRate:a=new $(0),shareFeeReceiver:c,launchPlatformInfo:u,slot:s,mintInfo:f,epochInfo:m,ownerInfo:p={useSOLBalance:!0},checkCreateATAOwner:g=!1,computeBudgetConfig:y,txVersion:b}){let P=(p==null?void 0:p.feePayer)||this.scope.ownerPubKey,w=m!=null?m:await this.scope.fetchEpochInfo(),{computePoolInfo:h,poolKeys:B}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:A,cpmmPoolData:k,launchPoolInfo:T,launchAuthProgramId:K,launchSwapInfo:S,launchMintProgramB:x,outAmount:_,minOutAmount:F}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:h,launchPoolId:o,slippage:r,epochInfo:w,shareFeeRate:a,launchPlatformInfo:u,slot:s,mintInfo:f}),O=e.toString()===k.mintA.address,q=p.useSOLBalance&&k.mintA.address===Ae.toBase58(),W=p.useSOLBalance&&k.mintB.address===Ae.toBase58(),X={},G=this.createTxBuilder(P),[oe,ye]=[new Z(k.mintA.address),new Z(k.mintB.address)],[pe,ke]=[new Z(k.mintA.programId),new Z(k.mintB.programId)],me=this.scope.account.getAssociatedTokenAccount(oe,pe),ee=this.scope.account.getAssociatedTokenAccount(ye,ke);G.addInstruction({instructions:[gn(this.scope.ownerPubKey,me,this.scope.ownerPubKey,oe,pe),gn(this.scope.ownerPubKey,ee,this.scope.ownerPubKey,ye,ke)]}),(O&&q||!O&&W)&&G.addInstruction({instructions:[ya.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:O?me:ee,lamports:BigInt(A.amountIn.toString())}),ga(O?me:ee)]}),X[k.mintA.address]=me,X[k.mintB.address]=ee,(!me||!ee)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:me,ownerTokenAccountB:ee});let ve=i!=null?i:B;G.addInstruction({instructions:[_n(k.programId,this.scope.ownerPubKey,new Z(ve.authority),new Z(ve.config.id),k.id,O?me:ee,O?ee:me,new Z(ve.vault[O?"A":"B"]),new Z(ve.vault[O?"B":"A"]),new Z(O?pe:ke!=null?ke:be),new Z(O?ke:pe!=null?pe:be),O?oe:ye,O?ye:oe,Ri(k.programId,k.id).publicKey,t,A.swapResult.outputAmount)]});let Ee=Co(T.mintProgramFlag),Xe=this.scope.account.getAssociatedTokenAccount(T.mintA,Ee),Et=X[T.mintB.toBase58()];if(G.addInstruction({instructions:[gn(this.scope.ownerPubKey,Xe,this.scope.ownerPubKey,T.mintA,Ee)]}),!Et){let Ht=T.mintB.equals(Ae),{account:Pn,instructionParams:Qt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:T.mintB,notUseTokenAccount:Ht,owner:this.scope.ownerPubKey,skipCloseAccount:!Ht,createInfo:Ht?{payer:this.scope.ownerPubKey,amount:A.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:g});Et=Pn,Qt&&G.addInstruction(Qt)}return G.addInstruction({instructions:[ho(T.programId,this.scope.ownerPubKey,K,T.configId,T.platformId,new Z(o),Xe,Et,T.vaultA,T.vaultB,T.mintA,T.mintB,Ee,x,Vn(T.programId,T.platformId,T.mintB).publicKey,En(T.programId,T.creator,T.mintB).publicKey,S.amountB.lt(A.minAmountOut)?S.amountB:A.minAmountOut,F,a,c)]}),G.addCustomComputeBudget(y),G.versionBuild({txVersion:b,extInfo:{routes:[{mint:new Z(e),amount:t,decimal:k[O?"mintDecimalA":"mintDecimalB"]},{mint:O?ye:oe,amount:A.minAmountOut,decimal:k[O?"mintB":"mintA"].decimals},{mint:T.mintA,amount:_,decimal:T.mintDecimalsA}],outAmount:_,minOutAmount:F}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:i,epochInfo:r,shareFeeRate:a=new $(0),cpmmPoolData:c,launchPoolInfo:u,launchPlatformInfo:s,slot:f,mintInfo:m}){var W,X;let p=i>0?new se(i).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():i,g=c!=null?c:(await this.scope.cpmm.getPoolInfoFromRpc(n.toString())).computePoolInfo;if(e.toString()!==g.mintA.address&&e.toString()!==g.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=e.toString()===g.mintA.address,b=g[y?"mintB":"mintA"],P=u;if(P||(P=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(o)})),b.address!==P.mintB.toBase58())throw new Error(`clmm swap mint(${b.address}) != launch pool mintB(${P.mintB.toBase58()})`);let w=s;if(!w){let G=await this.scope.connection.getAccountInfo(P.platformId);w=yn.decode(G.data)}let h=m!=null?m:await this.scope.token.getTokenInfo(P.mintA),B=fn(P.programId).publicKey,A=Vt(h,r==null?void 0:r.epoch),k=No(b),T=Vt(b,r==null?void 0:r.epoch),K=await this.scope.cpmm.computeSwapAmount({pool:g,amountIn:t,outputMint:new Z(b.address),slippage:p}),S=K.minAmountOut,x=It.buyExactIn({poolInfo:P,amountB:S,protocolFeeRate:P.configInfo.tradeFeeRate,platformFeeRate:w.feeRate,curveType:P.configInfo.curveType,shareFeeRate:a,creatorFeeRate:w.creatorFeeRate,transferFeeConfigA:A,transferFeeConfigB:T,slot:f!=null?f:await this.scope.connection.getSlot()}),_=x.amountA.amount.sub((W=x.amountA.fee)!=null?W:new $(0)),F=new se(_.toString()),O=new $(1e4),q=p?new se(O.sub(new $(p*1e4)).toNumber()/O.toNumber()).clampedTo(0,1):new se(1);return{cpmmPoolData:g,cpmmComputInfo:K,launchPoolInfo:P,launchAuthProgramId:B,launchMintTransferFeeConfig:A,launchMintProgramB:k,launchMintTransferFeeConfigB:T,launchSwapInfo:x,outAmount:x.amountA.amount.sub((X=x.amountA.fee)!=null?X:new $(0)),minOutAmount:new $(F.mul(q).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new $(0),cpmmPoolData:u,clmmPoolData:s,launchPoolInfo:f,launchPlatformInfo:m,slot:p,mintInfo:g,blockTimestamp:y}){var ee,ve;let b=r>0?new se(r).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():r,P=s!=null?s:await this.scope.clmm.getPoolInfoFromRpc(n.toString());if(e.toString()!==P.poolInfo.mintA.address&&e.toString()!==P.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let w=e.toString()===P.poolInfo.mintA.address,h=P.poolInfo[w?"mintB":"mintA"],B=f;if(B||(B=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(i)})),h.address!==B.mintB.toBase58())throw new Error(`clmm swap mint(${h.address}) != launch pool mintB(${B.mintB.toBase58()})`);let A=m;if(!A){let Ee=await this.scope.connection.getAccountInfo(B.platformId);A=yn.decode(Ee.data)}let k=g!=null?g:await this.scope.token.getTokenInfo(B.mintA),T=fn(B.programId).publicKey,K=Vt(k,a==null?void 0:a.epoch),S=No(h),x=Vt(h,a==null?void 0:a.epoch),_=await Qe.computeAmountOutFormat({poolInfo:P.computePoolInfo,tickArrayCache:P.tickData[n.toString()],amountIn:t,tokenOut:h,slippage:b,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:y,tickarrayBitmapExtension:P.computePoolInfo.exBitmapInfo}),F=u!=null?u:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,O=await this.scope.cpmm.computeSwapAmount({pool:F,amountIn:t,outputMint:new Z(h.address),slippage:b}),[q,W]=[_.minAmountOut.amount.raw,O.minAmountOut],X=q.gte(W)?"clmm":"cpmm",G=q.gte(W)?q:W,oe=It.buyExactIn({poolInfo:B,amountB:G,protocolFeeRate:B.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:B.configInfo.curveType,shareFeeRate:c,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:K,transferFeeConfigB:x,slot:p!=null?p:await this.scope.connection.getSlot()}),ye=oe.amountA.amount.sub((ee=oe.amountA.fee)!=null?ee:new $(0)),pe=new se(ye.toString()),ke=new $(1e4),me=b?new se(ke.sub(new $(b*1e4)).toNumber()/ke.toNumber()).clampedTo(0,1):new se(1);return{clmmPoolData:P,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:G,remainingAccounts:_.remainingAccounts},clmmComputeInfo:_,cpmmComputInfo:O,swapPoolType:X,launchPoolInfo:B,launchAuthProgramId:T,launchMintTransferFeeConfig:K,launchMintProgramB:S,launchMintTransferFeeConfigB:x,launchSwapInfo:oe,outAmount:oe.amountA.amount.sub((ve=oe.amountA.fee)!=null?ve:new $(0)),minOutAmount:new $(pe.mul(me).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=si,clmm:n=ui,cpmm:o=uo}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:hi.offsetOf("baseMint"),length:64}}),r=L([I("baseMint"),I("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),c=L([I("mintA"),I("mintB")]),s=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:un.span}],dataSlice:{offset:un.offsetOf("mintA"),length:64}})).map(p=>{let g=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:g.mintA,mintB:g.mintB}}),m=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Li.offsetOf("mintA"),length:64}})).map(p=>{let g=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:g.mintA,mintB:g.mintB}});return{clmmPools:s,ammPools:a,cpmmPools:m}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===Z.default.toString()?Ae:e,t=t.toString()===Z.default.toString()?Ae:t;let r={},a={},c={},u=[],s={};for(let m of n!=null?n:[]){if((m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),a[m.id.toString()]=m),m.mintA.equals(e)){let p=m.mintB.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].in.push(m)}if(m.mintB.equals(e)){let p=m.mintA.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].in.push(m)}if(m.mintA.equals(t)){let p=m.mintB.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].out.push(m)}if(m.mintB.equals(t)){let p=m.mintA.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].out.push(m)}}let f=[];for(let m of o)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),r[m.id.toBase58()]=m,f.push(m)),m.mintA.equals(e)&&(s[m.mintB.toBase58()]===void 0&&(s[m.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(s[m.mintA.toBase58()]===void 0&&(s[m.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(s[m.mintB.toBase58()]===void 0&&(s[m.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(s[m.mintA.toBase58()]===void 0&&(s[m.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintA.toBase58()].out.push(m));for(let m of i)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),c[m.id.toBase58()]=m),m.mintA.equals(e)&&(s[m.mintB.toBase58()]===void 0&&(s[m.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(s[m.mintA.toBase58()]===void 0&&(s[m.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(s[m.mintB.toBase58()]===void 0&&(s[m.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(s[m.mintA.toBase58()]===void 0&&(s[m.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[m.mintA.toBase58()].out.push(m));for(let m of Object.keys(s)){if(s[m].in.length===1&&s[m].out.length===1&&s[m].in[0].id.equals(s[m].out[0].id)){delete s[m];continue}if(s[m].in.length===0||s[m].out.length===0){delete s[m];continue}let p=s[m];for(let g of p.in)for(let y of p.out)g.version===6&&a[g.id.toString()]===void 0?a[g.id.toString()]=g:g.version===7&&c[g.id.toString()]===void 0?c[g.id.toString()]=g:(g.version===4||g.version===5)&&r[g.id.toString()]===void 0&&(r[g.id.toString()]=g),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:f,routePathDict:s,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=Si(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new Z(y.mintA.address),programId:be,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new Z(y.mintB.address),programId:be,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,P]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(be)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(be)?(o.delete(P),a[P]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(P)}),console.log("fetching mints info, total: ",o.size);let u=await Gn({connection:this.scope.connection,mints:Array.from(o).map(y=>new Z(y))});a=V(V({},a),u);let s=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let f=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:m,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:f,mintInfos:a}),g=Object.keys(e.routePathDict).reduce((y,b)=>E(V({},y),{[b]:E(V({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(P=>r[P.id.toBase58()]||m[P.id.toBase58()]||s[P.id.toBase58()]),out:e.routePathDict[b].out.map(P=>r[P.id.toBase58()]||m[P.id.toBase58()]||s[P.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:f,computeClmmPoolInfo:m,computePoolTickData:p,computeCpmmData:s,routePathDict:g}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:c,epochInfo:u,feeConfig:s,blockTimestamp:f}){var w,h,B,A,k,T,K,S,x;let m=s===void 0?new $(0):e.raw.mul(new $(s.feeBps.toNumber())).div(new $(1e4)),p=e.raw.sub(m),g=new fe(e.token,p),y=s===void 0?void 0:{feeAmount:m,feeAccount:s.feeAccount},b=E(V({},t),{address:it(t.address).toString()}),P=[];for(let _ of n)try{P.push(E(V({},this.computeAmountOut({itemPool:_,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:g,blockTimestamp:f})),{feeConfig:y}))}catch(F){this.logDebug("direct error",_.version,_.id.toString(),F.message)}this.logDebug("direct done");for(let[_,F]of Object.entries(o)){let O={chainId:101,address:_,programId:F.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:F.mDecimals,tags:[],extensions:{}},q=F.in.map(X=>{try{return{pool:X,data:this.computeAmountOut({itemPool:X,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:O,amountIn:g,blockTimestamp:f})}}catch(G){this.logDebug("route in error",X.version,X.id.toString(),G.message);return}}).sort((X,G)=>{var pe,ke,me,ee;let oe=X===void 0?ze:X.data.amountOut.amount.raw.sub((ke=(pe=X.data.amountOut.fee)==null?void 0:pe.raw)!=null?ke:ze),ye=G===void 0?ze:G.data.amountOut.amount.raw.sub((ee=(me=G.data.amountOut.fee)==null?void 0:me.raw)!=null?ee:ze);return oe.lt(ye)?1:-1})[0];if(q===void 0)continue;let W=new fe(co(O),q.data.amountOut.amount.raw.sub((h=(w=q.data.amountOut.fee)==null?void 0:w.raw)!=null?h:ze));for(let X of F.out)try{let G=this.computeAmountOut({itemPool:X,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:W,blockTimestamp:f});P.push(E(V({},G),{allTrade:!!(q.data.allTrade&&G.allTrade),amountIn:q.data.amountIn,amountOut:G.amountOut,minAmountOut:G.minAmountOut,currentPrice:void 0,executionPrice:new se(new je({baseToken:q.data.amountIn.amount.token,denominator:q.data.amountIn.amount.raw,quoteToken:G.amountOut.amount.token,numerator:G.amountOut.amount.raw.sub((A=(B=G.amountOut.fee)==null?void 0:B.raw)!=null?A:ze)}).toFixed()),priceImpact:new se(q.data.priceImpact.add(G.priceImpact).toFixed()),fee:[q.data.fee[0],G.fee[0]],routeType:"route",poolInfoList:[q.pool,X],remainingAccounts:[q.data.remainingAccounts[0],G.remainingAccounts[0]],minMiddleAmountFee:(k=G.amountOut.fee)!=null&&k.raw?new fe(q.data.amountOut.amount.token,((K=(T=q.data.amountOut.fee)==null?void 0:T.raw)!=null?K:ze).add((x=(S=G.amountOut.fee)==null?void 0:S.raw)!=null?x:ze)):void 0,middleToken:q.data.amountOut.amount.token,poolReady:q.data.poolReady&&G.poolReady,poolType:[q.data.poolType,G.poolType],feeConfig:y,expirationTime:Kt(q.data.expirationTime,G.expirationTime)}))}catch(G){this.logDebug("route out error",X.version,X.id.toString(),G.message)}}return P.filter(_=>(_.allTrade||this.logDebug(`pool ${_.poolInfoList.map(F=>F.id.toString()).join(",")} filter out since not all trade`),_.allTrade)).sort((_,F)=>_.amountOut.amount.raw.sub(F.amountOut.amount.raw).gt(ze)?-1:1)}getAllRouteComputeAmountIn({outputTokenAmount:e,directPath:t,routePathDict:n,simulateCache:o,tickCache:i,slippage:r,chainTime:a,epochInfo:c,blockTimestamp:u,feeConfig:s}){var p,g,y,b,P,w,h,B,A;let f=At({address:it(e.token.mint).toBase58(),decimals:e.token.decimals,programId:e.token.isToken2022?bn.toBase58():be.toBase58(),extensions:{}}),m=[];for(let k of t)try{let T=this.computeAmountIn({itemPool:k,tickCache:i,simulateCache:o,chainTime:a,epochInfo:c,slippage:r,outputToken:f,amountOut:e.raw,blockTimestamp:u}),K=s===void 0?new $(0):T.amountIn.amount.raw.mul(new $(s.feeBps.toNumber())).div(new $(1e4));m.push(E(V({},T),{feeConfig:s===void 0?void 0:{feeAmount:K,feeAccount:s.feeAccount}}))}catch(T){this.logDebug("direct error",k.version,k.id.toString(),T.message)}this.logDebug("direct done");for(let[k,T]of Object.entries(n)){let K={chainId:101,address:k,programId:T.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:T.mDecimals,tags:[],extensions:{}},S=T.out.map(_=>{try{return{pool:_,data:this.computeAmountIn({itemPool:_,tickCache:i,simulateCache:o,chainTime:a,epochInfo:c,slippage:r,outputToken:f,amountOut:e.raw,blockTimestamp:u})}}catch(F){this.logDebug("route in error",_.version,_.id.toString(),F.message);return}}).sort((_,F)=>{var W,X,G,oe;let O=_===void 0?ze:_.data.amountIn.amount.raw.add((X=(W=_.data.amountIn.fee)==null?void 0:W.raw)!=null?X:ze),q=F===void 0?ze:F.data.amountIn.amount.raw.add((oe=(G=F.data.amountIn.fee)==null?void 0:G.raw)!=null?oe:ze);return O.lt(q)?-1:1})[0];if(S===void 0)continue;let x=new fe(co(K),S.data.amountIn.amount.raw.add((g=(p=S.data.amountIn.fee)==null?void 0:p.raw)!=null?g:ze));for(let _ of T.in)try{let F=this.computeAmountIn({itemPool:_,tickCache:i,simulateCache:o,chainTime:a,epochInfo:c,slippage:r,outputToken:K,amountOut:x.raw,blockTimestamp:u}),O=s===void 0?new $(0):F.amountIn.amount.raw.mul(new $(s.feeBps.toNumber())).div(new $(1e4));m.push(E(V({},F),{allTrade:!!(F.allTrade&&S.data.allTrade),amountIn:F.amountIn,amountOut:S.data.amountOut,maxAmountIn:F.maxAmountIn,currentPrice:void 0,executionPrice:new se(new je({baseToken:S.data.amountIn.amount.token,denominator:S.data.amountIn.amount.raw,quoteToken:F.amountOut.amount.token,numerator:F.amountOut.amount.raw.sub((b=(y=F.amountOut.fee)==null?void 0:y.raw)!=null?b:ze)}).toFixed()),priceImpact:new se(S.data.priceImpact.add(F.priceImpact).toFixed()),fee:[F.fee[0],S.data.fee[0]],routeType:"route",poolInfoList:[S.pool,_],remainingAccounts:[S.data.remainingAccounts[0],F.remainingAccounts[0]],minMiddleAmountFee:(P=F.amountOut.fee)!=null&&P.raw?new fe(S.data.amountOut.amount.token,((h=(w=S.data.amountOut.fee)==null?void 0:w.raw)!=null?h:ze).add((A=(B=F.amountOut.fee)==null?void 0:B.raw)!=null?A:ze)):void 0,middleToken:S.data.amountOut.amount.token,poolReady:S.data.poolReady&&F.poolReady,poolType:[S.data.poolType,F.poolType],feeConfig:s===void 0?void 0:{feeAmount:O,feeAccount:s.feeAccount},expirationTime:Kt(S.data.expirationTime,F.expirationTime)}))}catch(F){this.logDebug("route out error",_.version,_.id.toString(),F.message)}}return m.filter(k=>(k.allTrade||this.logDebug(`pool ${k.poolInfoList.map(T=>T.id.toString()).join(",")} filter out since not all trade`),k.allTrade)).sort((k,T)=>T.amountIn.amount.raw.sub(k.amountIn.amount.raw).gt(ze)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:c,blockTimestamp:u}){if(e.version===6){let{allTrade:s,realAmountIn:f,amountOut:m,minAmountOut:p,expirationTime:g,currentPrice:y,executionPrice:b,priceImpact:P,fee:w,remainingAccounts:h,executionPriceX64:B}=Qe.computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0,blockTimestamp:u});return{allTrade:s,amountIn:f,amountOut:m,minAmountOut:p,currentPrice:new se(y.toFixed()),executionPrice:new se(b.toFixed()),priceImpact:new se(P.toFixed()),fee:[w],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[B],expirationTime:Kt(f.expirationTime,g)}}else if(e.version===7){let{allTrade:s,executionPrice:f,amountOut:m,minAmountOut:p,priceImpact:g,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:r});return{allTrade:s,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Me(E(V({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Me(E(V({},a),{amount:p})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:f,priceImpact:g,fee:[new fe(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:s,minAmountOut:f,currentPrice:m,executionPrice:p,priceImpact:g,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Me(E(V({},a),{amount:s})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Me(E(V({},a),{amount:f})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:p,priceImpact:g,fee:[new fe(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}computeAmountIn({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,amountOut:a,outputToken:c,blockTimestamp:u}){let s=c.address===e.mintB.address?e.mintA:e.mintB;if(e.version===6){let{allTrade:f,realAmountOut:m,amountIn:p,maxAmountIn:g,expirationTime:y,currentPrice:b,executionPrice:P,priceImpact:w,fee:h,remainingAccounts:B}=Qe.computeAmountIn({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountOut:a,baseMint:new Z(s.address),slippage:r,epochInfo:i,blockTimestamp:u});return{allTrade:f,amountOut:{amount:Me(E(V({},c),{amount:m.amount})),fee:m.fee?Me(E(V({},c),{amount:m.fee})):void 0,expirationTime:void 0},amountIn:{amount:Me(E(V({},s),{amount:p.amount})),fee:p.fee?Me(E(V({},s),{amount:p.fee})):void 0,expirationTime:p.expirationTime},maxAmountIn:{amount:Me(E(V({},s),{amount:g.amount})),fee:g.fee?Me(E(V({},s),{amount:g.fee})):void 0,expirationTime:g.expirationTime},currentPrice:new se(b.toFixed()),executionPrice:new se(P.toFixed()),priceImpact:new se(w.toFixed()),fee:[Me(E(V({},s),{amount:h}))],remainingAccounts:[B],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[gi(P)],expirationTime:Kt(m.expirationTime,y)}}else if(e.version===7){let{allTrade:f,executionPrice:m,amountIn:p,amountOut:g,priceImpact:y,fee:b}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:c.address,amountIn:a,swapBaseIn:!1,slippage:r});return{allTrade:f,amountOut:{amount:Me(E(V({},c),{amount:g})),fee:void 0,expirationTime:void 0},amountIn:{amount:Me(E(V({},s),{amount:p})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:Me(E(V({},s),{amount:p.mul(new $((1+r)*1e4)).div(new $(1e4))})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:m,priceImpact:y,fee:[Me(E(V({},s),{amount:b}))],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountIn:f,maxAmountIn:m,currentPrice:p,executionPrice:g,priceImpact:y}=this.scope.liquidity.computeAmountIn({poolInfo:n[e.id.toString()],amountOut:a,mintIn:s.address,mintOut:c.address,slippage:r});return{amountOut:{amount:Me(E(V({},c),{amount:a})),fee:void 0,expirationTime:void 0},amountIn:{amount:Me(E(V({},s),{amount:f})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:Me(E(V({},s),{amount:m})),fee:void 0,expirationTime:void 0},currentPrice:p,executionPrice:g,priceImpact:y,fee:[Me(E(V({},s),{amount:U}))],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(s=>{t[s]=u[s]})}let i=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(s=>{n[s]=u[s]})}let r=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};r.size>0&&(await pt(this.scope.connection,Array.from(r).map(s=>({pubkey:new Z(s)})))).forEach(s=>{if(!s.accountInfo)return;let f=_i.decode(s.accountInfo.data);a[s.pubkey.toBase58()]={marketId:s.pubkey.toString(),marketProgramId:s.accountInfo.owner.toString(),marketAuthority:Oo.getAssociatedAuthority({programId:s.accountInfo.owner,marketId:s.pubkey}).publicKey.toString(),marketBaseVault:f.baseVault.toString(),marketQuoteVault:f.quoteVault.toString(),marketBids:f.bids.toString(),marketAsks:f.asks.toString(),marketEventQueue:f.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let s=t[u.id.toString()],f={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:s.vaultA.toBase58(),B:s.vaultB.toBase58()},config:E(V({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(f)}else if(u.version===4){let s=n[u.id.toString()],f=V({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:s.baseVault.toBase58(),B:s.quoteVault.toBase58()},authority:na({programId:new Z(u.programId)}).publicKey.toString(),openOrders:s.openOrders.toBase58(),targetOrders:s.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]||{marketProgramId:s.marketProgramId.toBase58(),marketId:s.marketId.toBase58(),marketAuthority:Z.default.toBase58(),marketBaseVault:Z.default.toBase58(),marketQuoteVault:Z.default.toBase58(),marketBids:Z.default.toBase58(),marketAsks:Z.default.toBase58(),marketEventQueue:Z.default.toBase58()});c.push(f)}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:be.toBase58(),decimals:u.lpDecimals}),config:E(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}};export{Ro as default,Vt as toTransferFeeConfig};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=trade.mjs.map