@raydium-io/raydium-sdk-v2 0.1.73-alpha → 0.1.74-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/common/accountInfo.d.ts +1 -1
  5. package/lib/common/bignumber.d.ts +1 -1
  6. package/lib/common/constant.d.ts +1 -1
  7. package/lib/common/fractionUtil.d.ts +1 -1
  8. package/lib/common/index.d.ts +1 -1
  9. package/lib/common/transfer.d.ts +1 -1
  10. package/lib/common/txTool/txTool.d.ts +1 -1
  11. package/lib/common/txTool/txUtils.d.ts +1 -1
  12. package/lib/common/utility.d.ts +1 -1
  13. package/lib/index.d.ts +3 -3
  14. package/lib/index.js +1 -1
  15. package/lib/index.js.map +1 -1
  16. package/lib/index.mjs +1 -1
  17. package/lib/index.mjs.map +1 -1
  18. package/lib/module/amount.d.ts +1 -1
  19. package/lib/module/fraction.d.ts +1 -1
  20. package/lib/module/index.d.ts +1 -1
  21. package/lib/module/percent.d.ts +1 -1
  22. package/lib/module/price.d.ts +1 -1
  23. package/lib/raydium/account/account.d.ts +3 -3
  24. package/lib/raydium/account/index.d.ts +1 -1
  25. package/lib/raydium/account/instruction.d.ts +1 -1
  26. package/lib/raydium/account/types.d.ts +1 -1
  27. package/lib/raydium/account/util.d.ts +1 -1
  28. package/lib/raydium/clmm/clmm.d.ts +3 -3
  29. package/lib/raydium/clmm/index.d.ts +3 -3
  30. package/lib/raydium/clmm/instrument.d.ts +2 -2
  31. package/lib/raydium/clmm/layout.d.ts +1 -1
  32. package/lib/raydium/clmm/type.d.ts +2 -2
  33. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  38. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  39. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  40. package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
  41. package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
  42. package/lib/raydium/cpmm/index.d.ts +1 -1
  43. package/lib/raydium/cpmm/instruction.d.ts +1 -1
  44. package/lib/raydium/cpmm/layout.d.ts +1 -1
  45. package/lib/raydium/cpmm/type.d.ts +1 -1
  46. package/lib/raydium/farm/config.d.ts +1 -1
  47. package/lib/raydium/farm/farm.d.ts +3 -3
  48. package/lib/raydium/farm/index.d.ts +1 -1
  49. package/lib/raydium/farm/instruction.d.ts +1 -1
  50. package/lib/raydium/farm/layout.d.ts +1 -1
  51. package/lib/raydium/farm/type.d.ts +1 -1
  52. package/lib/raydium/farm/util.d.ts +1 -1
  53. package/lib/raydium/ido/ido.d.ts +3 -3
  54. package/lib/raydium/ido/index.d.ts +3 -3
  55. package/lib/raydium/ido/instruction.d.ts +1 -1
  56. package/lib/raydium/ido/type.d.ts +1 -1
  57. package/lib/raydium/index.d.ts +3 -3
  58. package/lib/raydium/index.js +1 -1
  59. package/lib/raydium/index.js.map +1 -1
  60. package/lib/raydium/index.mjs +1 -1
  61. package/lib/raydium/index.mjs.map +1 -1
  62. package/lib/raydium/liquidity/index.d.ts +1 -1
  63. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  64. package/lib/raydium/liquidity/layout.d.ts +6 -6
  65. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  66. package/lib/raydium/liquidity/type.d.ts +1 -1
  67. package/lib/raydium/liquidity/utils.d.ts +1 -1
  68. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  69. package/lib/raydium/marketV2/createMarket.js +1 -1
  70. package/lib/raydium/marketV2/createMarket.js.map +1 -1
  71. package/lib/raydium/marketV2/createMarket.mjs +1 -1
  72. package/lib/raydium/marketV2/createMarket.mjs.map +1 -1
  73. package/lib/raydium/marketV2/index.d.ts +3 -3
  74. package/lib/raydium/marketV2/index.js +1 -1
  75. package/lib/raydium/marketV2/index.js.map +1 -1
  76. package/lib/raydium/marketV2/index.mjs +1 -1
  77. package/lib/raydium/marketV2/index.mjs.map +1 -1
  78. package/lib/raydium/marketV2/instrument.d.ts +1 -0
  79. package/lib/raydium/marketV2/instrument.js +1 -1
  80. package/lib/raydium/marketV2/instrument.js.map +1 -1
  81. package/lib/raydium/marketV2/instrument.mjs +1 -1
  82. package/lib/raydium/marketV2/instrument.mjs.map +1 -1
  83. package/lib/raydium/moduleBase.d.ts +3 -3
  84. package/lib/raydium/raydium.d.ts +3 -3
  85. package/lib/raydium/raydium.js +1 -1
  86. package/lib/raydium/raydium.js.map +1 -1
  87. package/lib/raydium/raydium.mjs +1 -1
  88. package/lib/raydium/raydium.mjs.map +1 -1
  89. package/lib/raydium/token/constant.d.ts +1 -1
  90. package/lib/raydium/token/index.d.ts +1 -1
  91. package/lib/raydium/token/token.d.ts +3 -3
  92. package/lib/raydium/token/type.d.ts +1 -1
  93. package/lib/raydium/token/utils.d.ts +1 -1
  94. package/lib/raydium/tradeV2/index.d.ts +2 -2
  95. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  96. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  97. package/lib/raydium/tradeV2/type.d.ts +2 -2
  98. package/lib/raydium/type.d.ts +1 -1
  99. package/lib/raydium/utils1216/index.d.ts +3 -3
  100. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  101. package/lib/{raydium-94d49791.d.ts → raydium-87764c35.d.ts} +5 -4
  102. package/lib/{type-11af28b1.d.ts → type-91ebce1b.d.ts} +1 -1
  103. package/package.json +1 -1
  104. package/src/raydium/marketV2/createMarket.ts +4 -0
  105. package/src/raydium/marketV2/instrument.ts +14 -4
  106. package/lib/{api-f6d3edc7.d.ts → api-fd862469.d.ts} +5 -5
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var Jc=Object.defineProperty,el=Object.defineProperties;var tl=Object.getOwnPropertyDescriptors;var ci=Object.getOwnPropertySymbols;var ma=Object.prototype.hasOwnProperty,da=Object.prototype.propertyIsEnumerable;var la=(o,e,t)=>e in o?Jc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,R=(o,e)=>{for(var t in e||(e={}))ma.call(e,t)&&la(o,t,e[t]);if(ci)for(var t of ci(e))da.call(e,t)&&la(o,t,e[t]);return o},F=(o,e)=>el(o,tl(e));var Me=(o,e)=>{var t={};for(var n in o)ma.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&ci)for(var n of ci(o))e.indexOf(n)<0&&da.call(o,n)&&(t[n]=o[n]);return t};import nu from"axios";import{PublicKey as ya}from"@solana/web3.js";import{get as gr,set as pa}from"lodash";var nl=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(nl||{}),Ar=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}},wr={},fa={};function me(o){let e=gr(wr,o);if(!e){let t=gr(fa,o);e=new Ar({name:o,logLevel:t}),pa(wr,o,e)}return e}function Yf(o,e){pa(fa,o,e);let t=gr(wr,o);t&&(t.level=e)}import{MINT_SIZE as ol,TOKEN_PROGRAM_ID as il,getTransferFeeConfig as rl,unpackMint as sl}from"@solana/spl-token";var Pr=me("Raydium_accountInfo_util");async function St(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:r=100}=R({batchRequest:!1},t),s=kr(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=kr(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Pr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Pr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ya(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&Pr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function De(o,e,t){let n=await St(o,e.map(i=>i.pubkey),t);return e.map((i,r)=>F(R({},i),{accountInfo:n[r]}))}var al=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(al||{}),oy=1;async function Wn({connection:o,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await De(o,e.map(c=>({pubkey:bt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<ol){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=sl(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);i[c.pubkey.toString()]=F(R({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||il,feeConfig:(a=rl(u))!=null?a:void 0})}return i[ya.default.toBase58()]=i[j.toBase58()],i}import _e from"bn.js";var qn=9e15,cn=1e9,hr="0123456789abcdef",mi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",di="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Tr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-qn,maxE:qn,crypto:!1},wa,Xt,ie=!0,fi="[DecimalError] ",un=fi+"Invalid argument: ",Pa=fi+"Precision limit exceeded",ka=fi+"crypto unavailable",ha="[object Decimal]",et=Math.floor,We=Math.pow,ul=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,cl=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,ll=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ta=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Ct=1e7,ne=7,ml=9007199254740991,dl=mi.length-1,Ir=di.length-1,V={toStringTag:ha};V.absoluteValue=V.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),J(o)};V.ceil=function(){return J(new this.constructor(this),this.e+1,2)};V.clampedTo=V.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(un+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};V.comparedTo=V.cmp=function(o){var e,t,n,i,r=this,s=r.d,a=(o=new r.constructor(o)).d,c=r.s,u=o.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(r.e!==o.e)return r.e>o.e^c<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};V.cosine=V.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=pl(n,Ka(n,t)),n.precision=o,n.rounding=e,J(Xt==2||Xt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};V.cubeRoot=V.cbrt=function(){var o,e,t,n,i,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ie=!1,r=l.s*We(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=Ze(l.d),o=l.e,(r=(o-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=We(t,1/3),o=et((o+1)/3)-(o%3==(o<0?-1:2)),r==1/0?t="5e"+o:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Te(u.plus(l).times(a),u.plus(c),s+2,1),Ze(a.d).slice(0,s)===(t=Ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(J(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(J(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return ie=!0,J(n,o,m.rounding,e)};V.decimalPlaces=V.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-et(this.e/ne))*ne,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};V.dividedBy=V.div=function(o){return Te(this,new this.constructor(o))};V.dividedToIntegerBy=V.divToInt=function(o){var e=this,t=e.constructor;return J(Te(e,new t(o),0,1,1),t.precision,t.rounding)};V.equals=V.eq=function(o){return this.cmp(o)===0};V.floor=function(){return J(new this.constructor(this),this.e+1,3)};V.greaterThan=V.gt=function(o){return this.cmp(o)>0};V.greaterThanOrEqualTo=V.gte=function(o){var e=this.cmp(o);return e==1||e===0};V.hyperbolicCosine=V.cosh=function(){var o,e,t,n,i,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,i=r.d.length,i<32?(o=Math.ceil(i/3),e=(1/bi(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),r=Un(s,1,r.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return J(r,s.precision=t,s.rounding=n,!0)};V.hyperbolicSine=V.sinh=function(){var o,e,t,n,i=this,r=i.constructor;if(!i.isFinite()||i.isZero())return new r(i);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(i.e,i.sd())+4,r.rounding=1,n=i.d.length,n<3)i=Un(r,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/bi(5,o)),i=Un(r,2,i,i,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);o--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,J(i,e,t,!0)};V.hyperbolicTangent=V.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,Te(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};V.inverseCosine=V.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?Kt(t,i,r):new t(0):new t(NaN):e.isZero()?Kt(t,i+4,r).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=Kt(t,i+4,r).times(.5),t.precision=i,t.rounding=r,o.minus(e))};V.inverseHyperbolicCosine=V.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,ie=!1,t=t.times(t).minus(1).sqrt().plus(t),ie=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};V.inverseHyperbolicSine=V.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,ie=!1,t=t.times(t).plus(1).sqrt().plus(t),ie=!0,n.precision=o,n.rounding=e,t.ln())};V.inverseHyperbolicTangent=V.atanh=function(){var o,e,t,n,i=this,r=i.constructor;return i.isFinite()?i.e>=0?new r(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=r.precision,e=r.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?J(new r(i),o,e,!0):(r.precision=t=n-i.e,i=Te(i.plus(1),new r(1).minus(i),t+o,1),r.precision=o+4,r.rounding=1,i=i.ln(),r.precision=o,r.rounding=e,i.times(.5))):new r(NaN)};V.inverseSine=V.asin=function(){var o,e,t,n,i=this,r=i.constructor;return i.isZero()?new r(i):(e=i.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(o=Kt(r,t+4,n).times(.5),o.s=i.s,o):new r(NaN):(r.precision=t+6,r.rounding=1,i=i.div(new r(1).minus(i.times(i)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,i.times(2)))};V.inverseTangent=V.atan=function(){var o,e,t,n,i,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Ir)return s=Kt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Ir)return s=Kt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ne+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(ie=!1,e=Math.ceil(a/ne),n=1,c=u.times(u),s=new l(u),i=u;o!==-1;)if(i=i.times(c),r=s.minus(i.div(n+=2)),i=i.times(c),s=r.plus(i.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===r.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),ie=!0,J(s,l.precision=m,l.rounding=d,!0)};V.isFinite=function(){return!!this.d};V.isInteger=V.isInt=function(){return!!this.d&&et(this.e/ne)>this.d.length-2};V.isNaN=function(){return!this.s};V.isNegative=V.isNeg=function(){return this.s<0};V.isPositive=V.isPos=function(){return this.s>0};V.isZero=function(){return!!this.d&&this.d[0]===0};V.lessThan=V.lt=function(o){return this.cmp(o)<0};V.lessThanOrEqualTo=V.lte=function(o){return this.cmp(o)<1};V.logarithm=V.log=function(o){var e,t,n,i,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)r=!0;else{for(i=t[0];i%10===0;)i/=10;r=i!==1}if(ie=!1,a=m+p,s=an(u,a),n=e?pi(l,a+10):an(o,a),c=Te(s,n,a,1),so(c.d,i=m,d))do if(a+=10,s=an(u,a),n=e?pi(l,a+10):an(o,a),c=Te(s,n,a,1),!r){+Ze(c.d).slice(i+1,i+15)+1==1e14&&(c=J(c,m+1,0));break}while(so(c.d,i+=10,d));return ie=!0,J(c,m,d)};V.minus=V.sub=function(o){var e,t,n,i,r,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return ie?J(o,a,c):o}if(t=et(o.e/ne),l=et(p.e/ne),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ne),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}r=0}for(m&&(e=u,u=d,d=e,o.s=-o.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=Ct-1;--u[i],u[n]+=Ct}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=yi(u,t),ie?J(o,a,c):o):new y(c===3?-0:0)};V.modulo=V.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?J(new n(t),n.precision,n.rounding):(ie=!1,n.modulo==9?(e=Te(t,o.abs(),0,3,1),e.s*=o.s):e=Te(t,o,0,n.modulo,1),e=e.times(o),ie=!0,t.minus(e))};V.naturalExponential=V.exp=function(){return Br(this)};V.naturalLogarithm=V.ln=function(){return an(this)};V.negated=V.neg=function(){var o=new this.constructor(this);return o.s=-o.s,J(o)};V.plus=V.add=function(o){var e,t,n,i,r,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),ie?J(o,a,c):o;if(r=et(m.e/ne),n=et(o.e/ne),u=u.slice(),i=r-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/ne),s=r>s?r+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Ct|0,u[i]%=Ct;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=yi(u,n),ie?J(o,a,c):o};V.precision=V.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(un+o);return t.d?(e=Ia(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};V.round=function(){var o=this,e=o.constructor;return J(new e(o),o.e+1,e.rounding)};V.sine=V.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=yl(n,Ka(n,t)),n.precision=o,n.rounding=e,J(Xt>2?t.neg():t,o,e,!0)):new n(NaN)};V.squareRoot=V.sqrt=function(){var o,e,t,n,i,r,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(ie=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=Ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=et((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(Te(s,r,t+2,1)).times(.5),Ze(r.d).slice(0,t)===(e=Ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(J(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(J(n,c+1,1),o=!n.times(n).eq(s));break}return ie=!0,J(n,c,l.rounding,o)};V.tangent=V.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=Te(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,J(Xt==2||Xt==4?t.neg():t,o,e,!0)):new n(NaN)};V.times=V.mul=function(o){var e,t,n,i,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=et(l.e/ne)+et(o.e/ne),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=r[i]+p[n]*d[i-n-1]+e,r[i--]=a%Ct|0,e=a/Ct|0;r[i]=(r[i]+e)%Ct|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),o.d=r,o.e=yi(r,t),ie?J(o,m.precision,m.rounding):o};V.toBinary=function(o,e){return Sr(this,2,o,e)};V.toDecimalPlaces=V.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(mt(o,0,cn),e===void 0?e=n.rounding:mt(e,0,8),J(t,o+t.e+1,e))};V.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Ft(n,!0):(mt(o,0,cn),e===void 0?e=i.rounding:mt(e,0,8),n=J(new i(n),o+1,e),t=Ft(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toFixed=function(o,e){var t,n,i=this,r=i.constructor;return o===void 0?t=Ft(i):(mt(o,0,cn),e===void 0?e=r.rounding:mt(e,0,8),n=J(new r(i),o+i.e+1,e),t=Ft(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};V.toFraction=function(o){var e,t,n,i,r,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),r=e.e=Ia(y)-p.e-1,s=r%ne,e.d[0]=We(10,s<0?ne+s:s),o==null)o=r>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(un+a);o=a.gt(e)?r>0?e:u:a}for(ie=!1,a=new f(Ze(y)),l=f.precision,f.precision=r=y.length*ne*2;m=Te(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(o)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=Te(o.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=Te(u,n,r,1).minus(p).abs().cmp(Te(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,ie=!0,d};V.toHexadecimal=V.toHex=function(o,e){return Sr(this,16,o,e)};V.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:mt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(ie=!1,t=Te(t,o,0,e,1).times(o),ie=!0,J(t)):(o.s=t.s,t=o),t};V.toNumber=function(){return+this};V.toOctal=function(o,e){return Sr(this,8,o,e)};V.toPower=V.pow=function(o){var e,t,n,i,r,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(We(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,o.eq(1))return J(a,n,r);if(e=et(o.e/ne),e>=o.d.length-1&&(t=u<0?-u:u)<=ml)return i=Ba(c,a,t,n),o.s<0?new c(1).div(i):J(i,n,r);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=We(+a,u),e=t==0||!isFinite(t)?et(u*(Math.log("0."+Ze(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(ie=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Br(o.times(an(a,n+t)),n),i.d&&(i=J(i,n+5,1),so(i.d,n,r)&&(e=n+10,i=J(Br(o.times(an(a,e+t)),e),e+5,1),+Ze(i.d).slice(n+1,n+15)+1==1e14&&(i=J(i,n+1,0)))),i.s=s,ie=!0,c.rounding=r,J(i,n,r))};V.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Ft(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(mt(o,1,cn),e===void 0?e=i.rounding:mt(e,0,8),n=J(new i(n),o,e),t=Ft(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toSignificantDigits=V.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(mt(o,1,cn),e===void 0?e=n.rounding:mt(e,0,8)),J(new n(t),o,e)};V.toString=function(){var o=this,e=o.constructor,t=Ft(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};V.truncated=V.trunc=function(){return J(new this.constructor(this),this.e+1,1)};V.valueOf=V.toJSON=function(){var o=this,e=o.constructor,t=Ft(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function Ze(o){var e,t,n,i=o.length-1,r="",s=o[0];if(i>0){for(r+=s,e=1;e<i;e++)n=o[e]+"",t=ne-n.length,t&&(r+=sn(t)),r+=n;s=o[e],n=s+"",t=ne-n.length,t&&(r+=sn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function mt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(un+o)}function so(o,e,t,n){var i,r,s,a;for(r=o[0];r>=10;r/=10)--e;return--e<0?(e+=ne,i=0):(i=Math.ceil((e+1)/ne),e%=ne),r=We(10,ne-e),a=o[i]%r|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==r||t>3&&a+1==r/2)&&(o[i+1]/r/100|0)==We(10,e-2)-1||(a==r/2||a==0)&&(o[i+1]/r/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==r||!n&&t>3&&a+1==r/2)&&(o[i+1]/r/1e3|0)==We(10,e-3)-1,s}function li(o,e,t){for(var n,i=[0],r,s=0,a=o.length;s<a;){for(r=i.length;r--;)i[r]*=e;for(i[0]+=hr.indexOf(o.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function pl(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/bi(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=Un(o,1,e.times(i),new o(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var Te=function(){function o(n,i,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,i,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<i[r]?1:0,n[r]=a*s+n[r]-i[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,r,s,a,c){var u,l,m,d,p,y,f,b,g,A,w,h,I,T,S,B,C,x,L,W,v=n.constructor,Z=n.s==i.s?1:-1,X=n.d,q=i.d;if(!X||!X[0]||!q||!q[0])return new v(!n.s||!i.s||(X?q&&X[0]==q[0]:!q)?NaN:X&&X[0]==0||!q?Z*0:Z/0);for(c?(p=1,l=n.e-i.e):(c=Ct,p=ne,l=et(n.e/p)-et(i.e/p)),L=q.length,C=X.length,g=new v(Z),A=g.d=[],m=0;q[m]==(X[m]||0);m++);if(q[m]>(X[m]||0)&&l--,r==null?(T=r=v.precision,s=v.rounding):a?T=r+(n.e-i.e)+1:T=r,T<0)A.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<C||d)&&T--;m++)S=d*c+(X[m]||0),A[m]=S/q|0,d=S%q|0;y=d||m<C}else{for(d=c/(q[0]+1)|0,d>1&&(q=o(q,d,c),X=o(X,d,c),L=q.length,C=X.length),B=L,w=X.slice(0,L),h=w.length;h<L;)w[h++]=0;W=q.slice(),W.unshift(0),x=q[0],q[1]>=c/2&&++x;do d=0,u=e(q,w,L,h),u<0?(I=w[0],L!=h&&(I=I*c+(w[1]||0)),d=I/x|0,d>1?(d>=c&&(d=c-1),f=o(q,d,c),b=f.length,h=w.length,u=e(f,w,b,h),u==1&&(d--,t(f,L<b?W:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<h&&f.unshift(0),t(w,f,h,c),u==-1&&(h=w.length,u=e(q,w,L,h),u<1&&(d++,t(w,L<h?W:q,h,c))),h=w.length):u===0&&(d++,w=[0]),A[m++]=d,u&&w[0]?w[h++]=X[B]||0:(w=[X[B]],h=1);while((B++<C||w[0]!==void 0)&&T--);y=w[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,wa=y;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,J(g,a?r+g.e+1:r,s,y)}return g}}();function J(o,e,t,n){var i,r,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(i=1,a=m[0];a>=10;a/=10)i++;if(r=e-i,r<0)r+=ne,s=e,l=m[d=0],c=l/We(10,i-s-1)%10|0;else if(d=Math.ceil((r+1)/ne),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,r%=ne,s=r-ne+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;r%=ne,s=r-ne+i,c=s<0?0:l/We(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%We(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/We(10,i-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=We(10,(ne-e%ne)%ne),o.e=-e||0):m[0]=o.e=0,o;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=We(10,ne-r),m[d]=s>0?(l/We(10,i-s)%We(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(o.e++,m[0]==Ct&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Ct)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return ie&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Ft(o,e,t){if(!o.isFinite())return Sa(o);var n,i=o.e,r=Ze(o.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+sn(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(o.e<0?"e":"e+")+o.e):i<0?(r="0."+sn(-i-1)+r,t&&(n=t-s)>0&&(r+=sn(n))):i>=s?(r+=sn(i+1-s),t&&(n=t-i-1)>0&&(r=r+"."+sn(n))):((n=i+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(r+="."),r+=sn(n))),r}function yi(o,e){var t=o[0];for(e*=ne;t>=10;t/=10)e++;return e}function pi(o,e,t){if(e>dl)throw ie=!0,t&&(o.precision=t),Error(Pa);return J(new o(mi),e,1,!0)}function Kt(o,e,t){if(e>Ir)throw Error(Pa);return J(new o(di),e,t,!0)}function Ia(o){var e=o.length-1,t=e*ne+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function sn(o){for(var e="";o--;)e+="0";return e}function Ba(o,e,t,n){var i,r=new o(1),s=Math.ceil(n/ne+4);for(ie=!1;;){if(t%2&&(r=r.times(e),ga(r.d,s)&&(i=!0)),t=et(t/2),t===0){t=r.d.length-1,i&&r.d[t]===0&&++r.d[t];break}e=e.times(e),ga(e.d,s)}return ie=!0,r}function ba(o){return o.d[o.d.length-1]&1}function xa(o,e,t){for(var n,i=new o(e[0]),r=0;++r<e.length;)if(n=new o(e[r]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Br(o,e){var t,n,i,r,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(ie=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(We(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=J(r.times(o),c,1),t=t.times(++l),a=s.plus(Te(r,t,c,1)),Ze(a.d).slice(0,c)===Ze(s.d).slice(0,c)){for(i=m;i--;)s=J(s.times(s),c,1);if(e==null)if(u<3&&so(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return J(s,d.precision=y,p,ie=!0);else return d.precision=y,s}s=a}}function an(o,e){var t,n,i,r,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,A=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(ie=!1,l=w):l=e,g.precision=l+=y,t=Ze(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=Ze(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return u=pi(g,l+2,w).times(r+""),f=an(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=w,e==null?J(f,w,A,ie=!0):f;for(m=f,c=s=f=Te(f.minus(1),f.plus(1),l,1),d=J(f.times(f),l,1),i=3;;){if(s=J(s.times(d),l,1),u=c.plus(Te(s,new g(i),l,1)),Ze(u.d).slice(0,l)===Ze(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(pi(g,l+2,w).times(r+""))),c=Te(c,new g(p),l,1),e==null)if(so(c.d,l-y,A,a))g.precision=l+=y,u=s=f=Te(m.minus(1),m.plus(1),l,1),d=J(f.times(f),l,1),i=a=1;else return J(c,g.precision=w,A,ie=!0);else return g.precision=w,c;c=u,i+=2}}function Sa(o){return String(o.s*o.s/0)}function xr(o,e){var t,n,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ne,t<0&&(n+=ne),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ne;n<i;)o.d.push(+e.slice(n,n+=ne));e=e.slice(n),n=ne-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),ie&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function fl(o,e){var t,n,i,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ta.test(e))return xr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(cl.test(e))t=16,e=e.toLowerCase();else if(ul.test(e))t=2;else if(ll.test(e))t=8;else throw Error(un+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,i=Ba(n,new n(t),r,r*2)),u=li(e,t,Ct),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(o.s*0):(o.e=yi(u,l),o.d=u,ie=!1,s&&(o=Te(o,i,a*4)),c&&(o=o.times(Math.abs(c)<54?We(2,c):ao.pow(2,c))),ie=!0,o)}function yl(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Un(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/bi(5,t)),e=Un(o,2,e,e);for(var i,r=new o(5),s=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(r.plus(i.times(s.times(i).minus(a))));return e}function Un(o,e,t,n,i){var r,s,a,c,u=1,l=o.precision,m=Math.ceil(l/ne);for(ie=!1,c=t.times(t),a=new o(n);;){if(s=Te(a.times(c),new o(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Te(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return ie=!0,s.d.length=m+1,s}function bi(o,e){for(var t=o;--e;)t*=o;return t}function Ka(o,e){var t,n=e.s<0,i=Kt(o,o.precision,1),r=i.times(.5);if(e=e.abs(),e.lte(r))return Xt=n?4:1,e;if(t=e.divToInt(i),t.isZero())Xt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(r))return Xt=ba(t)?n?2:3:n?4:1,e;Xt=ba(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Sr(o,e,t,n){var i,r,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(mt(t,1,cn),n===void 0?n=p.rounding:mt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=Sa(o);else{for(l=Ft(o),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=li(Ft(d),10,i),d.e=d.d.length),m=li(l,10,i),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(o=new p(o),o.d=m,o.e=r,o=Te(o,d,t,n,0,i),m=o.d,r=o.e,u=wa),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=hr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=li(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=hr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function ga(o,e){if(o.length>e)return o.length=e,!0}function bl(o){return new this(o).abs()}function gl(o){return new this(o).acos()}function Al(o){return new this(o).acosh()}function wl(o,e){return new this(o).plus(e)}function Pl(o){return new this(o).asin()}function kl(o){return new this(o).asinh()}function hl(o){return new this(o).atan()}function Tl(o){return new this(o).atanh()}function Il(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,r=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Kt(this,r,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Kt(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Kt(this,r,1).times(.5),t.s=o.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Te(o,e,r,1)),e=Kt(this,r,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Te(o,e,r,1)),t}function Bl(o){return new this(o).cbrt()}function xl(o){return J(o=new this(o),o.e+1,2)}function Sl(o,e,t){return new this(o).clamp(e,t)}function Kl(o){if(!o||typeof o!="object")throw Error(fi+"Object expected");var e,t,n,i=o.defaults===!0,r=["precision",1,cn,"rounding",0,8,"toExpNeg",-qn,0,"toExpPos",0,qn,"maxE",0,qn,"minE",-qn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],i&&(this[t]=Tr[t]),(n=o[t])!==void 0)if(et(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(un+t+": "+n);if(t="crypto",i&&(this[t]=Tr[t]),(n=o[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(ka);else this[t]=!1;else throw Error(un+t+": "+n);return this}function Cl(o){return new this(o).cos()}function Rl(o){return new this(o).cosh()}function Ca(o){var e,t,n;function i(r){var s,a,c,u=this;if(!(u instanceof i))return new i(r);if(u.constructor=i,Aa(r)){u.s=r.s,ie?!r.d||r.e>i.maxE?(u.e=NaN,u.d=null):r.e<i.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;ie?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return xr(u,r.toString())}else if(c!=="string")throw Error(un+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),Ta.test(r)?xr(u,r):fl(u,r)}if(i.prototype=V,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Kl,i.clone=Ca,i.isDecimal=Aa,i.abs=bl,i.acos=gl,i.acosh=Al,i.add=wl,i.asin=Pl,i.asinh=kl,i.atan=hl,i.atanh=Tl,i.atan2=Il,i.cbrt=Bl,i.ceil=xl,i.clamp=Sl,i.cos=Cl,i.cosh=Rl,i.div=Ll,i.exp=Ol,i.floor=Ml,i.hypot=Nl,i.ln=_l,i.log=vl,i.log10=El,i.log2=Vl,i.max=Fl,i.min=Dl,i.mod=Wl,i.mul=ql,i.pow=Ul,i.random=Gl,i.round=Xl,i.sign=zl,i.sin=Ql,i.sinh=Yl,i.sqrt=jl,i.sub=Hl,i.sum=Zl,i.tan=$l,i.tanh=Jl,i.trunc=em,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function Ll(o,e){return new this(o).div(e)}function Ol(o){return new this(o).exp()}function Ml(o){return J(o=new this(o),o.e+1,3)}function Nl(){var o,e,t=new this(0);for(ie=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return ie=!0,new this(1/0);t=e}return ie=!0,t.sqrt()}function Aa(o){return o instanceof ao||o&&o.toStringTag===ha||!1}function _l(o){return new this(o).ln()}function vl(o,e){return new this(o).log(e)}function Vl(o){return new this(o).log(2)}function El(o){return new this(o).log(10)}function Fl(){return xa(this,arguments,"lt")}function Dl(){return xa(this,arguments,"gt")}function Wl(o,e){return new this(o).mod(e)}function ql(o,e){return new this(o).mul(e)}function Ul(o,e){return new this(o).pow(e)}function Gl(o){var e,t,n,i,r=0,s=new this(1),a=[];if(o===void 0?o=this.precision:mt(o,1,cn),n=Math.ceil(o/ne),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)i=e[r],i>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)i=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(i%1e7),r+=4);r=n/4}else throw Error(ka);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],o%=ne,n&&o&&(i=We(10,ne-o),a[r]=(n/i|0)*i);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ne)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ne&&(t-=ne-n)}return s.e=t,s.d=a,s}function Xl(o){return J(o=new this(o),o.e+1,this.rounding)}function zl(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function Ql(o){return new this(o).sin()}function Yl(o){return new this(o).sinh()}function jl(o){return new this(o).sqrt()}function Hl(o,e){return new this(o).sub(e)}function Zl(){var o=0,e=arguments,t=new this(e[o]);for(ie=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return ie=!0,J(t,this.precision,this.rounding)}function $l(o){return new this(o).tan()}function Jl(o){return new this(o).tanh()}function em(o){return J(o=new this(o),o.e+1,1)}V[Symbol.for("nodejs.util.inspect.custom")]=V.toString;V[Symbol.toStringTag]="Decimal";var ao=V.constructor=Ca(Tr);mi=new ao(mi);di=new ao(di);var O=ao;import am from"big.js";import ln from"bn.js";import tm from"toformat";var nm=tm,uo=nm;import Ai from"big.js";import om from"bn.js";import im from"decimal.js-light";import co from"bn.js";var Kr=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(Kr||{}),Ra=9007199254740991;function H(o){let e=me("Raydium_parseBigNumberish");if(o instanceof co)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new co(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Ra||o<=-Ra)&&e.logWithError(`BigNumberish number overflow: ${o}`),new co(String(o))):typeof o=="bigint"?new co(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new co(0))}var gi=me("module/fraction"),Cr=uo(Ai),lo=uo(im),rm={[0]:lo.ROUND_DOWN,[1]:lo.ROUND_HALF_UP,[2]:lo.ROUND_UP},sm={[0]:Ai.roundDown,[1]:Ai.roundHalfUp,[2]:Ai.roundUp},re=class{constructor(e,t=new om(1)){this.numerator=H(e),this.denominator=H(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new re(this.denominator,this.numerator)}add(e){let t=e instanceof re?e:new re(H(e));return this.denominator.eq(t.denominator)?new re(this.numerator.add(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof re?e:new re(H(e));return this.denominator.eq(t.denominator)?new re(this.numerator.sub(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof re?e:new re(H(e));return new re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof re?e:new re(H(e));return new re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||gi.logWithError(`${e} is not an integer.`),e<=0&&gi.logWithError(`${e} is not positive.`),lo.set({precision:e+1,rounding:rm[n]});let i=new lo(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||gi.logWithError(`${e} is not an integer.`),e<0&&gi.logWithError(`${e} is negative.`),Cr.DP=e,Cr.RM=sm[n]||1,new Cr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var um=me("Raydium_amount"),wi=uo(am);function La(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):um.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var be=class extends re{constructor(t,n,i=!0,r){let s=new ln(0),a=Pn.pow(new ln(t.decimals));if(i)s=H(n);else{let c=new ln(0),u=new ln(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=La(n.toString(),t.decimals);c=H(l),u=H(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"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 be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return wi.DP=this.token.decimals,new wi(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},wn=class extends re{constructor(t,n,i=!0,r){let s=new ln(0),a=Pn.pow(new ln(t.decimals));if(i)s=H(n);else{let c=new ln(0),u=new ln(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=La(n.toString(),t.decimals);c=H(l),u=H(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new wn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new wn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return wi.DP=this.currency.decimals,new wi(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as cm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Oa}from"@solana/spl-token";var Dt={chainId:101,address:cm.default.toBase58(),programId:Oa.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},qe={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Oa.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Nr}from"@solana/web3.js";import{PublicKey as Se,SystemProgram as Ma,SYSVAR_RENT_PUBKEY as lm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mm}from"@solana/spl-token";function k({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Rr=[k({pubkey:mm,isWritable:!1}),k({pubkey:Ma.programId,isWritable:!1}),k({pubkey:lm,isWritable:!1})];function Lr({publicKey:o,transformSol:e}){let t=Or(o.toString());if(t instanceof Se)return e&&t.equals(Ue)?j:t;if(e&&t.toString()===Ue.toBase58())return j;if(typeof t=="string"){if(t===Se.default.toBase58())return Se.default;try{return new Se(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Or(o){try{return new Se(o)}catch{return o}}var Pi=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),mn=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Se("SysvarRent111111111111111111111111111111111"),Mr=new Se("SysvarC1ock11111111111111111111111111111111"),zt=new Se("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),ki=new Se("Sysvar1nstructions1111111111111111111111111"),hi=Ma.programId,vy=new Se("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Vy=new Se("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Ey=new Se("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Fy=new Se("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Dy=new Se("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Wy=new Se("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),qy=new Se("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Uy=new Se("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Gy=new Se("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Xy=new Se("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),zy=new Se("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Se("So11111111111111111111111111111111111111112"),Ue=Se.default;function bt(o){return Lr({publicKey:o,transformSol:!0})}var _r=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:r=!1,isToken2022:s=!1}){if(e===Ue.toBase58()||e instanceof Nr&&Ue.equals(e)){this.decimals=qe.decimals,this.symbol=qe.symbol,this.name=qe.name,this.mint=new Nr(qe.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=r?Nr.default:Lr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},we=_r;we.WSOL=new _r(F(R({},qe),{mint:qe.address}));var vr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},mo=vr;mo.SOL=new vr(Dt);function tb(o,e){return o instanceof we&&e instanceof we?o.equals(e):o instanceof we||e instanceof we?!1:o===e}import dm from"bn.js";var Na=new re(new dm(100)),Ce=class extends re{toSignificant(e=5,t,n){return this.mul(Na).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Na).toFixed(e,t,n)}};var pm=me("Raydium_price"),Qe=class extends re{constructor(t){let{baseToken:n,quoteToken:i,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=i,this.scalar=new re(Vr(n.decimals),Vr(i.decimals))}get raw(){return new re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Qe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&pm.logWithError("mul token not equals");let n=super.mul(t);return new Qe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};function Ne(o){if(o instanceof Ce)return new re(o.numerator,o.denominator);if(o instanceof Qe)return o.adjusted;if(o instanceof be)try{return Ne(o.toExact())}catch{return new re(Ge)}if(o instanceof re)return o;let e=String(o),t=kn(e);return new re(t.numerator,t.denominator)}function hb(o){var n;if(o instanceof Ce)return{fr:new re(o.numerator,o.denominator)};if(o instanceof Qe)return{fr:o.adjusted};if(o instanceof be)return{fr:Ne(o.toExact()),decimals:o.token.decimals};if(o instanceof re)return{fr:o};let e=String(o),t=kn(e);return{fr:new re(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Tb(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Ge)}function fm(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.gt(Ge)}function Ib(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.lte(Ge)}function Bb(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.gte(Ge)}function ym(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.eq(Ge)}function xb(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);try{return t.div(n)}catch{return t}}function Sb(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);return t.sub(n)}function Kb(o){return o==null?!1:!ym(o,0)}function Cb(o,e){return fm(e,o)?e:o}function Er(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);return t.mul(n)}function Rb(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);return t.add(n)}import{PublicKey as bm}from"@solana/web3.js";import gm from"bn.js";async function _a(o){new Promise(e=>setTimeout(e,o))}function vb(){return new Date().getTime()}function Fr(o){return typeof o=="object"&&o!==null&&![we,be,bm,re,gm,Qe,Ce].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?Or(o):Array.isArray(o)?o.map(e=>Ie(e)):Fr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}var Ge=new _e(0),Ea=new _e(1),jb=new _e(2),Hb=new _e(3),Zb=new _e(5),Pn=new _e(10),$b=new _e(100),Jb=new _e(1e3),eg=new _e(1e4);function Vr(o){return Pn.pow(H(o))}function kn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof _e)return{numerator:o.toString(),denominator:"1"};if(o instanceof re)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:i}}function Ti(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Am(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function wm(o,e=0){return o instanceof _e?o:new _e(Am(Fa(o).mul(Pn.pow(new _e(String(e))))))}function Fa(o){if(o instanceof Ce)return new re(o.numerator,o.denominator);if(o instanceof Qe)return o.adjusted;if(o instanceof be)try{return Fa(o.toExact())}catch{return new re(Ge)}if(o instanceof re)return o;let e=String(o),t=kn(e);return new re(t.numerator,t.denominator)}function tg(o,e){let{numerator:t,denominator:n}=kn(o);return new Ce(new _e(t),new _e(n).mul(e!=null&&e.alreadyDecimaled?new _e(100):new _e(1)))}function ng(o){let{token:e,numberPrice:t,decimalDone:n}=o,i=new we({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=kn(t),a=n?new _e(r).mul(Pn.pow(new _e(e.decimals))):r,c=new _e(s).mul(Pn.pow(new _e(i.decimals)));return new Qe({baseToken:i,denominator:c.toString(),quoteToken:new we(F(R({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function va(o){let e=new mo({decimals:6,symbol:"usd",name:"usd"}),t=wm(Er(o,10**e.decimals));return new wn(e,t)}function og(o,e){return va(!e||!o?0:Er(o,e))}function Pm(o){if(o==null)return;let{numerator:e,denominator:t}=kn(o.toString());return new re(e,t)}function km(o){return o instanceof O}function Va(o){return km(o)?Pm(o):Array.isArray(o)?o.map(e=>Va(e)):Fr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Va(t)])):o}var Da=o=>typeof o=="number",Wa=o=>o?new Date(o):new Date,hm=o=>Wa(o).getTime();function qa(o,e,t){let n=Da(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function Ua(o,e,t){let n=Da(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function rg(o,e){let n=hm(o)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return Wa(n)}function kr(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function ag(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function ug(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function cg(o){return[...new Set(o)]}var Rt=class{constructor(e){this._owner=e}get publicKey(){return Rt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Rt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Rt.isKeyPair(this._owner)}get isPublicKey(){return Rt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Rt.isKeyPair(e)}};import{PublicKey as Sm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Km}from"@solana/spl-token";import{ComputeBudgetProgram as Ga,Keypair as Xa,PublicKey as za,Transaction as Bi,TransactionMessage as Tm,VersionedTransaction as Dr}from"@solana/web3.js";var hn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(hn||{}),E={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",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"};import{TOKEN_PROGRAM_ID as Im}from"@solana/spl-token";var Qt=me("Raydium_txUtil"),Qa=1644;function xi(o){let e=[],t=[];return o.microLamports&&(e.push(Ga.setComputeUnitPrice({microLamports:o.microLamports})),t.push(E.SetComputeUnitPrice)),o.units&&(e.push(Ga.setComputeUnitLimit({units:o.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Gn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function Si(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,r=>{if(clearTimeout(i),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function Ki(o,e){o.length<1&&Qt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Qt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Bi;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Qa}catch{return!1}}async function Ya(o,e,t,n=!0){let i=new za("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Bi;s.feePayer=i;for(let u of e)Ki([...s.instructions,u],[i])||(r.push(s),s=new Bi,s.feePayer=i),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await Bm(o,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Qt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Qt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Qt.debug("filteredLog:",c),l.length||Qt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function ja(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Qt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Yt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Qt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function se(o,e){let[t,n]=za.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function Bm(o,e,t){let n=[];if(t){let i=await o.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=i.blockhash,u.lastValidBlockHeight=i.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=o._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await o.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Qt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function po({instructions:o,payer:e,signers:t}){return Ki(o,[e,...t])}function fo({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Xa.generate().publicKey.toString()}){let r=new Tm({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Dr(r).serialize()).toString("base64").length<Qa}catch{return!1}}var Ii={time:0,data:void 0};async function hg(o){if(!Ii.data||(Date.now()-Ii.time)/1e3>30){let e=await o.getEpochInfo();return Ii={time:Date.now(),data:e},e}else return Ii.data}var Ha=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),xm=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Dr&&(e=Ha(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Tn(o){let e=[];return o.forEach(t=>{t instanceof Bi&&(t.recentBlockhash||(t.recentBlockhash=Im.toBase58()),t.feePayer||(t.feePayer=Xa.generate().publicKey)),e.push(xm(t))}),console.log("simulate tx string:",e),e}function Tg(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof Dr&&(e=Ha(e)),e.toString("base64")}function le(o,e,t){return se([o.toBuffer(),(t!=null?t:Km).toBuffer(),e.toBuffer()],new Sm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ue}from"@solana/web3.js";var Wr=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),qr=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Cm=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Rm=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ci=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Ur=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Lm=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Za=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),In=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),zn=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),yo=new ue("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Om=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Rg=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Mm=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Nm=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),_m=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),vm=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),bo=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Gr=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Vm=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Em=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Fm=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Dm=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),go=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Wm=new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),Ao=new ue("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),qm=new ue("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),wo={IDO_PROGRAM_ID_V1:Mm,IDO_PROGRAM_ID_V2:Nm,IDO_PROGRAM_ID_V3:_m,IDO_PROGRAM_ID_V4:vm},Lg={AMM_V4:Ur,AMM_STABLE:Lm,CLMM_PROGRAM_ID:In,CLMM_LOCK_PROGRAM_ID:zn,CLMM_LOCK_AUTH_ID:yo,FARM_PROGRAM_ID_V3:Wr,FARM_PROGRAM_ID_V5:qr,FARM_PROGRAM_ID_V6:Xn,OPEN_BOOK_PROGRAM:Rm,SERUM_PROGRAM_ID_V3:Ci,UTIL1216:Cm,Router:Om,CREATE_CPMM_POOL_PROGRAM:bo,CREATE_CPMM_POOL_AUTH:Gr,CREATE_CPMM_POOL_FEE_ACC:Vm,LOCK_CPMM_PROGRAM:go,LOCK_CPMM_AUTH:Ao},Og={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ue("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Em,CREATE_CPMM_POOL_AUTH:Fm,CREATE_CPMM_POOL_FEE_ACC:Dm,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Wm,LCOK_CPMM_AUTH:qm};import Ve from"bn.js";var Wt=1e4;function _g(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new Ve(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Wt){let a=new Ve(i.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=Lt(o.mul(new Ve(Wt)),new Ve(Wt-i.transferFeeBasisPoints)),c=new Ve(i.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=Lt(u.mul(new Ve(i.transferFeeBasisPoints)),new Ve(Wt)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=Lt(o.mul(new Ve(i.transferFeeBasisPoints)),new Ve(Wt)),c=a.gt(r)?r:a;return{amount:o,fee:c,expirationTime:s}}}function ge(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=F(R({},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}}),r=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Ve(r.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Wt){let c=new Ve(r.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=Lt(o.mul(new Ve(Wt)),new Ve(Wt-r.transferFeeBasisPoints)),u=new Ve(r.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=Lt(l.mul(new Ve(r.transferFeeBasisPoints)),new Ve(Wt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Lt(o.mul(new Ve(r.transferFeeBasisPoints)),new Ve(Wt)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Ot(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function Lt(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Ve(0))?t.add(new Ve(1)):t}import{PublicKey as $a,AddressLookupTableAccount as Ri}from"@solana/web3.js";async function Xr({connection:o,address:e}){let t=await St(o,[...new Set(e.map(i=>i.toString()))].map(i=>new $a(i))),n={};for(let i=0;i<e.length;i++){let r=t[i],s=e[i];if(!r)continue;let a=new Ri({key:s,state:Ri.deserialize(r.data)});n[s.toString()]=a,Li[s.toString()]=a}return n}var Li={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Ri({key:new $a("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Ri.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as Po,sendAndConfirmTransaction as zr,Transaction as ko,TransactionMessage as ho,VersionedTransaction as To}from"@solana/web3.js";import Um from"axios";var Oi=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.api=e.api}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 Um.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}=xi(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:i=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==Po.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(R({},t||{})):this.build(t)}build(e){var n;let t=new ko;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async i=>{var u;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=i||{},c=r!=null?r:await Gn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),Tn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await zr(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Gn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let A of s){let w=await zr(this.connection,A,this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((w,h)=>(w.recentBlockhash=f,a[h].length&&w.sign(...a[h]),w));Tn(g);let A=await this.signAllTransactions(g);if(m){let w=0,h=[],I=async()=>{if(!A[w])return;let T=await this.connection.sendRawTransaction(A[w].serialize(),{skipPreflight:y});h.push({txId:T,status:"sent",signedTx:A[w]}),d==null||d([...h]),w++,this.connection.onSignature(T,S=>{let B=h.findIndex(C=>C.txId===T);B>-1&&(h[B].status=S.err?"error":"success"),d==null||d([...h]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:h.map(T=>T.txId),signedTxs:A}}else{let w=[];for(let h=0;h<A.length;h+=1){let I=await this.connection.sendRawTransaction(A[h].serialize(),{skipPreflight:y});w.push(I)}return{txIds:w,signedTxs:A}}}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 f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:r}=y,s=Me(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=R(R({},this.cluster==="devnet"?{}:Li),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Po(b));let l=await Xr({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?Po.default.toBase58():r!=null?r:await Gn(this.connection,this.blockhashCommitment),d=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new To(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var w;let{skipPreflight:g=!0,sendAndConfirm:A}=b||{};if(Tn([p]),(w=this.owner)!=null&&w.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await Si(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Tn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:y});await Si(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],w=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:y});A.push({txId:h,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++,this.connection.onSignature(h,I=>{let T=A.findIndex(S=>S.txId===h);T>-1&&(A[T].status=I.err?"error":"success"),d==null||d([...A]),I.err||w()},"processed"),this.connection.getSignatureStatus(h)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let w=await this.connection.sendTransaction(b[A],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Me(u,["computeBudgetConfig"]),i=t?xi(t):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,d)=>F(R({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...i.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Po(b));if(c.length<12&&po({instructions:p,payer:this.feePayer,signers:f})||po({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");po({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new ko().add(...i.instructions,...c)):s.push(new ko().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>r[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>r[p]).filter(p=>p!==void 0);po({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new ko().add(...i.instructions,...c)):s.push(new ko().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Gn(this.connection,this.blockhashCommitment);if(s.forEach(async(A,w)=>{A.recentBlockhash=b,a[w].length&&A.sign(...a[w])}),Tn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let A=[];for(let w of s){let h=await zr(this.connection,w,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(h)}return{txIds:A,signedTxs:s}}return{txIds:await Promise.all(s.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let A=await this.signAllTransactions(s);if(d){let w=0,h=[],I=async()=>{if(!A[w])return;let T=await this.connection.sendRawTransaction(A[w].serialize(),{skipPreflight:f});h.push({txId:T,status:"sent",signedTx:A[w]}),p==null||p([...h]),w++,this.connection.onSignature(T,S=>{let B=h.findIndex(C=>C.txId===T);B>-1&&(h[B].status=S.err?"error":"success"),p==null||p([...h]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:h.map(T=>T.txId),signedTxs:A}}else{let w=[];for(let h=0;h<A.length;h+=1){let I=await this.connection.sendRawTransaction(A[h].serialize(),{skipPreflight:f});w.push(I)}return{txIds:w,signedTxs:A}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,r=Me(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=R(R({},this.cluster==="devnet"?{}:Li),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),c=[];for(let A of a)s[A]===void 0&&c.push(new Po(A));let u=await Xr({connection:this.connection,address:c});for(let[A,w]of Object.entries(u))s[A]=w;let l=t?xi(t):{instructions:[],instructionTypes:[]},m=await Gn(this.connection,this.blockhashCommitment),d=this.signers.reduce((A,w)=>F(R({},A),{[w.publicKey.toBase58()]:w}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(A=>{let w=[...f,A],h=t?[...l.instructions,...w]:w;if(f.length<12&&fo({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s})||fo({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(A);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&fo({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new To(T))}else{let T=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new To(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[A]}}),f.length>0){let w=[...new Set(f.map(h=>h.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(h=>d[h]).filter(h=>h!==void 0);if(t&&fo({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new To(h))}else{let h=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new To(h))}y.push(w)}return(g=this.owner)!=null&&g.signer&&y.forEach(A=>{A.some(w=>w.publicKey.equals(this.owner.publicKey))||A.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async A=>{var S;let{sequentially:w,onTxUpdate:h,recentBlockHash:I,skipPreflight:T=!0}=A||{};if(p.map(async(B,C)=>{y[C].length&&B.sign(y[C]),I&&(B.message.recentBlockhash=I)}),Tn(p),(S=this.owner)!=null&&S.isKeyPair){if(w){let B=[];for(let C of p){let x=await this.connection.sendTransaction(C,{skipPreflight:T});await Si(this.connection,x),B.push(x)}return{txIds:B,signedTxs:p}}return{txIds:await Promise.all(p.map(async B=>await this.connection.sendTransaction(B,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let B=await this.signAllTransactions(p);if(w){let C=0,x=[],L=async()=>{if(!B[C])return;let W=await this.connection.sendTransaction(B[C],{skipPreflight:T});x.push({txId:W,status:"sent",signedTx:B[C]}),h==null||h([...x]),C++,this.connection.onSignature(W,v=>{let Z=x.findIndex(X=>X.txId===W);Z>-1&&(x[Z].status=v.err?"error":"success"),h==null||h([...x]),v.err||L()},"processed"),this.connection.getSignatureStatus(W)};return L(),{txIds:[],signedTxs:B}}else{let C=[];for(let x=0;x<B.length;x+=1){let L=await this.connection.sendTransaction(B[x],{skipPreflight:T});C.push(L)}return{txIds:C,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};var Ja=(t=>(t.ALL="all",t.Strict="strict",t))(Ja||{}),eu=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(eu||{});var ve={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},gA=R({},ve);var tu="ray_tab_hash",Qr="ray_req_hash",Gm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(tu);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(tu,o)),o},Mi=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=Me(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(Qr)||"[]").slice(0,o-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(F(R({},t),{time:Date.now(),session:Gm()}));try{localStorage.setItem(Qr,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Qr,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Mi(F(R({},t),{logCount:o,removeLastLog:!0}))}};var Qn=me("Raydium_Api"),Yr=new Map;async function EA(o,e,t=1e3){let n;for(;n==null;)try{Qn.debug(`Request ${o} through endlessRetry`),n=await e()}catch(i){Qn.error(`Request ${o} failed, retry after ${t} ms`,i),await _a(t)}return n}var Ni=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=i||1e3,this.api=nu.create({baseURL:this.urlConfigs.BASE_HOST||ve.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Qn.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Qn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&Mi({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Qn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Mi({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Qn.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||ve.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||ve.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||ve.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await nu.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,r)=>i+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||ve.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||ve.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||ve.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||ve.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||ve.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||ve.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||ve.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Yr.has(s)?(n.push(Yr.get(s)),!1):!0),r=[];return i.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||ve.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),r.forEach(a=>{Yr.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&bt(t).toBase58(),n&&n!=="undefined"?bt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||ve.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||ve.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||ve.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||ve.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||ve.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||ve.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||ve.JITO})).data}};import{merge as Xf}from"lodash";var _i="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ou="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Wi,SystemProgram as ep}from"@solana/web3.js";import{AccountLayout as Hn,createAssociatedTokenAccountInstruction as us,TOKEN_PROGRAM_ID as yn,TOKEN_2022_PROGRAM_ID as tp}from"@solana/spl-token";var jr=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=me(t)}createTxBuilder(e){return this.scope.checkOwner(),new Oi({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(jr(e))}logInfo(...e){this.logger.info(jr(e))}logAndCreateError(...e){let t=jr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Yd,SystemProgram as jd}from"@solana/web3.js";import Hd from"bn.js";import{createCloseAccountInstruction as Zd,createInitializeAccountInstruction as $d,createTransferInstruction as Jd,TOKEN_PROGRAM_ID as jn}from"@solana/spl-token";import{Keypair as Gd,PublicKey as wu}from"@solana/web3.js";import Xd from"bn.js";import{TOKEN_PROGRAM_ID as zd}from"@solana/spl-token";function Xm(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Hr(o,...e){if(!Xm(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function Zr(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function iu(o,e){Hr(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Vi=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Mt=(o,e)=>o<<32-e|o>>>e;var $A=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function zm(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function $r(o){return typeof o=="string"&&(o=zm(o)),Hr(o),o}var vi=class{clone(){return this._cloneInto()}},JA={}.toString;function ru(o){let e=n=>o().update($r(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Qm(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),r=BigInt(4294967295),s=Number(t>>i&r),a=Number(t&r),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var su=(o,e,t)=>o&e^~o&t,au=(o,e,t)=>o&e^o&t^e&t,Ei=class extends vi{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Vi(this.buffer)}update(e){Zr(this);let{view:t,buffer:n,blockLen:i}=this;e=$r(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(i-this.pos,r-s);if(a===i){let c=Vi(e);for(;i<=r-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Zr(this),iu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Qm(n,i-8,BigInt(this.length*8),r),this.process(n,0);let a=Vi(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:r,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=r,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Ym=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),pn=new Uint32Array(64),Jr=class extends Ei{constructor(){super(64,32,8,!1),this.A=dn[0]|0,this.B=dn[1]|0,this.C=dn[2]|0,this.D=dn[3]|0,this.E=dn[4]|0,this.F=dn[5]|0,this.G=dn[6]|0,this.H=dn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:r,F:s,G:a,H:c}=this;return[e,t,n,i,r,s,a,c]}set(e,t,n,i,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=r|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)pn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=pn[m-15],p=pn[m-2],y=Mt(d,7)^Mt(d,18)^d>>>3,f=Mt(p,17)^Mt(p,19)^p>>>10;pn[m]=f+pn[m-7]+y+pn[m-16]|0}let{A:n,B:i,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Mt(a,6)^Mt(a,11)^Mt(a,25),p=l+d+su(a,c,u)+Ym[m]+pn[m]|0,f=(Mt(n,2)^Mt(n,13)^Mt(n,22))+au(n,i,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,i,r,s,a,c,u,l)}roundClean(){pn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var uu=ru(()=>new Jr);import{PublicKey as Dd}from"@solana/web3.js";import yu,{isBN as bu}from"bn.js";import{bits as jm,BitStructure as Hm,blob as Zm,Blob as $m,cstr as Jm,f32 as ed,f32be as td,f64 as nd,f64be as od,greedy as id,Layout as rd,ns64 as sd,ns64be as ad,nu64 as ud,nu64be as cd,offset as ld,s16 as md,s16be as dd,s24 as pd,s24be as fd,s32 as yd,s32be as bd,s40 as gd,s40be as Ad,s48 as wd,s48be as Pd,s8 as kd,seq as hd,struct as uw,Structure as Td,u16 as Id,u16be as Bd,u24 as xd,u24be as Sd,u32 as Kd,u32be as Cd,u40 as Rd,u40be as Ld,u48 as Od,u48be as Md,u8 as Nd,UInt as _d,union as vd,Union as Vd,unionLayoutDiscriminator as Ed,utf8 as Fd}from"@solana/buffer-layout";var Io=rd,cu=Td,lu=Vd,cw=Hm,es=_d,mu=$m,lw=id,Fi=Nd,jt=Id,mw=xd,Bo=Kd,dw=Rd,pw=Od,du=ud,fw=Bd,yw=Sd,bw=Cd,gw=Ld,Aw=Md,ww=cd,Pw=kd,kw=md,hw=pd,$e=yd,Tw=gd,Iw=wd,Bw=sd,xw=dd,Sw=fd,Kw=bd,Cw=Ad,Rw=Pd,Lw=ad,Ow=ed,Mw=td,Nw=nd,_w=od;var pu=hd,fu=vd,vw=Ed,Ae=Zm,Vw=Jm,Ew=Fd,ts=jm,ns=ld;var Bn=class extends Io{constructor(t,n,i){super(t,i);this.blob=Ae(t),this.signed=n}decode(t,n=0){let i=new yu(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new yu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},Di=class extends Io{constructor(t){super(8,t);this._lower=ts(Bo(),!1),this._upper=ts(Bo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return R(R({},i),r)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function D(o){return new es(1,o)}function Je(o){return new es(4,o)}function P(o){return new Bn(8,!1,o)}function ee(o){return new Bn(16,!1,o)}function gu(o){return new Bn(1,!0,o)}function Yn(o){return new Bn(8,!0,o)}function Au(o){return new Bn(16,!0,o)}var Ht=class extends Io{constructor(t,n,i,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new Ht(Ae(32),e=>new Dd(e),e=>e.toBuffer(),o)}var os=class extends Io{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=Fi()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Uw(o,e){return new os(o,e)}function Ee(o){return new Ht(Fi(),Wd,qd,o)}function Wd(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function qd(o){return o?1:0}function Gw(o,e){let t=Bo("length"),n=_([t,Q(o,ns(t,-t.span),"values")]);return new Ht(n,({values:i})=>i,i=>({values:i}),e)}function Xw(o,e,t){let n=_([P("tag"),e.replicate("data")]);function i({tag:r,data:s}){if(!r.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+r.toString("hex"));return s}return new Ht(n,i,r=>({tag:o,data:r}),t)}function Ud(o){let e=Bo("length"),t=_([e,Ae(ns(e,-e.span),"data")]);return new Ht(t,({data:n})=>n,n=>({data:n}),o)}function zw(o){return new Ht(Ud(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function Qw(o,e){let t=fu(Fi(),e);return o.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function Yw(o,e,t){let n=_([Q(o,e,"values")]);return new Ht(n,({values:i})=>i,i=>({values:i}),t)}var is=class extends cu{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new is(o,e,t)}var rs=class extends lu{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function jw(o,e,t){return new rs(o,e,t)}var ss=class extends mu{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function Hw(o){return new ss(o)}function Q(o,e,t){let n,i=typeof e=="number"?e:bu(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=bu(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return pu(o,i,t)}var fn=_([K("mint"),K("owner"),P("amount"),Je("delegateOption"),K("delegate"),D("state"),Je("isNativeOption"),P("isNative"),P("delegatedAmount"),Je("closeAuthorityOption"),K("closeAuthority")]);var lP=me("Raydium_Util");function Pu({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:r,account:s}of t.value){let a=fn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:le(o,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),i.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:wu.default,amount:new Xd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function dt({fromPublicKey:o,programId:e=zd}){let t=Gd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Qd(o,t,e),seed:t}}function Qd(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=uu(n);return new wu(i)}function as(o){let{mint:e,tokenAccount:t,owner:n,programId:i=jn}=o;return $d(t,e,n,i)}function Zt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:r=jn}=o;return Zd(e,t,i,n,r)}async function $t(o){let{connection:e,amount:t,commitment:n,payer:i,owner:r,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(fn.span,n),c=H(t).add(new Hd(a)),u=dt({fromPublicKey:i,programId:jn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[jd.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:fn.span,programId:jn}),as({mint:new Yd(qe.address),tokenAccount:u.publicKey,owner:r,programId:jn})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[Zt({tokenAccount:u.publicKey,payer:i,owner:r})]}}function ku({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:r=jn}){return Jd(o,e,t,BigInt(String(n)),i,r)}var xo=class extends Ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return le(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=R(R({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:yn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:tp},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Pu({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=yn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let r=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of r){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Wi(t.tokenProgram||yn),m=this.getAssociatedTokenAccount(n,new Wi(l)),d=(a?[]:this.tokenAccountRawInfos).filter(A=>A.accountInfo.mint.equals(n)&&(!r||A.pubkey.equals(m))).sort((A,w)=>A.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let A=us(s,m,s,n,l);if(u){let w=await this.scope.connection.getAccountInfo(m);if(w===null)(y=p.instructions)==null||y.push(A),p.instructionTypes.push(E.CreateATA);else if(!(w.owner.equals(l)&&Hn.decode(w.data).mint.equals(n)&&Hn.decode(w.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(A),p.instructionTypes.push(E.CreateATA);if(n.equals(j)&&i.amount){let w=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),i.amount&&(p.instructions.push(ku({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:yn})),p.instructionTypes.push(E.TransferAmount))}return c||(p.endInstructions.push(Zt({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:m,instructionParams:p}}else{let A=dt({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Hn.span),h=ep.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:A.seed,newAccountPubkey:A.publicKey,lamports:w+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:Hn.span,programId:l});return p.instructions.push(h,as({mint:n,tokenAccount:A.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),c||(p.endInstructions.push(Zt({owner:s,payer:i.payer||s,tokenAccount:A.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:A.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=yn,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let r=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!r){let u=this.getAssociatedTokenAccount(t,n),l=await us(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],r=u}return i&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Zt({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:r,programId:s=yn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new Wi(j).equals(r)){let p=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return R({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=us(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(yn)&&Hn.decode(f.data).mint.equals(r)&&Hn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=yn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Wi(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Me(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Me(m,["tokenAccount"]);c=d,u.addInstruction(p)}return R({tokenAccount:c},u.AllTxData)}};import{PublicKey as Pe,SystemProgram as hp}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Tp}from"@solana/spl-token";import{PublicKey as Ku}from"@solana/web3.js";var cs=_([D("instruction")]),ls=_([D("instruction")]),np=_([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),ee("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),op=_([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),ee("perShareReward"),P("lastSlot"),P("perSlotReward")]),ip=_([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),ee("perShareRewardA"),P("perSlotRewardA"),D("option"),K("rewardVaultB"),Ae(7),P("totalRewardB"),ee("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),rp=_([P(),P("state"),P("nonce"),P("validRewardTokenNum"),ee("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),Q(np,5,"rewardInfos"),K("creator"),K(),Q(P(),32,"padding")]),hu=new Proxy(op,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),Tu=new Proxy(ip,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),So=new Proxy(rp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:6,rewardInfos:i.rewardInfos.map(r=>{var s;return F(R({},r),{rewardType:((s=Object.entries(bn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),sp=_([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),ms=_([D("instruction"),P("nonce"),Q(sp,5,"rewardTimeInfo")]),ds=_([D("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),ps=_([D("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),qP=_([P("state"),K("id"),K("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),Ko=_([P("state"),K("id"),K("owner"),P("deposited"),Q(ee(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),UP=_([P("state"),K("id"),K("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),Iu=_([P("state"),K("id"),K("owner"),P("deposited"),Q(ee(),2,"rewardDebts"),Q(P(),17)]),Bu=_([P(),P("state"),K("id"),K("owner"),P("deposited"),Q(ee(),5,"rewardDebts"),Q(P(),16)]),at=_([D("instruction"),P("amount")]),ap=_([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),gu("digitShift"),Q(D(),7,"reserved1"),Q(P(),7,"reserved2")]),xu=_([Ae(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),Q(D(),32,"reserved1"),Q(ap,4,"votingMints"),Yn("timeOffset"),D("bump"),Q(D(),7,"reserved2"),Q(P(),11,"reserved3")]),up=_([Yn("startTime"),Yn("endTime"),D("kind"),Q(D(),15,"reserved")]),cp=_([Q(up,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ee("isUsed"),Ee("allowClawback"),D("votingMintConfigIdx"),Q(D(),29,"reserved")]),Su=_([Ae(8),K("voterAuthority"),K("registrar"),Q(cp,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),Q(D(),94,"reserved")]);var ZP=me("Raydium_farm_config"),Cu=new Ku("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ru=new Ku("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Lu={3:hu,5:Tu,6:So},Ou={3:Ko,5:Iu,6:Bu},fs=o=>[3,5,6].indexOf(o)!==-1,ys=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=r[e])==null?void 0:s.call(r)},bn={"Standard SPL":0,"Option tokens":1},kt={[Wr.toString()]:3,[qr.toString()]:5,[Xn.toString()]:6};import{PublicKey as ce,SystemProgram as xn,SYSVAR_CLOCK_PUBKEY as Lo,SYSVAR_RENT_PUBKEY as dp,TransactionInstruction as Ye}from"@solana/web3.js";import qi from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as pp,createAssociatedTokenAccountInstruction as fp,TOKEN_PROGRAM_ID as gt}from"@solana/spl-token";function bs(o,e,t){return se([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function gs(o,e){return se([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function As(o,e){return se([e.toBuffer()],o)}function ws(o,e,t){return se([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function Ps(o,e,t){return se([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function ks(o,e,t,n){return se([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import pt from"bn.js";var Co=me("Raydium.farm.util");function Ro({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function nt({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var Mu=({programId:o,poolId:e})=>se([e.toBuffer()],o);function Nu(o){return{isSet:new pt(1),rewardPerSecond:H(o.perSecond),rewardOpenTime:H(o.openTime),rewardEndTime:H(o.endTime),rewardType:H(bn[o.rewardType])}}function hs(o){return H(o.endTime).sub(H(o.openTime)).mul(H(o.perSecond))}function Zn(o){let e=Ou[o];return e||Co.logWithError("invalid version",o),e}function lp(o){let e=Lu[o];return e||Co.logWithError("invalid version",o),e}function mp(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new pt(t)))return o;let i=new pt(t).sub(o.lastSlot);o.lastSlot=new pt(t);for(let r of o.rewardInfos){if(e.amount.eq(new pt(0)))continue;let s=r.perSlotReward.mul(i);r.perShareReward=r.perShareReward.add(s.mul(new pt(10).pow(new pt(o.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(o.version===6)for(let i of o.rewardInfos){if(i.rewardState.eq(new pt(0)))continue;let r=pt.min(new pt(n),i.rewardEndTime);if(i.rewardOpenTime.gte(r))continue;let a=r.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),c=i.totalReward.sub(i.totalRewardEmissioned);c.lt(a)?(a=c,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(c.div(i.rewardPerSecond))):i.rewardLastUpdateTime=r,!e.amount.eq(new pt(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return o}async function fk({connection:o,farmPools:e,owner:t,config:n,chainTime:i}){let r=!1,s=!1,a=new pt(10),c=[];for(let d of e){let p=Ie(d);p.version===6?s=!0:r=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:nt({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await De(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=R({},u[g]),y==="state"){let A=lp(p);(!b||!b.data||b.data.length!==A.span)&&Co.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=A.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==fn.span)&&Co.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=fn.decode(b.data);else if(y==="ledger"){let A=Zn(p);b&&b.data&&(b.data.length!==A.span&&Co.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=A.decode(b.data))}}let m=s||r?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=mp(u[d].state,u[d].lpVault,m,i));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new pt(9)):a.pow(new pt(15)),b=p.rewardInfos.map((g,A)=>{let w=y.rewardDebts[A];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(w)});u[d].wrapped=F(R({},u[d].wrapped),{pendingRewards:b})}return u}function yk(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>qa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Ua(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Ts(o,e,t,n){let i=await o.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=xu.decode(i.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Su.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var yp=me("Raydium_farm_instruction"),Oo={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function Mo(o){let{version:e,id:t,ledger:n,programId:i,owner:r}=o,s={3:9,5:10}[e];s||yp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(cs.span);cs.encode({instruction:s},a);let c=[k({pubkey:t}),k({pubkey:n}),k({pubkey:r,isWritable:!1}),k({pubkey:xn.programId,isWritable:!1}),k({pubkey:dp,isWritable:!1})];return{instruction:new Ye({programId:i,keys:c,data:a}),instructionType:E.FarmV3CreateLedger}}function _u(o){var n;let e=Buffer.alloc(ms.span);ms.encode({instruction:0,nonce:new qi(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Rr,k({pubkey:o.farmId}),k({pubkey:o.farmAuthority,isWritable:!1}),k({pubkey:o.lpVault}),k({pubkey:o.lpMint,isWritable:!1}),k({pubkey:o.lockVault}),k({pubkey:o.lockMint,isWritable:!1}),k({pubkey:(n=o.lockUserAccount)!=null?n:Ue}),k({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(k({pubkey:i.rewardMint,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}));return{instruction:new Ye({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function vu(o){let e=Buffer.alloc(ls.span);ls.encode({instruction:5},e);let t=[k({pubkey:gt,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.lpVault,isWritable:!1}),k({pubkey:o.rewardVault}),k({pubkey:o.userRewardToken}),k({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ye({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function bp(o,e,t,n,i,r,s,a,c,u,l,m,d){let p=_([D("depositEntryIndex"),P("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:ki,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Oo.voterStakeRegistryDeposit,...f]);return new Ye({keys:y,programId:o,data:b})}function gp(o,e,t,n){let i=_([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:xn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...Oo.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ye({keys:r,programId:o,data:a})}function Ap(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=_([D("depositEntryIndex"),P("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:ki,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let A=Buffer.from([...Oo.voterStakeRegistryWithdraw,...g]);return new Ye({keys:b,programId:o,data:A})}function wp(o,e,t,n,i,r){let s=_([D("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:xn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ye({keys:a,programId:o,data:c})}function Pp(o,e,t,n,i,r,s,a){let c=_([D("voterBump"),D("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:xn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:ki,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Oo.voterStakeRegistryCreateVoter,...l]);return new Ye({keys:u,programId:o,data:m})}function kp(o,e,t,n,i,r,s,a,c,u,l,m){let d=_([D("depositEntryIndex"),D("kind"),D("option"),P("startTs"),Je("periods"),Ee("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:xn.programId,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:pp,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Oo.voterStakeRegistryCreateDepositEntry,...y]);return new Ye({keys:p,programId:o,data:f})}async function Lk({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=bs(n,i,r).publicKey,l=nt({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ko.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new qi(0)))throw Error("user do not has new stake amount");let y=gs(e,a).publicKey,f=As(e,a).publicKey,{publicKey:b,nonce:g}=ws(n,u,s),A=le(b,y,c).publicKey,{publicKey:w,nonce:h}=Ps(n,u,s),I=ks(t,i,r,s).publicKey,T=[],S=le(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(fp(s,S,s,y)),await o.getAccountInfo(b)===null){let W=wp(t,i,s,r,s,I);T.push(W,Pp(n,u,b,w,s,s,g,h))}let{index:x,isInit:L}=await Ts(o,u,b,y);return L||T.push(kp(n,u,b,A,s,s,y,x,0,void 0,0,!1)),T.push(bp(n,u,b,A,S,s,l,a,y,f,e,x,p),gp(n,u,b,w)),T}async function Ok({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=bs(n,i,r).publicKey,l=nt({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ko.decode(m.data);if(d.voteLockedBalance.eq(new qi(0)))throw Error("user has vote locked balance = 0");let p=gs(e,a).publicKey,y=As(e,a).publicKey,{publicKey:f}=ws(n,u,s),b=le(f,p,c).publicKey,{publicKey:g}=Ps(n,u,s),A=ks(t,i,r,s).publicKey,w=[],{index:h,isInit:I}=await Ts(o,u,f,p);if(!I)throw Error("deposit entry index check error");return w.push(Ap(n,u,f,s,A,g,b,le(s,p,c).publicKey,l,a,p,y,e,h,d.voteLockedBalance)),w}function Is({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let r=Buffer.alloc(ds.span);ds.encode({instruction:3,rewardReopenTime:H(i.openTime),rewardEndTime:H(i.endTime),rewardPerSecond:H(i.perSecond)},r);let s=[k({pubkey:gt,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:o,isWritable:!1,isSigner:!0})];return new Ye({programId:n.programId,keys:s,data:r})}function Bs({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let r=Buffer.alloc(ps.span);ps.encode({instruction:4,isSet:new qi(1),rewardPerSecond:H(i.perSecond),rewardOpenTime:H(i.openTime),rewardEndTime:H(i.endTime),rewardType:H(bn[i.rewardType])},r);let s=[...Rr,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:i.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:o,isWritable:!1,isSigner:!0})];return new Ye({programId:t.programId,keys:s,data:r})}function Mk(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new ce(e.programId),new ce(e.id)],d=nt({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(at.span);at.encode({instruction:a,amount:c},p);let y=n===6?[k({pubkey:gt,isWritable:!1}),...u?[k({pubkey:xn.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:new ce(t.lpVault)}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i})]:[k({pubkey:m}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i}),k({pubkey:new ce(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:r[f]})),y.push(k({pubkey:new ce(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new ce(t.rewardInfos[f].vault)})),y.push(k({pubkey:r[f]}));return new Ye({programId:l,keys:y,data:p})}function No(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new ce(e.programId),new ce(e.id)],u=nt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(at.span);at.encode({instruction:2,amount:H(s)},l);let m=[k({pubkey:gt,isWritable:!1}),k({pubkey:c}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:new ce(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Ye({programId:a,keys:m,data:l})}function _o(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(at.span);at.encode({instruction:12,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function vo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(at.span);at.encode({instruction:11,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function Vu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(at.span);at.encode({instruction:10,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function Eu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(at.span);at.encode({instruction:11,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function Fu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new ce(e.programId),new ce(e.id)],u=nt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(at.span);at.encode({instruction:1,amount:H(s)},l);let m=[k({pubkey:gt,isWritable:!1}),k({pubkey:xn.programId,isWritable:!1}),k({pubkey:c}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:new ce(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Ye({programId:a,keys:m,data:l})}var Vo=class extends Ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ue)){let n=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:hs(F(R({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Xn,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Pe(e.lpMint.address),lockInfo:{lockMint:Cu,lockVault:Ru},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=dt({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(So.span);c.addInstruction({instructions:[hp.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:So.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Mu({programId:new Pe(a.programId),poolId:l.publicKey}),y=Ro({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(bn[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Nu(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=I.mint.equals(Ue)?new Pe(qe.address):I.mint;b.push({rewardMint:B,rewardVault:Ro({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:new Pe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});A&&c.addInstruction(A),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:w,instructionType:h}=_u({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[w],instructionTypes:[h]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let r=kt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Ue)?new Pe(qe.address):n.mint,l=a.rewardInfos.findIndex(g=>new Pe(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Ue,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Is({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let r=kt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ue)?new Pe(qe.address):m.mint,p=a.rewardInfos.findIndex(w=>new Pe(w.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ue,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let A=Is({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[A],instructionTypes:[E.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:r}=e,s=kt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(Ue)?new Pe(qe.address):i.mint,m=Ro({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[Bs({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:r}=e,s=kt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ue)?new Pe(qe.address):l.mint,d=Ro({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Bs({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(R({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[E.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=kt[d];fs(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Pe(n.programId),new Pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=nt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),A=this.createTxBuilder();A.addCustomComputeBudget(l);let w={};for(let v of this.scope.account.tokenAccounts)if(a){let Z=le(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&Z.equals(v.publicKey)&&(w[v.mint.toString()]=v.publicKey)}else w[v.mint.toString()]=v.publicKey;let h=b.lpMint,I=w[h.address];I||this.logAndCreateError("you don't have any lp","lp zero",w);let T=[];for(let v of m){let Z=s&&v.mint.address===j.toString(),X=w[v.mint.address];if(!X){let{account:q,instructionParams:ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new Pe(v.mint.address),notUseTokenAccount:Z,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:c});X=q,ze&&A.addInstruction(ze)}w[v.mint.address]=X,T.push(X)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=Zn(p).decode(B.data)),n.programId!==Xn.toString()&&!S){let{instruction:v,instructionType:Z}=Mo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});A.addInstruction({instructions:[v],instructionTypes:[Z]})}let C=ys({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});C&&this.logAndCreateError(C);let x={amount:H(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(v=>new Pe(v))},L=p===6?Fu(x):p===5?Eu(x):Vu(x),W={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return A.addInstruction({instructions:[L],instructionTypes:[W[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=kt[n.programId];fs(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=le(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(r)r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=nt({programId:new Pe(n.programId),poolId:new Pe(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)Zn(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:W}=Mo({id:new Pe(y.id),programId:new Pe(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}let g=y.lpMint.address,A=s&&g===j.toString(),w=b[g.toString()];if(!w){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Pe(g),notUseTokenAccount:A,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:A?!1:c,checkCreateATAOwner:u});w=C,x&&f.addInstruction(x)}b[g.toString()]=w;let h=[];for(let C of d){let x=s&&C.mint.address===j.toString(),L=b[C.mint.address];if(!L){let{account:W,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Pe(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});L=W,v&&f.addInstruction(v)}b[C.mint.address]=L,h.push(L)}let I=ys({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:h});I&&this.logAndCreateError(I);let T={amount:H(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new Pe(C))},S=p===6?No(T):p===5?_o(T):vo(T),B={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=kt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ue.toString()?new Pe(qe.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ue,u=this.createTxBuilder(),l;if(t.equals(Ue)){let y=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:hs(F(R({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Tp(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:m,instructionType:d}=vu({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=le(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(R({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:A}=y,w=kt[f],h=b.address,I=n&&h===j.toString(),T=m[h];if(!T){let{account:W,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Pe(h),notUseTokenAccount:I,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:r,checkCreateATAOwner:s});T=W,v&&l.addInstruction(v)}m[h.toString()]=T;let S=[];for(let W of g){let v=n&&W.mint.address===j.toString(),Z=m[W.mint.address];if(!Z){let{account:X,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new Pe(W.mint.address),notUseTokenAccount:v,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:r,checkCreateATAOwner:s});Z=X,q&&l.addInstruction(q)}m[W.mint.address]=Z,S.push(Z)}let B=p[A],C={amount:Ge,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new Pe(W))},x=w===6?No(C):w===5?_o(C):vo(C),L={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[L[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as rt}from"@solana/web3.js";import{AccountLayout as df,NATIVE_MINT as Bc,TOKEN_PROGRAM_ID as to}from"@solana/spl-token";import{Keypair as Yi,PublicKey as U,SystemProgram as On,TransactionInstruction as lt}from"@solana/web3.js";import sc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ns,TOKEN_2022_PROGRAM_ID as Ut,TOKEN_PROGRAM_ID as xe}from"@solana/spl-token";import _p from"bn.js";import ht from"bn.js";var ye=new ht(0),At=new ht(1),Jt=new ht(-1),wt=new ht(1).shln(64),Ui=new ht(1).shln(128),xs=wt.sub(At),Eo=64,Du=Ui.subn(1),ot=-443636,ut=-ot,Tt=new ht("4295048016"),It=new ht("79226673521066979257578248091"),Gi=new ht("4295048017"),Xi=new ht("79226673521066979257578248090"),Wu=16,qu="59543866431248",Uu="184467440737095516",Gu="15793534762490258745",zi=new ht(10).pow(new ht(6)),Ip=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Ip||{}),lh={[500]:10,[3e3]:60,[1e4]:200},mh={version:6,liquidity:ye,tickCurrent:0,feeGrowthGlobalX64A:ye,feeGrowthGlobalX64B:ye,protocolFeesTokenA:ye,protocolFeesTokenB:ye,swapInAmountTokenA:ye,swapOutAmountTokenB:ye,swapInAmountTokenB:ye,swapOutAmountTokenA:ye,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},Xu={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},dh=new ht("18446744073700000000");import ae from"bn.js";function zu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function fh(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function yh(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Qi(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ss(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Ks(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Fo(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Qu(o,e){return Fo(o,e)?null:Ss(o,e)}function Yu(o,e){return Fo(o,e)?null:Ks(o,e)}var Bp=Buffer.from("amm_config","utf8"),xp=Buffer.from("pool","utf8"),Sp=Buffer.from("pool_vault","utf8"),Kp=Buffer.from("pool_reward_vault","utf8"),ju=Buffer.from("position","utf8"),Cp=Buffer.from("tick_array","utf8"),Rp=Buffer.from("operation","utf8"),Lp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Op=Buffer.from("observation","utf8");function wh(o,e){return se([Bp,zu(e)],o)}function Hu(o,e,t,n){return se([xp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Cs(o,e,t){return se([Sp,e.toBuffer(),t.toBuffer()],o)}function Zu(o,e,t){return se([Kp,e.toBuffer(),t.toBuffer()],o)}function de(o,e,t){return se([Cp,e.toBuffer(),Qi(t)],o)}function Nt(o,e,t,n){return se([ju,e.toBuffer(),Qi(t),Qi(n)],o)}function ct(o,e){return se([ju,e.toBuffer()],o)}function Sn(o){return se([Buffer.from("metadata","utf8"),zt.toBuffer(),o.toBuffer()],zt)}function Do(o){return se([Rp],o)}function ft(o,e){return se([Lp,e.toBuffer()],o)}function $u(o,e){return se([Op,e.toBuffer()],o)}var Ju=Buffer.from("locked_position","utf8");function Rs(o,e){return se([Ju,e.toBuffer()],o)}function Wo(o,e){return se([Ju,e.toBuffer()],o)}import{PublicKey as _t}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as ec}from"@solana/spl-token";import Be from"bn.js";import qt from"bn.js";var qo=class{static getfeeGrowthInside(e,t,n){let i=new qt(0),r=new qt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new qt(0),a=new qt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,wt),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,wt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,wt),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,wt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,wt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,i){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,wt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:r,epochInfo:s}){var b,g,A,w;let a=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+i:1-i,m=pe.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new qt(new O(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),ge(new qt(new O(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Ot(d.expirationTime,p.expirationTime)}}};var Mp=15,fe=class{static async getTickArrays(e,t,n,i,r,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(i,r),l=Y.getInitializedTickArrayInRange(s,a,r,u,Math.floor(Mp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=de(t,n,l[p]);c.push(y)}let m=(await St(e,c)).map(p=>p!==null?Uo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(R({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,r){let s=Math.floor(e/fe.tickCount(t)),a=n?Y.searchLowBitFromStart(i,r,s-1,1,t):Y.searchHightBitFromStart(i,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let r;if(i){let a=Xe-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<Xe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=de(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,r,s){let a=Y.getTickArrayStartIndexByTick(i,r),c=Math.floor((i-a)/r),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Xe;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=de(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>ut)return!1;let n=Y.getTickArrayStartIndexByTick(ot,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Xe*e}};var Ls=14,en=class{static maxTickInTickarrayBitmap(e){return e*Xe*Kn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let r=n*i;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!fe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=i?t-fe.tickCount(n):t+fe.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*Xe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=Qu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=Yu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-fe.tickCount(n)}}}},Go=class{static getBitmapOffset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=en.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=en.maxTickInTickarrayBitmap(e),n=-t;if(ut<=t)throw Error(`extensionTickBoundary check error: ${ut}, ${t}`);if(n<=ot)throw Error(`extensionTickBoundary check error: ${n}, ${ot}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(i).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let r=fe.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:r,maxValue:s}=en.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=Y.mergeTickArrayBitmap(e).shln(Kn-1-a),u=Fo(512,c)?null:Ss(512,c);if(u!==null){let l=t-u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=Fo(512,c)?null:Ks(512,c);if(u!==null){let l=t+u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-fe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%en.maxTickInTickarrayBitmap(t),i=Math.floor(n/fe.tickCount(t));return e<0&&n!=0&&(i=Kn-i),i}};var Re=class{static getOutputAmountAndRemainAccounts(e,t,n,i,r,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=Cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,r,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(Jt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,r){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=de(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Jt),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Re.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Go.checkTickArrayIsInit(fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=de(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/fe.tickCount(e.tickSpacing)),i=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:r}=en.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Go.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<ot||t>ut)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(R({},m),{perSecond:oe.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new _t(d)});if(p.tokenMint.equals(_t.default))continue;if(n<=p.openTime.toNumber()||i.eq(ye)){s.push(p);continue}let y=new Be(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=oe.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),A=oe.mulDivFloor(f,p.emissionsPerSecondX64,wt),w=p.rewardTotalEmissioned.add(A);s.push(F(R({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let r of t){let s=Y.getTickArrayStartIndexByTick(r,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=en.maxTickInTickarrayBitmap(e),n=-t;return t>ut&&(t=fe.getArrayStartIndex(ut,e)+fe.tickCount(e)),n<ot&&(n=fe.getArrayStartIndex(ot,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/fe.tickCount(t)*Kn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await De(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of i)s.accountInfo!==null&&(r[s.pubkey.toString()]=nc.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},r=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=de(c.programId,c.id,m);r.push({pubkey:d}),i[d.toString()]=c.id}}let s=await De(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Uo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(R({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:r=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(ct(p,d).publicKey);let l=await St(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Xo.decode(d.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:h}=pe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:w,amountB:h,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>F(R({},B),{pendingReward:new Be(0)})),leverage:I,tokenFeeAmountA:new Be(0),tokenFeeAmountB:new Be(0)}];let T=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await St(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Uo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[A].toString()],I=y[m[w].toString()],T=h.ticks[Y.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[Y.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await qo.GetPositionFees(f,g,T,S),x=await qo.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=B.gte(new Be(0))?B:new Be(0),g.tokenFeeAmountB=C.gte(new Be(0))?C:new Be(0);for(let L=0;L<x.length;L++)g.rewardInfos[L].pendingReward=x[L].gte(new Be(0))?x[L]:new Be(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:r,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var W;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new O(0))?u=l?Tt.add(new Be(1)):It.sub(new Be(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,i,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:A}=Re.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:ye),u,c),w=ge(f,d,i,!1),h=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?h:new O(1).div(h),T=f.mul(new Be(Math.floor((1-s)*1e10))).div(new Be(1e10)),S=ge(T,d,i,!1),B=l?e.currentPrice:new O(1).div(e.currentPrice),C=new O(I).sub(B).abs(),x=B,L=new Ce(new O(C).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:Ot(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:L,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new we(F(R({},u),{mint:u.address,isToken2022:u.programId===ec.toBase58()})),new we(F(R({},l),{mint:l.address,isToken2022:l.programId===ec.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:w,priceImpact:h,fee:I,remainingAccounts:T,executionPriceX64:S}=Re.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new _t(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),B=F(R({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=F(R({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=F(R({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new Qe({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),W=new Qe({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),v=new be(m,I);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:L,executionPrice:W,priceImpact:h,fee:v,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:r,slippage:s,priceLimit:a=new O(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new O(0))?l=c?It.sub(new Be(1)):Tt.add(new Be(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Re.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:ye),l),b=c?e.mintB.address:e.mintA.address,g=ge(d,u[b],i,!1),A=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),w=c?A:new O(1).div(A),h=d.mul(new Be(Math.floor((1+s)*1e10))).div(new Be(1e10)),I=ge(h,u[b],i,!0),T=c?e.currentPrice:new O(1).div(e.currentPrice),S=new O(w).sub(T).abs(),B=T,C=new Ce(new O(S).mul(10**15).toFixed(0),new O(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Ot(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let r=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[bt(e.mintA.address).toString()],d=i[bt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:w}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:I}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),T=new O(A.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(w.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(h.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(I.toString()).div(new O(10).pow(y)).mul(d.value)),B=new O(1).div(T.add(S)),x=new O(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),L=3600*24*365,W=e.rewardDefaultInfos.map(v=>{var q,ze;let Z=v.mint.decimals,X=i[v.mint.address];return c<((q=v.startTime)!=null?q:0)||c>((ze=v.endTime)!=null?ze:0)||!v.perSecond||!X||Z===void 0?0:new O(X.value).mul(new O(v.perSecond).mul(L)).div(new O(10).pow(Z)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:W,apr:x+W.reduce((v,Z)=>v+Z,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Be(new O(y.amount.sub((A=y.fee)!=null?A:ye).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?pe.getLiquidityFromTokenAmountA(m,d,f,!a):new Be(0);else if(l.lte(d)){let w=pe.getLiquidityFromTokenAmountA(l,d,f,!a),h=pe.getLiquidityFromTokenAmountB(m,l,f);b=t?w:h}else b=t?new Be(0):pe.getLiquidityFromTokenAmountB(m,d,f);return Re.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:r,slippage:s,add:a}){var b,g,A,w;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ge(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Ot(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new _t(c.id));(await St(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=Rn.decode(c.data))});let s=t.map(c=>ft(new _t(c.programId),new _t(c.id)).publicKey),a=await Re.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(R({},c),{[u.id]:F(R({},n[u.id]),{id:new _t(u.id),version:6,programId:new _t(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(R({},u.config),{id:new _t(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapInfo:a[ft(new _t(u.programId),new _t(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function iT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var w,h,I,T;let[u,l,m,d]=e<t?[e,t,n,i]:[t,e,i,n],p=te.priceToSqrtPriceX64(new O(o.price),o.mintA.decimals,o.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[ge(m,(w=o.mintA.extensions)==null?void 0:w.feeConfig,a,!c),ge(d,(h=o.mintB.extensions)==null?void 0:h.feeConfig,a,!c)],A=pe.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:ye),g.amount.sub((T=g.fee)!=null?T:ye));return pe.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:A,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var Os={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function tc(o){return F(R({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Os,week:Os,month:Os,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:F(R({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var oe=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),r=i.div(n);return i.mod(n).eq(ye)||(r=r.add(At)),r}static mulDivFloor(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).add(n.sub(At)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ae(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ui).sub(t).mod(Ui)}};function je(o,e){return Ms(o.mul(e),64,256)}function Np(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ms(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return oe.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return oe.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(ye))return e;let r=t.shln(Eo);if(i){let s=r,a=r.add(n.mul(e));return a.gte(s)?oe.mulDivCeil(s,e,a):oe.mulDivRoundingUp(s,At,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return oe.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let r=n.shln(Eo);if(i)return e.add(r.div(t));{let s=oe.mulDivRoundingUp(r,At,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<ot||e>ut)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ae("18445821805675395072"):new ae("18446744073709551616");return(t&2)!=0&&(n=je(n,new ae("18444899583751176192"))),(t&4)!=0&&(n=je(n,new ae("18443055278223355904"))),(t&8)!=0&&(n=je(n,new ae("18439367220385607680"))),(t&16)!=0&&(n=je(n,new ae("18431993317065453568"))),(t&32)!=0&&(n=je(n,new ae("18417254355718170624"))),(t&64)!=0&&(n=je(n,new ae("18387811781193609216"))),(t&128)!=0&&(n=je(n,new ae("18329067761203558400"))),(t&256)!=0&&(n=je(n,new ae("18212142134806163456"))),(t&512)!=0&&(n=je(n,new ae("17980523815641700352"))),(t&1024)!=0&&(n=je(n,new ae("17526086738831433728"))),(t&2048)!=0&&(n=je(n,new ae("16651378430235570176"))),(t&4096)!=0&&(n=je(n,new ae("15030750278694412288"))),(t&8192)!=0&&(n=je(n,new ae("12247334978884435968"))),(t&16384)!=0&&(n=je(n,new ae("8131365268886854656"))),(t&32768)!=0&&(n=je(n,new ae("3584323654725218816"))),(t&65536)!=0&&(n=je(n,new ae("696457651848324352"))),(t&131072)!=0&&(n=je(n,new ae("26294789957507116"))),(t&262144)!=0&&(n=je(n,new ae("37481735321082"))),e>0&&(n=Du.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(It)||e.lt(Tt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ae(t-64),i=Np(n,32,128),r=new ae("8000000000000000","hex"),s=0,a=new ae(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new ae(0))&&s<Wu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new ae(qu)),d=Ms(m.sub(new ae(Uu)),64,128).toNumber(),p=Ms(m.add(new ae(Gu)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},Ln=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let r=Ln.getTickWithPriceAndTickspacing(e,t,n,i),s=te.getSqrtPriceX64FromTick(r);return te.sqrtPriceX64ToPrice(s,n,i)}},pe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(Eo),s=t.sub(e);return i?oe.mulDivRoundingUp(oe.mulDivCeil(r,s,t),At,e):oe.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");return i?oe.mulDivCeil(n,t.sub(e),wt):oe.mulDivFloor(n,t.sub(e),wt)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return i?oe.mulDivRoundingUp(a,At,xs):a.shrn(Eo)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),oe.mulDivFloor(n,xs,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,i,!1),a=pe.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,i,r),amountB:new ae(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,i,r),a=pe.getTokenAmountBFromLiquidity(t,e,i,r);return{amountA:s,amountB:a}}else return{amountA:new ae(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,i,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,r,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,i,s),l=r?1+a:1-a,m=new ae(new O(c.toString()).mul(l).toFixed(0)),d=new ae(new O(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var A,w,h,I;let u=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=pe.getAmountsFromLiquidity(u,l,m,i,s),[y,f]=[ge(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),ge(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[ge(new ae(new O(p.amountA.toString()).mul(d).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ge(new ae(new O(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Ot(y.expirationTime,f.expirationTime)}}},Cn=class{static swapCompute(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(ye))throw new Error("amountSpecified must not be 0");if(y||(y=s?Tt.add(At):It.sub(At)),s){if(y.lt(Tt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(It))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(ye),g={amountSpecifiedRemaining:d,amountCalculated:ye,sqrtPriceX64:m,tick:u>p?Math.min(p+fe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ae(0)},A=p,w=n[p],h=0,I=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(ye)&&!g.sqrtPriceX64.eq(y);){h>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(w,g.tick,l,s,I),B=S||null,C=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let L=Re.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:r},A,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=L.nextStartIndex;let{publicKey:W}=de(e,t,A);C=W,w=n[A];try{B=Y.firstInitializedTick(w,s)}catch{throw Error("not found next tick info")}}T.tickNext=B.tick,T.initialized=B.liquidityGross.gtn(0),p!==A&&C&&(g.accounts.push(C),p=A),T.tickNext<ot?T.tickNext=ot:T.tickNext>ut&&(T.tickNext=ut),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let x;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?x=y:x=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=Cn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=B.liquidityNet;s&&(L=L.mul(Jt)),g.liquidity=pe.addDelta(g.liquidity,L)}I=T.tickNext!=g.tick&&!s&&w.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=L!=g.tick&&!s&&w.startTickIndex===L,g.tick=L}++h}try{let{nextStartIndex:T,isExist:S}=fe.nextInitializedTickArray(g.tick,l,s,i,r);S&&p!==T&&(g.accounts.push(de(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:ye,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,r){let s={sqrtPriceX64Next:new ae(0),amountIn:new ae(0),amountOut:new ae(0),feeAmount:new ae(0)},a=e.gte(t),c=i.gte(ye);if(c){let l=oe.mulDivFloor(i,zi.sub(new ae(r.toString())),zi);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Jt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,i.mul(Jt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(i.mul(Jt))&&(s.amountOut=i.mul(Jt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=oe.mulDivCeil(s.amountIn,new ae(r),zi.sub(new ae(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Xe=60,Kn=512,Y=class{static getTickArrayAddressByTick(e,t,n,i){let r=Y.getTickArrayStartIndexByTick(n,i),{publicKey:s}=de(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Xe)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=fe.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*fe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Xe,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Xe,r=Math.floor(t/i)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Xe:e+t*Xe}static mergeTickArrayBitmap(e){let t=new _p(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,r){let s=Math.floor(i/(n*Xe));return[...Y.searchLowBitFromStart(e,t,s-1,r,n),...Y.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,Kn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,r){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,i,r);for(let c of a){let{publicKey:u}=de(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<ot||e>ut}static nextInitTick(e,t,n,i,r){if(fe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<Xe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Xe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Xe;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new O(1).div(r),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),r=Ln.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new O(1).div(r),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),r=Ln.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new O(1).div(a)}}};var oc=_([Ae(8),D("bump"),jt("index"),K(""),Je("protocolFeeRate"),Je("tradeFeeRate"),jt("tickSpacing"),Q(P(),8,"")]),vp=_([Je("blockTimestamp"),Yn("tickCumulative"),Q(P(),4)]),ic=_([Ae(8),Ee("initialized"),P("recentEpoch"),jt("observationIndex"),K("poolId"),Q(vp,100,"observations"),Q(P(),4)]),Vp=_([D("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),ee("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),ee("rewardGrowthGlobalX64")]),Rn=_([Ae(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),jt("tickSpacing"),ee("liquidity"),ee("sqrtPriceX64"),$e("tickCurrent"),Je(),ee("feeGrowthGlobalX64A"),ee("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),ee("swapInAmountTokenA"),ee("swapOutAmountTokenB"),ee("swapInAmountTokenB"),ee("swapOutAmountTokenA"),D("status"),Q(D(),7,""),Q(Vp,3,"rewardInfos"),Q(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Q(P(),15*4-3,"padding")]),Ep=_([ee("growthInsideLastX64"),P("rewardAmountOwed")]),Xo=_([Ae(8),D("bump"),K("nftMint"),K("poolId"),$e("tickLower"),$e("tickUpper"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(Ep,3,"rewardInfos"),Q(P(),8,"")]),KT=_([Ae(8),D("bump"),K("poolId"),$e("tickLowerIndex"),$e("tickUpperIndex"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(ee(),3,"rewardGrowthInside"),Q(P(),8,"")]),Fp=_([$e("tick"),Au("liquidityNet"),ee("liquidityGross"),ee("feeGrowthOutsideX64A"),ee("feeGrowthOutsideX64B"),Q(ee(),3,"rewardGrowthsOutsideX64"),Q(Je(),13,"")]),Uo=_([Ae(8),K("poolId"),$e("startTickIndex"),Q(Fp,Xe,"ticks"),D("initializedTickCount"),Q(D(),115,"")]),rc=_([Ae(329),Q(K(),100,"whitelistMints")]),nc=_([Ae(8),K("poolId"),Q(Q(P(),8),Ls,"positiveTickArrayBitmap"),Q(Q(P(),8),Ls,"negativeTickArrayBitmap")]),CT=_([P(),D("bump"),K("owner"),K("poolId"),K("positionId"),K("nftAccount"),Q(P(),8)]),RT=_([Ae(8),D("bump"),K("lockOwner"),K("poolId"),K("positionId"),K("nftAccount"),K("lockNftMint"),P("recentEpoch"),Q(P(),8)]);ic.span;var ac=me("Raydium_Clmm"),vt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},uc=[188,37,179,131,82,150,84,73],cc=[16,72,250,198,14,162,212,19],ke=class{static createPoolInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=_([ee("sqrtPriceX64"),P("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let A=Buffer.from([...vt.createPool,...g]);return new lt({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(i.address),new U(r.address)],{publicKey:m}=Hu(t,s,u,l),{publicKey:d}=$u(t,m),{publicKey:p}=Cs(t,m,u),{publicKey:y}=Cs(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(i.programId||xe),l,y,new U(r.programId||xe),ft(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w,h,I,T,S,B,C,x){let L=_([$e("tickLowerIndex"),$e("tickUpperIndex"),$e("tickArrayLowerStartIndex"),$e("tickArrayUpperStartIndex"),ee("liquidity"),P("amountMaxA"),P("amountMaxB"),Ee("withMetadata"),D("optionBaseFlag"),Ee("baseFlag")]),W=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ns,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},Z);let X=Buffer.from([...vt.openPosition,...Z]);return new lt({keys:v,programId:e,data:X})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let B=Yi.generate();m.push(B),y=B.publicKey}let f=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:A}=de(d,p,b),{publicKey:w}=le(n.wallet,y,xe),{publicKey:h}=Sn(y),{publicKey:I}=ct(d,y),{publicKey:T}=Nt(d,p,i,r),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,w,h,T,g,A,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,r,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:h,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let B=Yi.generate();m.push(B),y=B.publicKey}let f=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:A}=de(d,p,b),{publicKey:w}=le(n.wallet,y,xe),{publicKey:h}=Sn(y),{publicKey:I}=ct(d,y),{publicKey:T}=Nt(d,p,i,r),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,w,h,T,g,A,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,r,f,b,u,s,a,c,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ft(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w,h,I,T,S,B,C,x){let L=_([$e("tickLowerIndex"),$e("tickUpperIndex"),$e("tickArrayLowerStartIndex"),$e("tickArrayUpperStartIndex"),ee("liquidity"),P("amountMaxA"),P("amountMaxB"),Ee("withMetadata"),D("optionBaseFlag"),Ee("baseFlag")]),W=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ns,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:new sc(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let X=Buffer.from([...vt.openPosition,...Z]);return new lt({keys:v,programId:e,data:X})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let B=Yi.generate();d.push(B),m=B.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(p,y,f),{publicKey:A}=de(p,y,b),{publicKey:w}=le(n.wallet,m,xe),{publicKey:h}=Sn(m),{publicKey:I}=ct(p,m),{publicKey:T}=Nt(p,y,i,r),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,w,h,T,g,A,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),i,r,f,b,s,a,c,u,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ft(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,r){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...vt.closePosition,...c]);return new lt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let r=new U(e.programId),{publicKey:s}=le(n.wallet,i.nftMint,xe),{publicKey:a}=ct(r,i.nftMint),c=[];return c.push(this.closePositionInstruction(r,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let w=_([ee("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ee("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...vt.increaseLiquidity,...T]);return new lt({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=ct(c,n.nftMint),{publicKey:b}=Nt(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ft(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:r,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=ct(c,n.nftMint),{publicKey:b}=Nt(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ft(c,u).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let w=_([ee("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ee("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(w.span);w.encode({liquidity:new sc(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...vt.increaseLiquidity,...T]);return new lt({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w){let h=_([ee("liquidity"),P("amountMinA"),P("amountMinB")]),I=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:Pi,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:A},S);let B=Buffer.from([...vt.decreaseLiquidity,...S]);return new lt({keys:T,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=le(i.wallet,n.nftMint,c),{publicKey:b}=ct(u,n.nftMint),{publicKey:g}=Nt(u,l,n.tickLower,n.tickUpper),A=[];for(let I=0;I<e.rewardDefaultInfos.length;I++)A.push({poolRewardVault:new U(t.rewardInfos[I].vault),ownerRewardVault:i.rewardAccounts[I],rewardMint:new U(e.rewardDefaultInfos[I].mint.address)});let w=[],h=this.decreaseLiquidityInstruction(u,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),A,r,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ft(u,l).publicKey:void 0);return w.push(h),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g){let A=_([P("amount"),P("otherAmountThreshold"),ee("sqrtPriceLimitX64"),Ee("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:Pi,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],I=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...vt.swap,...I]);return new lt({keys:h,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,i.wallet,m,new U(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,ft(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new U(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,ft(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,r,s,a,c,u,l,m,d){let p=_([P("openTime"),P("endTime"),ee("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:H(l),endTime:H(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...vt.initReward,...f]);return new lt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new U(e.programId),new U(e.id)],a=Zu(r,s,i.mint).publicKey,c=Do(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new U(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,r,s,a,c,u,l,m,d){let p=_([D("rewardIndex"),ee("emissionsPerSecondX64"),P("openTime"),P("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:H(l),endTime:H(m)},f);let b=Buffer.from([...vt.setRewardEmissions,...f]);return new lt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Do(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,r,s,a){let c=_([D("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:Pi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...vt.collectReward,...l]);return new lt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[r,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[E.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:r,nftMint:s,getEphemeralSigners:a}){let c=[],u;if(a)u=new U((await a(1))[0]);else{let b=Yi.generate();c.push(b),u=b.publicKey}let{publicKey:l}=le(r,s,xe),{publicKey:m}=ct(n,s),d=Wo(e,u).publicKey,p=le(r,u,xe).publicKey,y=Sn(u).publicKey,f=ke.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:r,lockOwner:r,positionNftAccount:l,positionId:m,lockPositionId:d,lockNftMint:u,lockNftAccount:p,metadataAccount:y,withMetadata:!0});return{address:{positionId:m,lockPositionId:d,lockNftAccount:p,lockNftMint:u,positionNftAccount:l,metadataAccount:y},instructions:[f],signers:c,instructionTypes:[E.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:r,positionNftAccount:s,positionId:a,lockPositionId:c,lockNftMint:u,lockNftAccount:l,metadataAccount:m,withMetadata:d}){let p=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:Ns,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1}],y=_([Ee("withMetadata")]),f=Buffer.alloc(y.span);y.encode({withMetadata:d},f);let b=Buffer.from([...uc,...f]);return new lt({keys:p,programId:e,data:b})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:r}){let{publicKey:s}=le(i,r,xe),{publicKey:a}=ct(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Rs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1}];return new lt({keys:c,programId:e,data:Buffer.from(uc)})}static harvestLockPositionInstruction(e){let[t,n]=[new U(e.poolKeys.programId),new U(e.poolKeys.id)],i=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=de(t,n,i),{publicKey:a}=de(t,n,r),{publicKey:c}=le(e.owner,e.ownerPosition.nftMint,xe),{publicKey:u}=ct(t,e.ownerPosition.nftMint),{publicKey:l}=Nt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new U(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new U(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Rs(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:mn,isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new lt({keys:p,programId:e.programId,data:Buffer.from(cc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:A,mintB:w,rewardAccounts:h,exTickArrayBitmap:I}){let T=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[],...h.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:mn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...T];return new lt({keys:S,programId:e,data:Buffer.from(cc)})}};var zT=_([Je("mintAuthorityOption"),K("mintAuthority"),P("supply"),D("decimals"),D("isInitialized"),Je("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Dp}from"@solana/web3.js";import{MintLayout as lc,TOKEN_PROGRAM_ID as Wp}from"@solana/spl-token";var nI=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new Dp(e));return!t||t.data.length!==lc.span?void 0:lc.decode(t.data)},oI=({mint:o,decimals:e,programId:t=Wp,logoURI:n="",priority:i=3})=>{let r=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:i}},ji=o=>new we({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),zo=i=>{var r=i,{amount:o,isRaw:e,name:t}=r,n=Me(r,["amount","isRaw","name"]);return new be(new we({mint:bt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function iI(o){return o.address===Dt.address?qe:o}function rI(o){return o.address===qe.address?Dt:o}var it=i=>{var r=i,{address:o,programId:e,decimals:t}=r,n=Me(r,["address","programId","decimals"]);return R({chainId:101,address:bt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},gn=o=>o?F(R({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(R({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(R({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import mc from"bn.js";var _s=new mc(25),Hi=new mc(1e4),qp={4:3,5:3};import{PublicKey as he,SystemProgram as wc,SYSVAR_RENT_PUBKEY as nf,TransactionInstruction as tn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as of,TOKEN_PROGRAM_ID as eo}from"@solana/spl-token";var vs=_([D("instruction"),P("amountIn"),P("minAmountOut")]),Vs=_([D("instruction"),P("maxAmountIn"),P("amountOut")]),bI=_([D("instruction"),D("nonce")]),Es=_([D("instruction"),D("nonce"),P("startTime")]),Qo=_([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),P("swapBase2QuoteFee"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),P("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),P("lpReserve"),Q(P(),3,"padding")]),Up=_([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),Q(P(),64,"padding")]),Fs=_([D("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),Ds=_([D("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]),gI={4:Qo,5:Up},dc=_([P("fee")]);import{PublicKey as Gp}from"@solana/web3.js";var Jn=new Gp("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Nn=5e4,Xp=_([P("x"),P("y"),P("price")]),zp=_([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q(Xp,Nn,"DataElement")]);function Qp(o,e){return[0,Nn-2]}function Yp(o){return[0,Nn-2]}function jp(o){return[0,Nn-2]}function Hp(o,e,t){let[n,i]=Qp(e,t),r=n,s=i,a=0,c=e*o.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Nn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function Ws(o,e,t){let[n,i,r]=Hp(o,e,t);if(!r)return 0;if(n===i){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[i].x,u=o.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function Mn(o,e,t){return e*o.multiplier/t}function pc(o,e,t){return e*t/o.multiplier}function Zp(o,e){let[t,n]=Yp(e),i=t,r=n,s=0,a=e;for(;i<r;){if(s=Math.floor((r+i)/2),s<=0||s>Nn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function $p(o,e){let[t,n]=jp(e),i=t,r=n,s=0,a=e;for(;i<=r;){if(s=Math.floor((r+i)/2),s<=0||s>=Nn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function fc(o,e,t,n){let i=n?e+t:e-t,[r,s,a]=Zp(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(i-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-i)*o.multiplier/l),[y,f,!1,a]}}}function Jp(o,e,t,n){let i=n?e-t:e+t,[r,s,a]=$p(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-i)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(i-p)/o.multiplier),[y,f,!1,a]}}}function ef(o,e){let t=fc(o,e,0,!1);return t[3]?t[0]:0}function yc(o,e,t,n){let i=Ws(o,e,t),r=Mn(o,e,i),s=Mn(o,t,i),a=Mn(o,n,i),c=!0,[u,l,m,d]=fc(o,r,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return pc(o,p,i)}}function bc(o,e,t,n){let i=Ws(o,e,t),r=Mn(o,e,i),s=Mn(o,t,i),a=Mn(o,n,i),c=!1,[u,l,m,d]=Jp(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=r-l;return pc(o,p,i)}}function tf(o){let e=zp.decode(o);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function gc(o,e,t,n){let i=ef(o,Mn(o,e,Ws(o,e,t)))/o.multiplier;return n?i:1/i}var $n=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Jn);e&&(this._layoutData=tf(e==null?void 0:e.data))}}};var Ac=me("Raydium_liquidity_instruction");function Pc(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=o,c=Buffer.alloc(Fs.span);Fs.encode({instruction:3,baseAmountIn:H(i),quoteAmountIn:H(r),otherAmountMin:H(a),fixedSide:s==="base"?Ge:Ea},c);let u=[k({pubkey:eo,isWritable:!1}),k({pubkey:new he(e.id)}),k({pubkey:new he(t.authority),isWritable:!1}),k({pubkey:new he(t.openOrders),isWritable:!1}),k({pubkey:new he(t.targetOrders)}),k({pubkey:new he(e.lpMint.address)}),k({pubkey:new he(t.vault.A)}),k({pubkey:new he(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Jn})),u.push(k({pubkey:new he(e.marketId),isWritable:!1}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:new he(t.marketEventQueue),isWritable:!1})),new tn({programId:new he(e.programId),keys:u,data:c})}function qs(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:r,quoteAmountMin:s}=o,a=Ie(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(Ds.span);Ds.encode({instruction:4,lpAmount:H(i),baseAmountMin:H(r),quoteAmountMin:H(s)},u);let l=[k({pubkey:eo,isWritable:!1}),k({pubkey:a.id}),k({pubkey:a.authority,isWritable:!1}),k({pubkey:a.openOrders}),k({pubkey:a.targetOrders}),k({pubkey:a.mintLp.address}),k({pubkey:a.vault.A}),k({pubkey:a.vault.B})];return c===5?l.push(k({pubkey:Jn})):(l.push(k({pubkey:a.id})),l.push(k({pubkey:a.id}))),l.push(k({pubkey:a.marketProgramId,isWritable:!1}),k({pubkey:a.marketId}),k({pubkey:a.marketBaseVault}),k({pubkey:a.marketQuoteVault}),k({pubkey:a.marketAuthority,isWritable:!1}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:a.marketEventQueue}),k({pubkey:a.marketBids}),k({pubkey:a.marketAsks})),new tn({programId:a.programId,keys:l,data:u})}return new tn({programId:a.programId,keys:[]})}function kc({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:A,openTime:w,coinAmount:h,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let B=_([D("instruction"),D("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),C=[{pubkey:eo,isSigner:!1,isWritable:!1},{pubkey:of,isSigner:!1,isWritable:!1},{pubkey:wc.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:A,openTime:w,coinAmount:h,pcAmount:I},x),{instruction:new tn({keys:C,programId:o,data:x}),instructionType:E.AmmV4CreatePool}}function MI(o){let e=_([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new he(o.id),isWritable:!1}),k({pubkey:new he(o.authority),isWritable:!1}),k({pubkey:new he(o.openOrders),isWritable:!1}),k({pubkey:new he(o.vault.A),isWritable:!1}),k({pubkey:new he(o.vault.B),isWritable:!1}),k({pubkey:new he(o.mintLp.address),isWritable:!1}),k({pubkey:new he(o.marketId),isWritable:!1}),k({pubkey:new he(o.marketEventQueue),isWritable:!1})];return new tn({programId:new he(o.programId),keys:n,data:t})}function rf({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let r=Ie(o),s=Buffer.alloc(vs.span);vs.encode({instruction:9,amountIn:H(t),minAmountOut:H(n)},s);let a=[k({pubkey:eo,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.openOrders})];return i===4&&a.push(k({pubkey:r.targetOrders})),a.push(k({pubkey:r.vault.A}),k({pubkey:r.vault.B})),i===5&&a.push(k({pubkey:Jn})),a.push(k({pubkey:r.marketProgramId,isWritable:!1}),k({pubkey:r.marketId}),k({pubkey:r.marketBids}),k({pubkey:r.marketAsks}),k({pubkey:r.marketEventQueue}),k({pubkey:r.marketBaseVault}),k({pubkey:r.marketQuoteVault}),k({pubkey:r.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new tn({programId:r.programId,keys:a,data:s})}function sf({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let r=Ie(o),s=Buffer.alloc(Vs.span);Vs.encode({instruction:11,maxAmountIn:H(t),amountOut:H(n)},s);let a=[k({pubkey:eo,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.openOrders}),k({pubkey:r.targetOrders}),k({pubkey:r.vault.A}),k({pubkey:r.vault.B})];return i===5&&a.push(k({pubkey:Jn})),a.push(k({pubkey:r.marketProgramId,isWritable:!1}),k({pubkey:r.marketId}),k({pubkey:r.marketBids}),k({pubkey:r.marketAsks}),k({pubkey:r.marketEventQueue}),k({pubkey:r.marketBaseVault}),k({pubkey:r.marketQuoteVault}),k({pubkey:r.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new tn({programId:r.programId,keys:a,data:s})}function Zi(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:r,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return rf(F(R({},a),{amountIn:i,minAmountOut:r}),t);if(s==="out")return sf(F(R({},a),{maxAmountIn:i,amountOut:r}),t);Ac.logWithError("invalid params","params",o)}throw Ac.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function NI({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Es.span);Es.encode({instruction:0,nonce:5,startTime:H(t)},n);let i=Ie(o),r=[k({pubkey:eo,isWritable:!1}),k({pubkey:wc.programId,isWritable:!1}),k({pubkey:nf,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.openOrders}),k({pubkey:i.mintLp.address}),k({pubkey:i.mintA.address,isWritable:!1}),k({pubkey:i.mintB.address,isWritable:!1}),k({pubkey:i.vault.A,isWritable:!1}),k({pubkey:i.vault.B,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:i.id,isWritable:!1}),k({pubkey:i.marketProgramId,isWritable:!1}),k({pubkey:i.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new tn({programId:i.programId,keys:r,data:n})}function hc({poolKeys:o}){let e=_([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new he(o.id),isWritable:!1}),k({pubkey:new he(o.authority),isWritable:!1}),k({pubkey:new he(o.openOrders),isWritable:!1}),k({pubkey:new he(o.vault.A),isWritable:!1}),k({pubkey:new he(o.vault.B),isWritable:!1}),k({pubkey:new he(o.mintLp.address),isWritable:!1}),k({pubkey:new he(o.marketId),isWritable:!1}),k({pubkey:new he(o.marketEventQueue),isWritable:!1})];return{instruction:new tn({programId:new he(o.programId),keys:n,data:t})}}import{PublicKey as cf}from"@solana/web3.js";import Yo from"bn.js";import{TOKEN_PROGRAM_ID as lf}from"@solana/spl-token";import{PublicKey as af}from"@solana/web3.js";var uf=me("Raydium_liquidity_serum");function Tc({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));i=af.createProgramAddressSync(r,o)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:i,nonce:n}}throw uf.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function $i({programId:o}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function _n({name:o,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function mf({programId:o,marketId:e}){let{publicKey:t}=se([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Xs({programId:o}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Ic({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=_n({name:"amm_associated_seed",programId:a,marketId:t}),l=_n({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Xs({programId:a}),p=_n({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=_n({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=_n({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=mf({programId:a,marketId:t}),g=_n({name:"target_associated_seed",programId:a,marketId:t}),A=_n({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=Tc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:cf.default,configId:$i({programId:a})}}var Us;async function HI({connection:o,poolKeysList:e,config:t}){Us||(Us=new $n({connection:o}),await Us.initStableModelLayout());let n=e.map(s=>hc({poolKeys:s}));return(await Ya(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=ja(s,"GetPoolData"),c=new Yo(Yt(a,"status")),u=Number(Yt(a,"coin_decimals")),l=Number(Yt(a,"pc_decimals")),m=Number(Yt(a,"lp_decimals")),d=new Yo(Yt(a,"pool_coin_amount")),p=new Yo(Yt(a,"pool_pc_amount")),y=new Yo(Yt(a,"pool_lp_supply")),f="0";try{f=Yt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Yo(f)}})}var Gs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Ji=o=>{let e={},t=lf.toBase58();return Object.keys(o).map(n=>{let i=o[n],[r,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:it({address:r,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:it({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new O(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new O(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:Gs,week:Gs,month:Gs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:$i({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:it({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import He from"bn.js";var jo=class extends Ke{constructor(t){super(t);this.stableLayout=new $n({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:r}){let s=new He(new O(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=ji(t[r?"mintB":"mintA"]),[c,u]=[new He(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new He(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new He(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=Ge;s.isZero()||(d=m==="base"?Ti(s.mul(u),c):Ti(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ti(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let y=new Ce(new He(1)).add(i),f=new Ce(new He(1)).sub(i),b=y.mul(d).quotient,g=f.mul(d).quotient,A=new be(a,d),w=new be(a,b),h=new be(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:A,maxAnotherAmount:w,minAnotherAmount:h,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),A=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let w=await d.getCreatedTokenAccount({mint:new rt(n.lpMint.address)}),h=[f,b],I=[g,A],T=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(h.reverse(),I.reverse(),T.reverse(),B=c==="a"?"quote":"base"):S==="base"&&(B=c==="a"?"base":"quote");let[C,x]=h,[L,W]=I,[v,Z]=T,X=i!=null?i:await this.getAmmPoolKeys(n.id),q=this.createTxBuilder(),Gt=await d.handleTokenAccount({side:"in",amount:v,mint:C.mint,tokenAccount:L,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:ze}=Gt,on=Me(Gt,["tokenAccount"]);q.addInstruction(on);let ai=await d.handleTokenAccount({side:"in",amount:Z,mint:x.mint,tokenAccount:W,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Fe}=ai,Pt=Me(ai,["tokenAccount"]);q.addInstruction(Pt);let ui=await d.handleTokenAccount({side:"out",amount:0,mint:new rt(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:xt}=ui,Et=Me(ui,["tokenAccount"]);return q.addInstruction(Et),q.addInstruction({instructions:[Pc({poolInfo:n,poolKeys:X,userKeys:{baseTokenAccount:ze,quoteTokenAccount:Fe,lpTokenAccount:xt,owner:this.scope.ownerPubKey},baseAmountIn:v,quoteAmountIn:Z,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),q.addCustomComputeBudget(m),l===0&&await q.buildV0(),q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,y]=[new rt(n.mintA.address),new rt(n.mintB.address),new rt(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),A=await f.getCreatedTokenAccount({mint:p}),w=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:I}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:T}=x,S=Me(x,["tokenAccount"]);w.addInstruction(S);let L=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:A,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:B}=L,C=Me(L,["tokenAccount"]);return w.addInstruction(C),w.addInstruction({instructions:[qs({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),w.addCustomComputeBudget(l),u===0?await w.buildV0():w.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=to,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||le(this.scope.ownerPubKey,q.accountInfo.mint,to).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let A=g[t.lpMint.address];if(A===void 0)throw Error("find lp account error in trade accounts");let w=i.add(a!=null?a:new He(0)),h=t.mintA.address===we.WSOL.mint.toString(),I=t.mintB.address===we.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let q=kt[s.programId],ze=nt({programId:new rt(s.programId),poolId:new rt(s.id),owner:this.scope.ownerPubKey,version:q}),on,Fe=await this.scope.connection.getAccountInfo(ze);if(Fe&&(on=Zn(q).decode(Fe.data)),q!==6&&!on){let{instruction:rn,instructionType:br}=Mo({id:new rt(s.id),programId:new rt(s.programId),version:q,ledger:ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[rn],instructionTypes:[br]})}let Pt=[];for(let rn of s.rewardInfos){let br=rn.mint.address===we.WSOL.mint.toString();if(g[rn.mint.address])Pt.push(g[rn.mint.address]);else{let{account:ua,instructionParams:ca}=await this.scope.account.getOrCreateTokenAccount({mint:new rt(rn.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!br,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});ua||this.logAndCreateError("farm reward account not found:",rn.mint.address),ca&&b.addInstruction(ca),Pt.push(ua)}}let xt=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Et={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:xt,lpAccount:A,rewardAccounts:Pt},Gt=kt[s.programId],ai=Gt===6?No(Et):Gt===5?_o(Et):vo(Et),ui={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[ai],instructionTypes:[ui[Gt]]})}let x=await this.getAmmPoolKeys(t.id),L=qs({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:A,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:w,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[W,v]=t.mintA.address===n.mintA.address?[T,B]:[B,T],Z=await this.scope.clmm.getClmmPoolKeys(n.id),X=await ke.openPositionFromBaseInstructions(F(R({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:W,tokenAccountB:v},withMetadata:"create"},r),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...X.instructions],signers:X.signers,instructionTypes:[...X.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var W;let b=u.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),g=u.useSOLBalance&&i.mint.equals(Bc),A=u.useSOLBalance&&r.mint.equals(Bc),w=this.createTxBuilder(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});w.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:A?{payer:b,amount:a}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:l,checkCreateATAOwner:m});if(w.addInstruction(S||{}),h===void 0||T===void 0)throw Error("you don't has some token account");let B=Ic({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:r.mint,baseDecimals:i.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:L}=kc(F(R({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:T,userLpVault:le(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[x],instructionTypes:[L]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=$i({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return dc.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:r,slippage:s}){let[a,c]=[i.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,A=t.version===4,w;if(A)w=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let v=gc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?w=new O(1e6).div(v*1e6):w=new O(v*1e6).div(1e6)}let h=n,I=new He(0),T=new He(0);if(!h.isZero())if(A){T=Lt(h.mul(_s),Hi);let v=h.sub(T),Z=y.add(v);I=f.mul(v).div(Z)}else{T=h.mul(new He(2)).div(new He(1e4));let v=h.sub(T);p==="quote"?I=new He(yc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),v.toNumber())):I=new He(bc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),v.toNumber()))}let S=new He(new O(I.toString()).mul(1-s).toFixed(0)),B=I,C=S,x=new O(I.toString()).div(new O(h.sub(T).toString()).toFixed(0));!h.isZero()&&!I.isZero()&&(x=new O(I.toString()).div(10**g).div(new O(h.sub(T).toString()).div(10**b)));let L=w.sub(x).div(w).mul(100);return{amountOut:B,minAmountOut:C,currentPrice:w,executionPrice:x,priceImpact:L,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new O(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new He(0),A=n;if(!A.isZero()){A.gt(f)&&(A=f.sub(new He(1)));let C=f.sub(A);g=y.mul(A).div(C).mul(Hi).div(Hi.sub(_s))}let w=new He(new O(g.toString()).mul(1+s).toFixed(0)),h=g,I=w;this.logDebug("amountIn:",new O(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!A.isZero()&&(T=new O(A.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(h.toString()),B=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:h,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),A=y&&b.address===j.toBase58(),{account:w,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(h||{}),w||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:w,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:A,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),m.addInstruction({instructions:[Zi({version:B,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:i,amountOut:r,fixedSide:a})],instructionTypes:[B===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await De(this.scope.connection,t.map(l=>({pubkey:new rt(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Qo.decode(m.accountInfo.data);r[String(t[l])]=F(R({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await De(this.scope.connection,s.map(l=>({pubkey:new rt(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new He(df.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(R({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Ji({[t]:n}),r=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as z}from"@solana/web3.js";import yt from"bn.js";import{AccountLayout as xc,TOKEN_PROGRAM_ID as Ho}from"@solana/spl-token";var Zo=class extends Ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var w;let{programId:t,owner:n=((w=this.scope.owner)==null?void 0:w.publicKey)||z.default,mint1:i,mint2:r,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new yt(new z(i.address).toBuffer()).gt(new yt(new z(r.address).toBuffer()))?[r,i,new O(1).div(a)]:[i,r,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),A=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(A),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:F(R({},A.address),{programId:t.toString(),id:A.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:A.address.mintAVault.toString(),B:A.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:R({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:A.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Xu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,A=n.useSOLBalance&&e.mintA.address===j.toString(),w=n.useSOLBalance&&e.mintB.address===j.toString(),[h,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let x=t||await this.getClmmPoolKeys(e.id),L=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:F(R({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:R({},L.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,A=n.useSOLBalance&&e.mintA.address===j.toBase58(),w=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});h&&(b=h),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),C=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:r,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(C),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===j.toString(),g=c.useSOLBalance&&t.mintB.address===j.toString(),{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A&&(y=A),p.addInstruction(w||{});let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h&&(f=h),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(A||{});let{account:w,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});w&&(y=w),d.addInstruction(h||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:r,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=r.useSOLBalance&&t.mintA.address===j.toString(),f=r.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=A,w&&p.addInstruction(w);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=h,I&&p.addInstruction(I);let T=[];for(let x of t.rewardDefaultInfos){let L=r.useSOLBalance&&x.mint.address===j.toString(),W;if(x.mint.address===t.mintA.address)W=b;else if(x.mint.address===t.mintB.address)W=g;else{let{account:v,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(x.mint.programId),mint:new z(x.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});W=v,Z&&p.addInstruction(Z)}T.push(W)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),B=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:B.instructions,instructionTypes:[E.ClmmDecreasePosition]});let C=R({},B.address);if(r.closePosition){let x=await ke.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i});p.addInstruction({endInstructions:x.instructions,endInstructionTypes:x.instructionTypes}),C=R(R({},C),x.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:C}})}async lockPosition(e){let{programId:t=zn,authProgramId:n=yo,poolProgramId:i=In,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:c}=e,u=this.createTxBuilder(),l=await ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint});return u.addInstruction(l),u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:l.address})}async harvestLockPosition(e){let{programId:t=zn,authProgramId:n=yo,clmmProgram:i=In,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=Xo.decode(y.data),b=a.useSOLBalance&&d.mintA.address===j.toString(),g=a.useSOLBalance&&d.mintB.address===j.toString(),A,w,{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new z(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A=h,I&&p.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new z(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});w=T,S&&p.addInstruction(S);let B={},C=[];for(let Fe of d.rewardInfos){let Pt=a.useSOLBalance&&Fe.mint.address===j.toString(),xt=B[Fe.mint.address];if(!xt){let{account:Et,instructionParams:Gt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(Fe.mint.programId),mint:new z(Fe.mint.address),notUseTokenAccount:Pt,owner:this.scope.ownerPubKey,skipCloseAccount:!Pt,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Pt?!1:c});xt=Et,Gt&&p.addInstruction(Gt)}B[Fe.mint.address]=xt,C.push(xt)}let x=Wo(t,s.lockNftMint).publicKey,L=le(this.scope.ownerPubKey,s.lockNftMint,Ho).publicKey,W=Y.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),v=Y.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:Z}=de(new z(d.programId),s.poolId,W),{publicKey:X}=de(new z(d.programId),s.poolId,v),{publicKey:q}=Nt(new z(d.programId),s.poolId,f.tickLower,f.tickUpper),ze=[];for(let Fe=0;Fe<d.rewardInfos.length;Fe++)ze.push({poolRewardVault:new z(d.rewardInfos[Fe].vault),ownerRewardVault:C[Fe],rewardMint:new z(d.rewardInfos[Fe].mint.address)});let on=await ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:s.lockOwner,lockNftMint:s.lockNftMint,lockNftAccount:L,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:q,vaultA:new z(d.vault.A),vaultB:new z(d.vault.B),tickArrayLower:Z,tickArrayUpper:X,userVaultA:A,userVaultB:w,mintA:new z(d.mintA.address),mintB:new z(d.mintB.address),rewardAccounts:ze});return p.addInstruction({instructions:[on],instructionTypes:[E.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=ke.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return r.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(n.mint.address),mint:new z(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new yt(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=ke.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new z(n.mint.programId),mint:new z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new yt(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=ke.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new z(m.mint.programId),mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});l=R(R({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new yt(new O(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new yt(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=ke.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});u.addInstruction(b),l=R(R({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(j),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:i,checkCreateATAOwner:r});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=ke.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=R(R({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),A;!s||s.equals(new O(0))?A=f?Tt.add(new yt(1)):It.sub(new yt(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!w||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:h},inputMint:new z(n),amountIn:i,amountOutMin:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),A;!s||s.equals(new O(0))?A=n.toString()===e.mintB.address?Tt.add(new yt(1)):It.sub(new yt(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!w||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:h},outputMint:new z(n),amountOut:i,amountInMax:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var d;let l={};for(let p of this.scope.account.tokenAccountRawInfos)r?le(this.scope.ownerPubKey,p.accountInfo.mint,a).publicKey.equals(p.pubkey)&&(l[p.accountInfo.mint.toString()]=p.pubkey):l[p.accountInfo.mint.toString()]=p.pubkey;let m=this.createTxBuilder();for(let p of Object.values(e)){if(t[p.id]===void 0||!t[p.id].find(T=>!T.liquidity.isZero()||T.rewardInfos.find(S=>!S.rewardAmountOwed.isZero())))continue;let y=p,f=i.useSOLBalance&&y.mintA.address===j.toString(),b=i.useSOLBalance&&y.mintB.address===j.toString(),g=l[y.mintA.address];if(!g){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new z(y.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:f?!1:r,checkCreateATAOwner:s});g=T,S&&m.addInstruction(S)}let A=l[y.mintB.address];if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new z(y.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:b?!1:r,checkCreateATAOwner:s});A=T,S&&m.addInstruction(S)}l[y.mintA.address]=g,l[y.mintB.address]=A;let w=[];for(let T of y.rewardDefaultInfos){let S=i.useSOLBalance&&T.mint.address===j.toString(),B=l[T.mint.address];if(!B){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(T.mint.programId),mint:new z(T.mint.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r});B=C,x&&m.addInstruction(x)}l[T.mint.address]=B,w.push(B)}let h=await this.getClmmPoolKeys(y.id),I=[];for(let T=0;T<h.rewardInfos.length;T++)I.push({poolRewardVault:new z(h.rewardInfos[T].vault),ownerRewardVault:w[T],rewardMint:new z(h.rewardInfos[T].mint.address)});for(let T of t[p.id]){let S=(d=n==null?void 0:n[p.id])==null?void 0:d[T.nftMint.toBase58()];if(S){let B=le(this.scope.ownerPubKey,S.lockNftMint,Ho).publicKey,C=Y.getTickArrayStartIndexByTick(T.tickLower,h.config.tickSpacing),x=Y.getTickArrayStartIndexByTick(T.tickUpper,h.config.tickSpacing),{publicKey:L}=de(new z(h.programId),S.poolId,C),{publicKey:W}=de(new z(h.programId),S.poolId,x),{publicKey:v}=Nt(new z(h.programId),S.poolId,T.tickLower,T.tickUpper),Z=Wo(zn,S.lockNftMint).publicKey,X=ke.harvestLockPositionInstructionV2({programId:zn,auth:yo,lockPositionId:Z,clmmProgram:In,lockOwner:S.lockOwner,lockNftMint:S.lockNftMint,lockNftAccount:B,positionNftAccount:S.nftAccount,positionId:S.positionId,poolId:S.poolId,protocolPosition:v,vaultA:new z(h.vault.A),vaultB:new z(h.vault.B),tickArrayLower:L,tickArrayUpper:W,userVaultA:g,userVaultB:A,mintA:new z(h.mintA.address),mintB:new z(h.mintB.address),rewardAccounts:I});m.addInstruction({instructions:[X],instructionTypes:[E.ClmmHarvestLockPosition],lookupTableAddress:h.lookupTableAccount?[h.lookupTableAccount]:[]})}else{let B=ke.decreaseLiquidityInstructions({poolInfo:y,poolKeys:h,ownerPosition:T,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A,rewardAccounts:w},liquidity:new yt(0),amountMinA:new yt(0),amountMinB:new yt(0)});m.addInstruction(B)}}}return c===0?m.sizeCheckBuildV0({computeBudgetConfig:u}):m.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Do(e).publicKey);return t?rc.decode(t.data).whitelistMints.filter(i=>!i.equals(z.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new yt(1))).map(s=>ct(new z(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return i.forEach(s=>{if(!s)return;let a=Xo.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await De(this.scope.connection,e.map(r=>({pubkey:new z(r)})),t),i={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=Rn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[r])]=F(R({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await De(this.scope.connection,Array.from(n).map(c=>({pubkey:new z(c)}))),r={};i.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=oc.decode(c.accountInfo.data))});let s=await Re.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:it({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ho.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?gn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:it({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ho.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?gn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(R({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Re.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await Wn({connection:this.scope.connection,mints:Array.from(n).map(m=>new z(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await De(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=tc(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(xc.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(xc.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(R({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(z.default)).map(m=>({mint:it({address:m.tokenMint.toBase58(),programId:Ho.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as G}from"@solana/web3.js";import{AccountLayout as Kf,NATIVE_MINT as cr,TOKEN_PROGRAM_ID as Vt}from"@solana/spl-token";import Qs from"bn.js";import or from"decimal.js-light";import $o from"bn.js";function er(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function pf(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=er(o,e);return n.gt(no)&&(t=t.add(new $o(1)),e=o.div(t),n=er(o,t),n.gt(no)&&(e=e.add(new $o(1)))),[t,e]}var no=new $o(0),tr=class{static swapWithoutFees(e,t,n){let i=t.mul(n),r=t.add(e),[s,a]=pf(i,r),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,r){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return er(e.mul(n),t).gt(no)&&s.gt(no)&&(s=s.add(new $o(1))),er(e.mul(i),t).gt(no)&&a.gt(no)&&(a=a.add(new $o(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Cc from"bn.js";var zs=new Cc(1e6);function ff(o,e,t){return o.mul(e).add(t).sub(new Cc(1)).div(t)}function Kc(o,e,t){return o.mul(e).div(t)}var nr=class{static tradingFee(e,t){return ff(e,t,zs)}static protocolFee(e,t){return Kc(e,t,zs)}static fundFee(e,t){return Kc(e,t,zs)}};var Sc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Sc||{}),ir=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let r=nr.tradingFee(e,i),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:c}=tr.swapWithoutFees(s,t,n),u=a.add(r);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:r,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,r,e.decimals,t.decimals,e.address]:[r,i,t.decimals,e.decimals,t.address],p=new or(u.toString()).div(10**m).div(new or(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new Qs(1)):a,f=u.sub(y),b=Lt(c.mul(y),f),g=Lt(b.mul(new Qs(1e6)),new Qs(1e6).sub(n)),A=g.sub(b),w=new or(y.toString()).div(10**m).div(new or(g.toString()).div(10**l)),h=p.isZero()?0:w.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:A,priceImpact:h}}};import Le from"bn.js";import{PublicKey as Jo,TransactionInstruction as vn,Keypair as If,SystemProgram as Bf}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Oc,TOKEN_2022_PROGRAM_ID as js,TOKEN_PROGRAM_ID as An}from"@solana/spl-token";var yf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),bf=Buffer.from("amm_config","utf8"),gf=Buffer.from("pool","utf8"),Af=Buffer.from("pool_lp_mint","utf8"),wf=Buffer.from("pool_vault","utf8"),Pf=Buffer.from("observation","utf8");function oo(o){return se([yf],o)}function Ax(o,e){return se([bf,hf(e)],o)}function Ys(o,e,t,n){return se([gf,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function kf(o,e){return se([Af,e.toBuffer()],o)}function Rc(o,e,t){return se([wf,e.toBuffer(),t.toBuffer()],o)}function rr(o,e){return se([Pf,e.toBuffer()],o)}function hf(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Lc({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let r=oo(e).publicKey,s=o||Ys(e,t,n,i).publicKey,a=kf(e,s).publicKey,c=Rc(e,s,n).publicKey,u=Rc(e,s,i).publicKey,l=rr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Tf=Buffer.from("locked_liquidity","utf8");function sr(o,e){return se([Tf,e.toBuffer()],o)}var xf=me("Raydium_cpmm"),Vn={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function Mc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w){let h=_([P("amountMaxA"),P("amountMaxB"),P("openTime")]),I=Ys(o,t,r,s).publicKey,T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(I),isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Oc,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:A,openTime:w},S),new vn({keys:T,programId:o,data:Buffer.from([...Vn.initialize,...S])})}function Nc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=_([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:js,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return xf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new vn({keys:b,programId:o,data:Buffer.from([...Vn.deposit,...g])})}function _c(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=_([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:js,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:mn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new vn({keys:b,programId:o,data:Buffer.from([...Vn.withdraw,...g])})}function ar(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f){let b=_([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},A),new vn({keys:g,programId:o,data:Buffer.from([...Vn.swapBaseInput,...A])})}function vc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f){let b=_([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},A),new vn({keys:g,programId:o,data:Buffer.from([...Vn.swapBaseOutput,...A])})}async function Vc(o){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,r=[],[s,a]=[new Jo(t.id),new Jo(t.lpMint.address)],c;if(i)c=new Jo((await i(1))[0]);else{let b=If.generate();r.push(b),c=b.publicKey}let{publicKey:u}=le(e.feePayer,c,An),{publicKey:l}=Sn(c),{publicKey:m}=sr(o.lockProgram,c),{publicKey:d}=le(e.feePayer,a,An),{publicKey:p}=le(o.lockAuthProgram,a,An),y=Sf({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new Jo(n.vault.A),poolVaultB:new Jo(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(f=o.withMetadata)!=null?f:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[E.CpmmLockLp],lookupTableAddress:[]}}function Sf({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Bf.programId,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:Oc,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1}],A=_([P("lpAmount"),Ee("withMetadata")]),w=Buffer.alloc(A.span);A.encode({lpAmount:f,withMetadata:b},w);let h=Buffer.from([...Vn.lockCpLiquidity,...w]);return new vn({keys:g,programId:o,data:h})}function Ec({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:f!=null?f:bo,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Gr,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:js,isSigner:!1,isWritable:!1},{pubkey:mn,isSigner:!1,isWritable:!1}],A=_([P("lpFeeAmount")]),w=Buffer.alloc(A.span);A.encode({lpFeeAmount:y},w);let h=Buffer.from([...Vn.collectCpFee,...w]);return new vn({keys:g,programId:o,data:h})}var Fc=_([Ae(8),D("bump"),Ee("disableCreatePool"),jt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),Q(P(),16)]),ur=_([Ae(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),Q(P(),32)]);var ei=class extends Ke{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await De(this.scope.connection,e.map(m=>({pubkey:new G(m)}))),i={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=ur.decode(d.accountInfo.data);i[String(e[m])]=F(R({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await De(this.scope.connection,m.map(p=>({pubkey:new G(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Fc.decode(y.data)}}let c={},u=await De(this.scope.connection,s.map(m=>({pubkey:new G(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Le(Kf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(R({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let r=e[i],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return F(R({},n),{[i]:F(R({},r),{id:new G(i),configInfo:r.configInfo,version:7,authority:oo(r.programId).publicKey,mintA:it({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?gn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:it({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?gn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Wn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=it({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?gn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=it({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?gn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=it({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Vt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new O(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new O(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:oo(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=Me(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var Z,X,q;let y=r.feePayer||((Z=this.scope.owner)==null?void 0:Z.publicKey),f=new Le(new G(m.mintA.address).toBuffer()).lte(new Le(new G(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[A,w]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],h=r.useSOLBalance&&b.address===cr.toBase58(),I=r.useSOLBalance&&g.address===cr.toBase58(),[T,S]=[new G(b.address),new G(g.address)],B=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:y,amount:A}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:s,checkCreateATAOwner:a});B.addInstruction(x||{});let{account:L,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({mint:new G(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:y,amount:w}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:s,checkCreateATAOwner:a});if(B.addInstruction(W||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let v=Lc({poolId:e,programId:t,configId:new G(u.id),mintA:T,mintB:S});return B.addInstruction({instructions:[Mc(t,this.scope.ownerPubKey,new G(u.id),v.authority,v.poolId,T,S,v.lpMint,C,L,le(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new G((X=b.programId)!=null?X:Vt),new G((q=g.programId)!=null?q:Vt),v.observationId,A,w,i)],instructionTypes:[E.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.versionBuild({txVersion:c,extInfo:{address:F(R({},v),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(R({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Ce(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(i.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),A=g.amount,w=t.mintA.address===cr.toString(),h=t.mintB.address===cr.toString(),I=this.createTxBuilder(),[T,S]=[new G(t.mintA.address),new G(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||(r?i:A).isZero()?{payer:this.scope.ownerPubKey,amount:r?i:A}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(C||{});let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(r?A:i).isZero()?{payer:this.scope.ownerPubKey,amount:r?A:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(L||{}),!B&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new G(t.lpMint.address)}),ze=await m.handleTokenAccount({side:"out",amount:0,mint:new G(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:v}=ze,Z=Me(ze,["tokenAccount"]);I.addInstruction(Z);let X=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Ce(new Le(1)).sub(s);return I.addInstruction({instructions:[Nc(new G(t.programId),this.scope.ownerPubKey,new G(X.authority),new G(t.id),v,B,x,new G(X.vault.A),new G(X.vault.B),T,S,new G(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,r?b.amount:A,r?A:b.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var v,Z;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Ce(new Le(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(i.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(i.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,A]=[new G(t.mintA.address),new G(t.mintB.address)],w=g.equals(j),h=A.equals(j),I,T,{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});I=S,B&&b.addInstruction(B);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});T=C,x&&b.addInstruction(x),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new G(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let W=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[_c(new G(t.programId),this.scope.ownerPubKey,new G(W.authority),new G(t.id),L,I,T,new G(W.vault.A),new G(W.vault.B),g,A,new G(t.lpMint.address),i,l.sub((v=p.fee)!=null?v:new Le(0)),m.sub((Z=y.fee)!=null?Z:new Le(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,L,W,v,Z;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new G(t.mintA.address),new G(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Le((1+c)*1e4)).div(new Le(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Le((1-c)*1e4)).div(new Le(1e4));let A=t.mintA.address===j.toBase58(),w=t.mintB.address===j.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new G((C=t.mintA.programId)!=null?C:Vt),owner:this.scope.ownerPubKey,createInfo:A||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new G((x=t.mintB.programId)!=null?x:Vt),owner:this.scope.ownerPubKey,createInfo:w||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!h||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:T,mintAUseSOLBalance:A,mintBUseSOLBalance:w,associatedOnly:y});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?vc(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),i?h:T,i?T:h,new G(B.vault[i?"A":"B"]),new G(B.vault[i?"B":"A"]),new G((v=t[i?"mintA":"mintB"].programId)!=null?v:Vt),new G((Z=t[i?"mintB":"mintA"].programId)!=null?Z:Vt),i?b:g,i?g:b,rr(new G(t.programId),new G(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):ar(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),i?h:T,i?T:h,new G(B.vault[i?"A":"B"]),new G(B.vault[i?"B":"A"]),new G((L=t[i?"mintA":"mintB"].programId)!=null?L:Vt),new G((W=t[i?"mintB":"mintA"].programId)!=null?W:Vt),i?b:g,i?g:b,rr(new G(t.programId),new G(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?E.CpmmSwapBaseOut:E.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await Vc({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:go,lockAuthProgram:(d=e.authProgram)!=null?d:Ao,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(i),s.versionBuild({txVersion:r,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:r=go,authProgram:s=Ao,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new G(t.mintA.address),new G(t.mintB.address)],y=d.equals(j),f=p.equals(j),b,g,{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=A,w&&m.addInstruction(w);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=h,I&&m.addInstruction(I),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let T=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=le(l,i,Vt),{publicKey:B}=sr(r,i),{publicKey:C}=le(s,new G(t.lpMint.address),Vt);return m.addInstruction({instructions:[Ec({programId:r!=null?r:go,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:Ao,nftMint:i,nftAccount:S,lockPda:B,poolId:new G(t.id),mintLp:new G(T.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new G(T.vault.A),poolVaultB:new G(T.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[E.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let r=n.toString()===e.mintB.address,s=ir.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Le((1-i)*1e4)).div(new Le(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:r,epochInfo:s,baseIn:a}){var h,I,T,S,B,C,x,L,W;let c=1-Number(r.toSignificant())/100,u=new Le(new O(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Le(0)),d=new Le(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(T=(I=l.fee)==null?void 0:I.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:Ge,fee:void 0,expirationTime:void 0};if(!m.isZero()){let v=Cf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:v.amountA.toString(),amountB:v.amountB.toString()}),f=ge(v[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ce(new Le(1)).add(r),g=new Ce(new Le(1)).sub(r),A=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Le(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),w=ge(g.mul(f.amount.sub((B=f.fee)!=null?B:new Le(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(W=(L=A.fee)==null?void 0:L.toString())!=null?W:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:A,minAnotherAmount:w,liquidity:y}}};function Cf(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Le(1)));let r=o.mul(t).div(n);return!r.isZero()&&!o.mul(t).mod(n).isZero()&&(r=r.add(new Le(1))),{amountA:i,amountB:r}}import{PublicKey as Fn}from"@solana/web3.js";import{createTransferInstruction as Xc,TOKEN_PROGRAM_ID as Oe,TOKEN_2022_PROGRAM_ID as dr}from"@solana/spl-token";import pr from"bn.js";var Dc={[Ci.toBase58()]:3},Wc={3:Ci};var Hs=_([Ae(5),Ae(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Ae(7)]),qc={3:Hs};import{PublicKey as Uc}from"@solana/web3.js";var lr=me("Serum"),mr=class{static getProgramId(e){let t=Wc[e];return t||lr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Dc[t];return n||lr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=qc[e];return t||lr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,r;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));r=Uc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:r,nonce:i}}return lr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Uc.default,nonce:i}}};import{PublicKey as $,SystemProgram as Zs,TransactionInstruction as $s}from"@solana/web3.js";import En from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Rf,TOKEN_2022_PROGRAM_ID as Lf,TOKEN_PROGRAM_ID as Js}from"@solana/spl-token";function FS(o,e,t,n,i,r,s,a,c,u,l,m){let d=_([D("instruction"),P("amountIn"),P("amountOut")]),p=[{pubkey:Zs.programId,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},{pubkey:new $(t.programId),isSigner:!1,isWritable:!1},{pubkey:new $(t.id),isSigner:!1,isWritable:!0},{pubkey:new $(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ie(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new $s({keys:p,programId:o,data:y})}function DS(o,e,t,n,i,r,s,a,c,u){let l=_([D("instruction")]),m=[{pubkey:Zs.programId,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},{pubkey:new $(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new $(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new $(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ie(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new $s({keys:m,programId:o,data:d})}function Of(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[k({pubkey:Js,isWritable:!1}),k({pubkey:Lf,isWritable:!1}),k({pubkey:Rf,isWritable:!1}),k({pubkey:Zs.programId,isWritable:!1}),k({pubkey:e,isSigner:!0})];b.push(k({pubkey:t})),b.push(k({pubkey:i}));let g=[c,u],A=[l,m],w=[r,s,a];for(let S=0;S<g.length;S++){let B=g[S],C=w[S]===B.mintA.address;if(b.push(k({pubkey:new $(B.programId),isWritable:!1})),S===g.length-1?b.push(k({pubkey:i})):b.push(k({pubkey:n})),b.push(k({pubkey:new $(w[S])})),b.push(k({pubkey:new $(w[S+1])})),B.version===6){let x=A[S];b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(B.observationId)})),b.push(k({pubkey:mn})),b.push(k({pubkey:ft(new $(B.programId),new $(B.id)).publicKey})),f.push(Mf(B.sqrtPriceX64.toString(),C));for(let L of(T=y[S])!=null?T:[])b.push(k({pubkey:new $(L)}))}else if(B.version===5){let x=A[S];b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(x.marketProgramId)})),b.push(k({pubkey:new $(x.marketAuthority)})),b.push(k({pubkey:Za,isWritable:!1})),b.push(k({pubkey:new $(x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.marketId)})),b.push(k({pubkey:new $(x.marketBids)})),b.push(k({pubkey:new $(x.marketAsks)})),b.push(k({pubkey:new $(x.marketEventQueue)})),b.push(k({pubkey:new $(x.marketBaseVault)})),b.push(k({pubkey:new $(x.marketQuoteVault)}))}else if(B.version===4){let x=A[S],L=B.status!==1;b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(L?x.id:x.marketProgramId)})),b.push(k({pubkey:new $(L?x.id:x.marketAuthority)})),b.push(k({pubkey:new $(L?x.id:x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(L?x.id:x.marketId)})),b.push(k({pubkey:new $(L?x.id:x.marketBids)})),b.push(k({pubkey:new $(L?x.id:x.marketAsks)})),b.push(k({pubkey:new $(L?x.id:x.marketEventQueue)})),b.push(k({pubkey:new $(L?x.id:x.marketBaseVault)})),b.push(k({pubkey:new $(L?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=A[S];b.push(k({pubkey:new $(x.authority)})),b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(B.observationId)}))}else throw Error("pool type error")}let h=_([D("insId"),P("amountIn"),P("amountOut"),Q(ee(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new $s({keys:b,programId:o,data:I})}function Mf(o,e){if(o)if(e){let t=new En(o).div(new En(25));return t.gt(Gi)?t:Gi}else{let t=new En(o).mul(new En(25));return t.lt(Xi)?t:Xi}else return e?Gi:Xi}function Gc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?Tt.add(At):It.sub(At);return ke.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?r:new En(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[ar(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Zi({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new En(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Of(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new En(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var nn=new pr(0),ti=class extends Ke{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(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:i=1}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=H(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(s.addInstruction({instructions:[Zt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):s.addInstruction({instructions:[Zt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),r=await $t({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:i,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(j),m=u.amount.token.mint.equals(j),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?dr:Oe,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?dr:Oe);else{let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?dr:Oe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=h,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[Zt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Oe})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let h=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?dr:Oe)}let A=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=Gc({routeProgram:r,inputMint:d,swapInfo:F(R({},e),{poolInfo:[...e.poolInfoList],poolKey:A,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[Xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),h.addInstruction(w);let{transactions:I}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[Xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Ur,clmm:n=In,cpmm:i=bo}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Qo.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Rn.span}],dataSlice:{offset:Rn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:ur.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:r}){e=e.toString()===Fn.default.toString()?j:e,t=t.toString()===Fn.default.toString()?j:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Ji(r),a={};Object.values(s).forEach(f=>{i.delete(f.mintA.address),a[f.mintA.address]={address:new Fn(f.mintA.address),programId:Oe,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(f.mintB.address),a[f.mintB.address]={address:new Fn(f.mintB.address),programId:Oe,mintAuthority:null,supply:BigInt(0),decimals:f.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(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Oe)?(i.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(b),f.mintProgramB.equals(Oe)?(i.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Wn({connection:this.scope.connection,mints:Array.from(i).map(f=>new Fn(f))});a=R(R({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(R({},f),{[b]:F(R({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,w,h,I,T,S,B,C;let m=l===void 0?new pr(0):e.raw.mul(new pr(l.feeBps.toNumber())).div(new pr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(R({},t),{address:bt(t.address).toString()}),b=[];for(let x of n)try{b.push(F(R({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",x.version,x.id.toString(),L.message)}this.logDebug("direct done");for(let[x,L]of Object.entries(i)){let W={chainId:101,address:x,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},v=L.in.map(X=>{try{return{pool:X,data:this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:W,amountIn:p})}}catch(q){this.logDebug("route in error",X.version,X.id.toString(),q.message);return}}).sort((X,q)=>{var Fe,Pt,xt,Et;let ze=X===void 0?nn:X.data.amountOut.amount.raw.sub((Pt=(Fe=X.data.amountOut.fee)==null?void 0:Fe.raw)!=null?Pt:nn),on=q===void 0?nn:q.data.amountOut.amount.raw.sub((Et=(xt=q.data.amountOut.fee)==null?void 0:xt.raw)!=null?Et:nn);return ze.lt(on)?1:-1})[0];if(v===void 0)continue;let Z=new be(ji(W),v.data.amountOut.amount.raw.sub((A=(g=v.data.amountOut.fee)==null?void 0:g.raw)!=null?A:nn));for(let X of L.out)try{let q=this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:Z});b.push(F(R({},q),{allTrade:!!(v.data.allTrade&&q.allTrade),amountIn:v.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new O(new Qe({baseToken:v.data.amountIn.amount.token,denominator:v.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((h=(w=q.amountOut.fee)==null?void 0:w.raw)!=null?h:nn)}).toFixed()),priceImpact:new O(v.data.priceImpact.add(q.priceImpact).toFixed()),fee:[v.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[v.pool,X],remainingAccounts:[v.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new be(v.data.amountOut.amount.token,((S=(T=v.data.amountOut.fee)==null?void 0:T.raw)!=null?S:nn).add((C=(B=q.amountOut.fee)==null?void 0:B.raw)!=null?C:nn)):void 0,middleToken:v.data.amountOut.amount.token,poolReady:v.data.poolReady&&q.poolReady,poolType:[v.data.poolType,q.poolType],feeConfig:y,expirationTime:Ot(v.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",X.version,X.id.toString(),q.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,L)=>x.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(nn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:w}=Re.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:Ot(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:zo(F(R({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:zo(F(R({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:zo(F(R({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:zo(F(R({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await De(this.scope.connection,Array.from(s).map(l=>({pubkey:new Fn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Hs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:mr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(R({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=R({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Xs({programId:new Fn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:oo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:it({address:u.mintLp.toBase58(),programId:Oe.toBase58(),decimals:u.lpDecimals}),config:F(R({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Nf,Transaction as ea,TransactionInstruction as _f}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as vf}from"@solana/spl-token";import zc from"bn.js";var st=class extends Ke{static getPdaPoolId(e,t){return se([st.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return se([st.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new zc(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>st.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<st.VERSION_PROJECT.length;l++)a.push(...s.map(m=>st.getPdaOwnerId(t,m,i,l).publicKey));let c=await St(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==st.POOL_LAYOUT.span||b.data.length!==st.OWNER_LAYOUT.span)continue;let g=st.POOL_LAYOUT.decode(f.data),A=st.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),h=g.endTime.toNumber(),I=A.tokenInfo.map(B=>B.debtAmount.gt(new zc(0))).filter(B=>!B).length!==3,T=r>w&&r<h&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:A.lpAmount,project:st.VERSION_PROJECT[m],openTime:w,endTime:h,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:A.tokenInfo[C].debtAmount.add(A.tokenInfo[C].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(we.WSOL.mint),associatedOnly:c.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(u)}n.addInstruction({instructions:[st.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(we.WSOL.mint),associatedOnly:m.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[st.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return Ki(c,[i,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ea().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ea().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ea().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=_([]),r=[{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:vf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new _f({keys:r,programId:e,data:a})}},Bt=st;Bt.CLAIMED_NUM=3,Bt.POOL_LAYOUT=_([Ae(8),D("bump"),D("status"),P("openTime"),P("endTime"),K("ammId"),Q(_([D("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),st.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),Bt.OWNER_LAYOUT=_([Ae(8),D("bump"),D("version"),K("poolId"),K("owner"),P("lpAmount"),Q(_([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),st.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),Bt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Nf(e)),Bt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Bt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as ni}from"@solana/web3.js";import oi from"bn.js";import{TOKEN_PROGRAM_ID as Zc}from"@solana/spl-token";import{SystemProgram as Dn,SYSVAR_RENT_PUBKEY as Ef,Transaction as Qc,TransactionInstruction as Ff}from"@solana/web3.js";import{createInitializeAccountInstruction as Yc,TOKEN_PROGRAM_ID as jc}from"@solana/spl-token";function Vf(o="accountFlags"){let e=new Di(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ta=_([Ae(5),Vf("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Ae(7)]);function Df({programId:o,marketInfo:e}){let t=_([D("version"),Je("instruction"),P("baseLotSize"),P("quoteLotSize"),jt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Ef,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),i=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},i),new Ff({keys:n,programId:o,data:i})}async function Hc({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Qc,i=await o.getMinimumBalanceForRentExemption(165);n.add(Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:jc}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:jc}),Yc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Yc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let r=new Qc;return r.add(Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(ta.span),space:ta.span,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Df({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:r,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var io=class extends Ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=dt({fromPublicKey:m,programId:r}),p=dt({fromPublicKey:m,programId:r}),y=dt({fromPublicKey:m,programId:r}),f=dt({fromPublicKey:m,programId:r}),b=dt({fromPublicKey:m,programId:r}),g=dt({fromPublicKey:m,programId:Zc}),A=dt({fromPublicKey:m,programId:Zc}),w=0,h=new oi(100);function I(){let W=new oi(0);for(;;)try{return{vaultOwner:ni.createProgramAddressSync([d.publicKey.toBuffer(),W.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:W}}catch{if(W.iaddn(1),W.gt(new oi(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),B=new oi(Math.round(10**e.decimals*n)),C=new oi(Math.round(n*10**t.decimals*i));if(B.eq(Ge))throw Error("lot size is too small");if(C.eq(Ge))throw Error("tick size or lot size is too small");let x=await Hc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:A,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:w,quoteDustThreshold:h,vaultSignerNonce:S,baseLotSize:B,quoteLotSize:C,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),L=this.createTxBuilder();L.addInstruction({instructions:x[0].transaction.instructions,signers:x[0].signer});for await(let W of x.slice(1,x.length))L.addInstruction({instructions:W.transaction.instructions,signers:W.signer,instructionTypes:W.instructionTypes});return u===0?L.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:A.publicKey,baseMint:new ni(e.mint),quoteMin:new ni(t.mint)}}):L.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:A.publicKey,baseMint:new ni(e.mint),quoteMin:new ni(t.mint)}})}};import{PublicKey as ri}from"@solana/web3.js";import $c from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Wf,TransactionInstruction as oa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ia}from"@solana/spl-token";var na=_([D("instruction"),du("amount")]),ii=_([D("instruction")]);function i0({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:ia,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],i=Buffer.alloc(na.span);return na.encode({instruction:1,amount:Number(e)},i),new oa({keys:n,programId:o,data:i})}function fr({programId:o},e){let t=[{pubkey:ia,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,r])=>({pubkey:r,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(ii.span);return ii.encode({instruction:2},n),new oa({keys:t,programId:o,data:n})}function ra(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(ii.span);ii.encode({instruction:2},s);let a=[{pubkey:ia,isWritable:!1,isSigner:!1},{pubkey:Wf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new oa({programId:e.programId,keys:a,data:s})}var qf={[wo.IDO_PROGRAM_ID_V1.toString()]:1,[wo.IDO_PROGRAM_ID_V2.toString()]:2,[wo.IDO_PROGRAM_ID_V3.toString()]:3,[wo.IDO_PROGRAM_ID_V4.toString()]:4},ro=class extends Ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:r}){let s=this.createTxBuilder(),a=qf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new $c(e.coin).isZero(),!new $c(e.pc).isZero()],m=c.projectInfo.mint.address.equals(j),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(j),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[fr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new ri(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[fr({programId:new ri(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new ri(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[fr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new ri(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new ri(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ra(F(R({},g),{side:"base"}))]:[],...l?[ra(F(R({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as Uf}from"@solana/web3.js";import{MintLayout as Gf,TOKEN_2022_PROGRAM_ID as sa,TOKEN_PROGRAM_ID as aa}from"@solana/spl-token";var si=class extends Ke{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Dt.address,Dt),this._mintGroup.official.add(Dt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(R({},u),{priority:-1}))}),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?sa.toBase58():aa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?sa.toBase58():aa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?sa.toBase58():aa.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Dt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(R({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new Uf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Gf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var yr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Rt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=me("Raydium"),this.farm=new Vo({scope:this,moduleName:"Raydium_Farm"}),this.account=new xo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new jo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new si({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new ti({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Zo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new ei({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Bt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new io({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new ro({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Xf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Ni({cluster:n,timeout:i,urlConfigs:a,logCount:r,logRequests:s}),u=new yr(F(R({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(_i);return this._owner.publicKey}setOwner(e){return this._owner=e?new Rt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(ou);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(_i),new Error(_i)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>F(R({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var sC=o=>o;export{oy as ACCOUNT_TYPE_SIZE,Lg as ALL_PROGRAM_ID,Bp as AMM_CONFIG_SEED,Lm as AMM_STABLE,Ur as AMM_V4,Xy as ANAMint,ve as API_URLS,al as AccountType,Ni as Api,Wu as BIT_PRECISION,Lt as BNDivCeil,Bn as BNLayout,$b as BN_100,Jb as BN_1000,eg as BN_10000,Zb as BN_FIVE,Ea as BN_ONE,Pn as BN_TEN,Hb as BN_THREE,jb as BN_TWO,Ge as BN_ZERO,cw as BitStructure,mu as Blob,yo as CLMM_LOCK_AUTH_ID,zn as CLMM_LOCK_PROGRAM_ID,In as CLMM_PROGRAM_ID,Mr as CLOCK_PROGRAM_ID,Gr as CREATE_CPMM_POOL_AUTH,Vm as CREATE_CPMM_POOL_FEE_ACC,bo as CREATE_CPMM_POOL_PROGRAM,Zo as Clmm,oc as ClmmConfigLayout,ke as ClmmInstrument,tr as ConstantProductCurve,Fc as CpmmConfigInfoLayout,nr as CpmmFee,ur as CpmmPoolInfoLayout,mo as Currency,wn as CurrencyAmount,ir as CurveCalculator,Og as DEVNET_PROGRAM_ID,gA as DEV_API_URLS,Fm as DEV_CREATE_CPMM_POOL_AUTH,Dm as DEV_CREATE_CPMM_POOL_FEE_ACC,Em as DEV_CREATE_CPMM_POOL_PROGRAM,qm as DEV_LOCK_CPMM_AUTH,Wm as DEV_LOCK_CPMM_PROGRAM,Xp as DataElement,zy as ETHMint,Ls as EXTENSION_TICKARRAY_BITMAP_SIZE,Cu as FARM_LOCK_MINT,Ru as FARM_LOCK_VAULT,Wr as FARM_PROGRAM_ID_V3,qr as FARM_PROGRAM_ID_V5,Xn as FARM_PROGRAM_ID_V6,kt as FARM_PROGRAM_TO_VERSION,Ou as FARM_VERSION_TO_LEDGER_LAYOUT,Lu as FARM_VERSION_TO_STATE_LAYOUT,Rg as FEE_DESTINATION_ID,zi as FEE_RATE_DENOMINATOR,zs as FEE_RATE_DENOMINATOR_VALUE,Mp as FETCH_TICKARRAY_COUNT,Ip as Fee,re as Fraction,wo as IDO_ALL_PROGRAM,Mm as IDO_PROGRAM_ID_V1,Nm as IDO_PROGRAM_ID_V2,_m as IDO_PROGRAM_ID_V3,vm as IDO_PROGRAM_ID_V4,ki as INSTRUCTION_PROGRAM_ID,E as InstructionType,Ja as JupTokenType,Hi as LIQUIDITY_FEES_DENOMINATOR,_s as LIQUIDITY_FEES_NUMERATOR,Za as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,qp as LIQUIDITY_VERSION_TO_SERUM_VERSION,gI as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Ao as LOCK_CPMM_AUTH,go as LOCK_CPMM_PROGRAM,Tf as LOCK_LIQUIDITY_SEED,qu as LOG_B_2_X32,Uu as LOG_B_P_ERR_MARGIN_LOWER_X64,Gu as LOG_B_P_ERR_MARGIN_UPPER_X64,Li as LOOKUP_TABLE_CACHE,Io as Layout,pe as LiquidityMath,RT as LockClPositionLayoutV2,CT as LockPositionLayout,nl as LogLevel,Ar as Logger,ta as MARKET_STATE_LAYOUT_V2,Hs as MARKET_STATE_LAYOUT_V3,qc as MARKET_VERSION_TO_STATE_LAYOUT,Qa as MAX_BASE64_SIZE,It as MAX_SQRT_PRICE_X64,Xi as MAX_SQRT_PRICE_X64_SUB_ONE,ut as MAX_TICK,Pi as MEMO_PROGRAM_ID,mn as MEMO_PROGRAM_ID2,zt as METADATA_PROGRAM_ID,Tt as MIN_SQRT_PRICE_X64,Gi as MIN_SQRT_PRICE_X64_ADD_ONE,ot as MIN_TICK,Jn as MODEL_DATA_PUBKEY,mr as Market,oe as MathUtil,xs as MaxU64,Du as MaxUint128,Jt as NEGATIVE_ONE,Gy as NRVMint,Op as OBSERVATION_SEED,At as ONE,Rm as OPEN_BOOK_PROGRAM,Rp as OPERATION_SEED,ic as ObservationInfoLayout,vp as ObservationLayout,rc as OperationLayout,os as OptionLayout,Rt as Owner,Vy as PAIMint,Ju as POOL_LOCK_ID_SEED,Kp as POOL_REWARD_VAULT_SEED,xp as POOL_SEED,Lp as POOL_TICK_ARRAY_BITMAP_SEED,Sp as POOL_VAULT_SEED,ju as POSITION_SEED,Ce as Percent,eu as PoolFetchType,Rn as PoolInfoLayout,Re as PoolUtils,Xo as PositionInfoLayout,Ep as PositionRewardInfoLayout,qo as PositionUtils,Qe as Price,KT as ProtocolPositionLayout,Ui as Q128,wt as Q64,vy as RAYMint,tt as RENT_PROGRAM_ID,yr as Raydium,Vp as RewardInfo,Sc as RoundDirection,Kr as Rounding,Om as Router,Dc as SERUM_PROGRAMID_TO_VERSION,Ci as SERUM_PROGRAM_ID_V3,Wc as SERUM_VERSION_TO_PROGRAMID,tu as SESSION_KEY,Ue as SOLMint,Dt as SOL_INFO,zT as SPL_MINT_LAYOUT,Ey as SRMMint,Qr as STORAGE_KEY,hi as SYSTEM_PROGRAM_ID,te as SqrtPriceMath,$n as StableLayout,is as Structure,Cn as SwapMath,Kn as TICK_ARRAY_BITMAP_SIZE,Cp as TICK_ARRAY_SEED,Xe as TICK_ARRAY_SIZE,lh as TICK_SPACINGS,qe as TOKEN_WSOL,en as TickArrayBitmap,nc as TickArrayBitmapExtensionLayout,Go as TickArrayBitmapExtensionUtils,Uo as TickArrayLayout,Fp as TickLayout,Ln as TickMath,fe as TickQuery,Y as TickUtils,we as Token,be as TokenAmount,Oi as TxBuilder,hn as TxVersion,Eo as U64Resolution,dh as U64_IGNORE_RANGE,es as UInt,Fy as USDCMint,Uy as USDHMint,Dy as USDTMint,Cm as UTIL1216,rs as Union,Su as Voter,cp as VoterDepositEntry,up as VoterLockup,xu as VoterRegistrar,ap as VoterVotingMintConfig,j as WSOLMint,Di as WideBits,Ht as WrappedLayout,ye as ZERO,Na as _100_PERCENT,k as accountMeta,Rb as add,xi as addComputeBudget,Fs as addLiquidityLayout,Yw as array,cs as associatedLedgerAccountLayout,ts as bits,Ae as blob,Ee as bool,hs as calFarmRewardAmount,ff as ceilDiv,po as checkLegacyTxSize,fo as checkV0TxSize,kr as chunkArray,ii as claimLayout,tc as clmmComputeInfoToApiInfo,Zt as closeAccountInstruction,Ec as collectCpFeeInstruction,Rr as commonSystemAccountMeta,Si as confirmTransaction,Sf as cpmmLockPositionInstruction,Mo as createAssociatedLedgerAccountInstruction,me as createLogger,dc as createPoolFeeLayout,kc as createPoolV4InstructionV2,bI as createPoolV4Layout,$t as createWSolAccountInstructions,Vw as cstr,tb as currencyEquals,Pm as decimalToFraction,Wd as decodeBool,xb as div,Ti as divCeil,at as dwLayout,qd as encodeBool,EA as endlessRetry,ym as eq,Ow as f32,Mw as f32be,Nw as f64,_w as f64be,ps as farmAddRewardLayout,qP as farmLedgerLayoutV3_1,Ko as farmLedgerLayoutV3_2,UP as farmLedgerLayoutV5_1,Iu as farmLedgerLayoutV5_2,Bu as farmLedgerLayoutV6_1,Nu as farmRewardInfoToConfig,ms as farmRewardLayout,ds as farmRewardRestartLayout,sp as farmRewardTimeInfoLayout,hu as farmStateV3Layout,Tu as farmStateV5Layout,So as farmStateV6Layout,fk as fetchMultipleFarmInfoAndUpdate,HI as fetchMultipleInfo,Wn as fetchMultipleMintInfos,se as findProgramAddress,vs as fixedSwapInLayout,Vs as fixedSwapOutLayout,Kc as floorDiv,Ki as forecastTransactionSize,tf as formatLayout,dt as generatePubKey,le as getATAAddress,Mu as getAssociatedAuthority,$i as getAssociatedConfigId,nt as getAssociatedLedgerAccount,Ro as getAssociatedLedgerPoolAccount,mf as getAssociatedOpenOrders,Ic as getAssociatedPoolKeys,sr as getCpLockPda,Ax as getCpmmPdaAmmConfigId,Ys as getCpmmPdaPoolId,Lc as getCreatePoolKeys,Wa as getDate,Ts as getDepositEntryIndex,bc as getDxByDyBaseIn,yc as getDyByDxBaseIn,hg as getEpochInfo,Zn as getFarmLedgerLayout,lp as getFarmStateLayout,Xs as getLiquidityAssociatedAuthority,_n as getLiquidityAssociatedId,iT as getLiquidityFromAmounts,Cb as getMax,St as getMultipleAccountsInfo,De as getMultipleAccountsInfoWithCustomFlags,Xr as getMultipleLookupTableInfo,wh as getPdaAmmConfigId,ft as getPdaExBitmapAccount,Wo as getPdaLockClPositionIdV2,Rs as getPdaLockPositionId,kf as getPdaLpMint,Sn as getPdaMetadataKey,$u as getPdaObservationAccount,rr as getPdaObservationId,Do as getPdaOperationAccount,ct as getPdaPersonalPositionAddress,oo as getPdaPoolAuthority,Hu as getPdaPoolId,Zu as getPdaPoolRewardVaulId,Cs as getPdaPoolVaultId,Nt as getPdaProtocolPositionAddress,de as getPdaTickArrayAddress,Rc as getPdaVault,Gn as getRecentBlockHash,bs as getRegistrarAddress,Gm as getSessionKey,gc as getStablePrice,hm as getTime,vb as getTimestamp,ks as getTokenOwnerRecordAddress,_g as getTransferAmountFee,ge as getTransferAmountFeeV2,ws as getVoterAddress,Ps as getVoterWeightRecordAddress,As as getVotingMintAuthority,gs as getVotingTokenMint,wp as governanceCreateTokenOwnerRecord,lw as greedy,fm as gt,Bb as gte,Au as i128,fh as i16ToBytes,Qi as i32ToBytes,Yn as i64,gu as i8,Es as initPoolLayout,as as initTokenAccountInstruction,Df as initializeMarket,ag as intersection,Ua as isDateAfter,qa as isDateBefore,km as isDecimal,Kb as isMeaningfulNumber,Da as isNumber,fs as isValidFarmVersion,Fo as isZero,Ie as jsonInfo2PoolKeys,yk as judgeFarmType,Ss as leadingZeros,Yu as leastSignificantBit,Qo as liquidityStateV4Layout,Up as liquidityStateV5Layout,Tb as lt,Ib as lte,Wy as mSOLMint,Zi as makeAMMSwapInstruction,Pc as makeAddLiquidityInstruction,Bs as makeAddNewRewardInstruction,fr as makeClaimInstruction,ra as makeClaimInstructionV4,Vc as makeCpmmLockInstruction,Mc as makeCreateCpmmPoolInInstruction,_u as makeCreateFarmInstruction,Hc as makeCreateMarketInstruction,vu as makeCreatorWithdrawFarmRewardInstruction,Nc as makeDepositCpmmInInstruction,Vu as makeDepositInstructionV3,Eu as makeDepositInstructionV5,Fu as makeDepositInstructionV6,Lk as makeDepositTokenInstruction,Mk as makeDepositWithdrawInstruction,NI as makeInitPoolInstructionV4,i0 as makePurchaseInstruction,Is as makeRestartRewardInstruction,hc as makeSimulatePoolInfoInstruction,ar as makeSwapCpmmBaseInInInstruction,vc as makeSwapCpmmBaseOutInInstruction,rf as makeSwapFixedInInstruction,sf as makeSwapFixedOutInstruction,Gc as makeSwapInstruction,ku as makeTransferInstruction,_c as makeWithdrawCpmmInInstruction,vo as makeWithdrawInstructionV3,_o as makeWithdrawInstructionV5,No as makeWithdrawInstructionV6,Ok as makeWithdrawTokenInstruction,Ot as minExpirationTime,mh as mockCreatePoolInfo,Xu as mockV3CreatePoolInfo,zp as modelDataInfoLayout,Qu as mostSignificantBit,Er as mul,Fr as notInnerObject,Bw as ns64,Lw as ns64be,du as nu64,ww as nu64be,ns as offset,rg as offsetDateTime,Uw as option,H as parseBigNumberish,kn as parseNumberInfo,ja as parseSimulateLogToJson,Yt as parseSimulateValue,Pu as parseTokenAccountResp,nI as parseTokenInfo,bn as poolTypeV6,Tn as printSimulate,K as publicKey,na as purchaseLayout,op as realFarmStateV3Layout,ip as realFarmStateV5Layout,rp as realFarmV6Layout,Va as recursivelyDecimalToFraction,qs as removeLiquidityInstruction,Ds as removeLiquidityLayout,FS as route1Instruction,DS as route2Instruction,Of as routeInstruction,Qw as rustEnum,kw as s16,xw as s16be,hw as s24,Sw as s24be,$e as s32,Kw as s32be,Tw as s40,Cw as s40be,Iw as s48,Rw as s48be,Pw as s8,Q as seq,Yf as setLoggerLevel,Am as shakeFractionDecimal,Ya as simulateMultipleInstruction,MI as simulatePoolInfoInstruction,Bm as simulateTransaction,_a as sleep,bt as solToWSol,iI as solToWSolToken,fn as splAccountLayout,La as splitNumber,qy as stSOLMint,zw as str,_ as struct,Sb as sub,Xw as tagged,Vr as tenExponential,Ji as toAmmComputePoolInfo,it as toApiV3Token,wm as toBN,Ha as toBuffer,gn as toFeeConfig,Fa as toFraction,hb as toFractionWithDecimals,tg as toPercent,ji as toToken,zo as toTokenAmount,oI as toTokenInfo,ng as toTokenPrice,og as toTotalPrice,va as toUsdCurrency,Ks as trailingZeros,Tg as transformTxToBase64,Or as tryParsePublicKey,xm as txToBase64,ee as u128,jt as u16,zu as u16ToBytes,fw as u16be,mw as u24,yw as u24be,Je as u32,yh as u32ToBytes,bw as u32be,dw as u40,gw as u40be,pw as u48,Aw as u48be,P as u64,D as u8,jw as union,sC as unionArr,vw as unionLayoutDiscriminator,cg as uniq,mp as updateFarmPoolInfo,Mi as updateReqHistory,Ew as utf8,Lr as validateAndParsePublicKey,ys as validateFarmRewards,Gw as vec,Ud as vecU8,kp as voterStakeRegistryCreateDepositEntry,Pp as voterStakeRegistryCreateVoter,bp as voterStakeRegistryDeposit,gp as voterStakeRegistryUpdateVoterWeightRecord,Ap as voterStakeRegistryWithdraw,rI as wSolToSolToken,ls as withdrawRewardLayout,ug as xor,Hw as zeros};
1
+ var Jc=Object.defineProperty,el=Object.defineProperties;var tl=Object.getOwnPropertyDescriptors;var ci=Object.getOwnPropertySymbols;var ma=Object.prototype.hasOwnProperty,da=Object.prototype.propertyIsEnumerable;var la=(o,e,t)=>e in o?Jc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,R=(o,e)=>{for(var t in e||(e={}))ma.call(e,t)&&la(o,t,e[t]);if(ci)for(var t of ci(e))da.call(e,t)&&la(o,t,e[t]);return o},F=(o,e)=>el(o,tl(e));var Me=(o,e)=>{var t={};for(var n in o)ma.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&ci)for(var n of ci(o))e.indexOf(n)<0&&da.call(o,n)&&(t[n]=o[n]);return t};import nu from"axios";import{PublicKey as ya}from"@solana/web3.js";import{get as gr,set as pa}from"lodash";var nl=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(nl||{}),Ar=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}},wr={},fa={};function me(o){let e=gr(wr,o);if(!e){let t=gr(fa,o);e=new Ar({name:o,logLevel:t}),pa(wr,o,e)}return e}function Yf(o,e){pa(fa,o,e);let t=gr(wr,o);t&&(t.level=e)}import{MINT_SIZE as ol,TOKEN_PROGRAM_ID as il,getTransferFeeConfig as rl,unpackMint as sl}from"@solana/spl-token";var Pr=me("Raydium_accountInfo_util");async function St(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:r=100}=R({batchRequest:!1},t),s=kr(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=kr(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Pr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Pr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ya(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&Pr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function De(o,e,t){let n=await St(o,e.map(i=>i.pubkey),t);return e.map((i,r)=>F(R({},i),{accountInfo:n[r]}))}var al=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(al||{}),oy=1;async function Wn({connection:o,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await De(o,e.map(c=>({pubkey:bt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<ol){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=sl(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);i[c.pubkey.toString()]=F(R({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||il,feeConfig:(a=rl(u))!=null?a:void 0})}return i[ya.default.toBase58()]=i[j.toBase58()],i}import _e from"bn.js";var qn=9e15,cn=1e9,hr="0123456789abcdef",mi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",di="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Tr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-qn,maxE:qn,crypto:!1},wa,Xt,ie=!0,fi="[DecimalError] ",un=fi+"Invalid argument: ",Pa=fi+"Precision limit exceeded",ka=fi+"crypto unavailable",ha="[object Decimal]",et=Math.floor,We=Math.pow,ul=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,cl=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,ll=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ta=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Ct=1e7,ne=7,ml=9007199254740991,dl=mi.length-1,Ir=di.length-1,V={toStringTag:ha};V.absoluteValue=V.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),J(o)};V.ceil=function(){return J(new this.constructor(this),this.e+1,2)};V.clampedTo=V.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(un+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};V.comparedTo=V.cmp=function(o){var e,t,n,i,r=this,s=r.d,a=(o=new r.constructor(o)).d,c=r.s,u=o.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(r.e!==o.e)return r.e>o.e^c<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};V.cosine=V.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=pl(n,Ka(n,t)),n.precision=o,n.rounding=e,J(Xt==2||Xt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};V.cubeRoot=V.cbrt=function(){var o,e,t,n,i,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ie=!1,r=l.s*We(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=Ze(l.d),o=l.e,(r=(o-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=We(t,1/3),o=et((o+1)/3)-(o%3==(o<0?-1:2)),r==1/0?t="5e"+o:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Te(u.plus(l).times(a),u.plus(c),s+2,1),Ze(a.d).slice(0,s)===(t=Ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(J(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(J(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return ie=!0,J(n,o,m.rounding,e)};V.decimalPlaces=V.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-et(this.e/ne))*ne,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};V.dividedBy=V.div=function(o){return Te(this,new this.constructor(o))};V.dividedToIntegerBy=V.divToInt=function(o){var e=this,t=e.constructor;return J(Te(e,new t(o),0,1,1),t.precision,t.rounding)};V.equals=V.eq=function(o){return this.cmp(o)===0};V.floor=function(){return J(new this.constructor(this),this.e+1,3)};V.greaterThan=V.gt=function(o){return this.cmp(o)>0};V.greaterThanOrEqualTo=V.gte=function(o){var e=this.cmp(o);return e==1||e===0};V.hyperbolicCosine=V.cosh=function(){var o,e,t,n,i,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,i=r.d.length,i<32?(o=Math.ceil(i/3),e=(1/bi(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),r=Un(s,1,r.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return J(r,s.precision=t,s.rounding=n,!0)};V.hyperbolicSine=V.sinh=function(){var o,e,t,n,i=this,r=i.constructor;if(!i.isFinite()||i.isZero())return new r(i);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(i.e,i.sd())+4,r.rounding=1,n=i.d.length,n<3)i=Un(r,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/bi(5,o)),i=Un(r,2,i,i,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);o--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,J(i,e,t,!0)};V.hyperbolicTangent=V.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,Te(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};V.inverseCosine=V.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?Kt(t,i,r):new t(0):new t(NaN):e.isZero()?Kt(t,i+4,r).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=Kt(t,i+4,r).times(.5),t.precision=i,t.rounding=r,o.minus(e))};V.inverseHyperbolicCosine=V.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,ie=!1,t=t.times(t).minus(1).sqrt().plus(t),ie=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};V.inverseHyperbolicSine=V.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,ie=!1,t=t.times(t).plus(1).sqrt().plus(t),ie=!0,n.precision=o,n.rounding=e,t.ln())};V.inverseHyperbolicTangent=V.atanh=function(){var o,e,t,n,i=this,r=i.constructor;return i.isFinite()?i.e>=0?new r(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=r.precision,e=r.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?J(new r(i),o,e,!0):(r.precision=t=n-i.e,i=Te(i.plus(1),new r(1).minus(i),t+o,1),r.precision=o+4,r.rounding=1,i=i.ln(),r.precision=o,r.rounding=e,i.times(.5))):new r(NaN)};V.inverseSine=V.asin=function(){var o,e,t,n,i=this,r=i.constructor;return i.isZero()?new r(i):(e=i.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(o=Kt(r,t+4,n).times(.5),o.s=i.s,o):new r(NaN):(r.precision=t+6,r.rounding=1,i=i.div(new r(1).minus(i.times(i)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,i.times(2)))};V.inverseTangent=V.atan=function(){var o,e,t,n,i,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Ir)return s=Kt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Ir)return s=Kt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ne+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(ie=!1,e=Math.ceil(a/ne),n=1,c=u.times(u),s=new l(u),i=u;o!==-1;)if(i=i.times(c),r=s.minus(i.div(n+=2)),i=i.times(c),s=r.plus(i.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===r.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),ie=!0,J(s,l.precision=m,l.rounding=d,!0)};V.isFinite=function(){return!!this.d};V.isInteger=V.isInt=function(){return!!this.d&&et(this.e/ne)>this.d.length-2};V.isNaN=function(){return!this.s};V.isNegative=V.isNeg=function(){return this.s<0};V.isPositive=V.isPos=function(){return this.s>0};V.isZero=function(){return!!this.d&&this.d[0]===0};V.lessThan=V.lt=function(o){return this.cmp(o)<0};V.lessThanOrEqualTo=V.lte=function(o){return this.cmp(o)<1};V.logarithm=V.log=function(o){var e,t,n,i,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)r=!0;else{for(i=t[0];i%10===0;)i/=10;r=i!==1}if(ie=!1,a=m+p,s=an(u,a),n=e?pi(l,a+10):an(o,a),c=Te(s,n,a,1),so(c.d,i=m,d))do if(a+=10,s=an(u,a),n=e?pi(l,a+10):an(o,a),c=Te(s,n,a,1),!r){+Ze(c.d).slice(i+1,i+15)+1==1e14&&(c=J(c,m+1,0));break}while(so(c.d,i+=10,d));return ie=!0,J(c,m,d)};V.minus=V.sub=function(o){var e,t,n,i,r,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return ie?J(o,a,c):o}if(t=et(o.e/ne),l=et(p.e/ne),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ne),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}r=0}for(m&&(e=u,u=d,d=e,o.s=-o.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=Ct-1;--u[i],u[n]+=Ct}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=yi(u,t),ie?J(o,a,c):o):new y(c===3?-0:0)};V.modulo=V.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?J(new n(t),n.precision,n.rounding):(ie=!1,n.modulo==9?(e=Te(t,o.abs(),0,3,1),e.s*=o.s):e=Te(t,o,0,n.modulo,1),e=e.times(o),ie=!0,t.minus(e))};V.naturalExponential=V.exp=function(){return Br(this)};V.naturalLogarithm=V.ln=function(){return an(this)};V.negated=V.neg=function(){var o=new this.constructor(this);return o.s=-o.s,J(o)};V.plus=V.add=function(o){var e,t,n,i,r,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),ie?J(o,a,c):o;if(r=et(m.e/ne),n=et(o.e/ne),u=u.slice(),i=r-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/ne),s=r>s?r+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Ct|0,u[i]%=Ct;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=yi(u,n),ie?J(o,a,c):o};V.precision=V.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(un+o);return t.d?(e=Ia(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};V.round=function(){var o=this,e=o.constructor;return J(new e(o),o.e+1,e.rounding)};V.sine=V.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=yl(n,Ka(n,t)),n.precision=o,n.rounding=e,J(Xt>2?t.neg():t,o,e,!0)):new n(NaN)};V.squareRoot=V.sqrt=function(){var o,e,t,n,i,r,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(ie=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=Ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=et((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(Te(s,r,t+2,1)).times(.5),Ze(r.d).slice(0,t)===(e=Ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(J(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(J(n,c+1,1),o=!n.times(n).eq(s));break}return ie=!0,J(n,c,l.rounding,o)};V.tangent=V.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=Te(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,J(Xt==2||Xt==4?t.neg():t,o,e,!0)):new n(NaN)};V.times=V.mul=function(o){var e,t,n,i,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=et(l.e/ne)+et(o.e/ne),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=r[i]+p[n]*d[i-n-1]+e,r[i--]=a%Ct|0,e=a/Ct|0;r[i]=(r[i]+e)%Ct|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),o.d=r,o.e=yi(r,t),ie?J(o,m.precision,m.rounding):o};V.toBinary=function(o,e){return Sr(this,2,o,e)};V.toDecimalPlaces=V.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(mt(o,0,cn),e===void 0?e=n.rounding:mt(e,0,8),J(t,o+t.e+1,e))};V.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Ft(n,!0):(mt(o,0,cn),e===void 0?e=i.rounding:mt(e,0,8),n=J(new i(n),o+1,e),t=Ft(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toFixed=function(o,e){var t,n,i=this,r=i.constructor;return o===void 0?t=Ft(i):(mt(o,0,cn),e===void 0?e=r.rounding:mt(e,0,8),n=J(new r(i),o+i.e+1,e),t=Ft(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};V.toFraction=function(o){var e,t,n,i,r,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),r=e.e=Ia(y)-p.e-1,s=r%ne,e.d[0]=We(10,s<0?ne+s:s),o==null)o=r>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(un+a);o=a.gt(e)?r>0?e:u:a}for(ie=!1,a=new f(Ze(y)),l=f.precision,f.precision=r=y.length*ne*2;m=Te(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(o)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=Te(o.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=Te(u,n,r,1).minus(p).abs().cmp(Te(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,ie=!0,d};V.toHexadecimal=V.toHex=function(o,e){return Sr(this,16,o,e)};V.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:mt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(ie=!1,t=Te(t,o,0,e,1).times(o),ie=!0,J(t)):(o.s=t.s,t=o),t};V.toNumber=function(){return+this};V.toOctal=function(o,e){return Sr(this,8,o,e)};V.toPower=V.pow=function(o){var e,t,n,i,r,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(We(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,o.eq(1))return J(a,n,r);if(e=et(o.e/ne),e>=o.d.length-1&&(t=u<0?-u:u)<=ml)return i=Ba(c,a,t,n),o.s<0?new c(1).div(i):J(i,n,r);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=We(+a,u),e=t==0||!isFinite(t)?et(u*(Math.log("0."+Ze(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(ie=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Br(o.times(an(a,n+t)),n),i.d&&(i=J(i,n+5,1),so(i.d,n,r)&&(e=n+10,i=J(Br(o.times(an(a,e+t)),e),e+5,1),+Ze(i.d).slice(n+1,n+15)+1==1e14&&(i=J(i,n+1,0)))),i.s=s,ie=!0,c.rounding=r,J(i,n,r))};V.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Ft(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(mt(o,1,cn),e===void 0?e=i.rounding:mt(e,0,8),n=J(new i(n),o,e),t=Ft(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toSignificantDigits=V.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(mt(o,1,cn),e===void 0?e=n.rounding:mt(e,0,8)),J(new n(t),o,e)};V.toString=function(){var o=this,e=o.constructor,t=Ft(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};V.truncated=V.trunc=function(){return J(new this.constructor(this),this.e+1,1)};V.valueOf=V.toJSON=function(){var o=this,e=o.constructor,t=Ft(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function Ze(o){var e,t,n,i=o.length-1,r="",s=o[0];if(i>0){for(r+=s,e=1;e<i;e++)n=o[e]+"",t=ne-n.length,t&&(r+=sn(t)),r+=n;s=o[e],n=s+"",t=ne-n.length,t&&(r+=sn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function mt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(un+o)}function so(o,e,t,n){var i,r,s,a;for(r=o[0];r>=10;r/=10)--e;return--e<0?(e+=ne,i=0):(i=Math.ceil((e+1)/ne),e%=ne),r=We(10,ne-e),a=o[i]%r|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==r||t>3&&a+1==r/2)&&(o[i+1]/r/100|0)==We(10,e-2)-1||(a==r/2||a==0)&&(o[i+1]/r/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==r||!n&&t>3&&a+1==r/2)&&(o[i+1]/r/1e3|0)==We(10,e-3)-1,s}function li(o,e,t){for(var n,i=[0],r,s=0,a=o.length;s<a;){for(r=i.length;r--;)i[r]*=e;for(i[0]+=hr.indexOf(o.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function pl(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/bi(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=Un(o,1,e.times(i),new o(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var Te=function(){function o(n,i,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,i,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<i[r]?1:0,n[r]=a*s+n[r]-i[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,r,s,a,c){var u,l,m,d,p,y,f,b,g,A,w,h,I,T,S,B,C,x,L,q,M=n.constructor,Z=n.s==i.s?1:-1,X=n.d,W=i.d;if(!X||!X[0]||!W||!W[0])return new M(!n.s||!i.s||(X?W&&X[0]==W[0]:!W)?NaN:X&&X[0]==0||!W?Z*0:Z/0);for(c?(p=1,l=n.e-i.e):(c=Ct,p=ne,l=et(n.e/p)-et(i.e/p)),L=W.length,C=X.length,g=new M(Z),A=g.d=[],m=0;W[m]==(X[m]||0);m++);if(W[m]>(X[m]||0)&&l--,r==null?(T=r=M.precision,s=M.rounding):a?T=r+(n.e-i.e)+1:T=r,T<0)A.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<C||d)&&T--;m++)S=d*c+(X[m]||0),A[m]=S/W|0,d=S%W|0;y=d||m<C}else{for(d=c/(W[0]+1)|0,d>1&&(W=o(W,d,c),X=o(X,d,c),L=W.length,C=X.length),B=L,w=X.slice(0,L),h=w.length;h<L;)w[h++]=0;q=W.slice(),q.unshift(0),x=W[0],W[1]>=c/2&&++x;do d=0,u=e(W,w,L,h),u<0?(I=w[0],L!=h&&(I=I*c+(w[1]||0)),d=I/x|0,d>1?(d>=c&&(d=c-1),f=o(W,d,c),b=f.length,h=w.length,u=e(f,w,b,h),u==1&&(d--,t(f,L<b?q:W,b,c))):(d==0&&(u=d=1),f=W.slice()),b=f.length,b<h&&f.unshift(0),t(w,f,h,c),u==-1&&(h=w.length,u=e(W,w,L,h),u<1&&(d++,t(w,L<h?q:W,h,c))),h=w.length):u===0&&(d++,w=[0]),A[m++]=d,u&&w[0]?w[h++]=X[B]||0:(w=[X[B]],h=1);while((B++<C||w[0]!==void 0)&&T--);y=w[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,wa=y;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,J(g,a?r+g.e+1:r,s,y)}return g}}();function J(o,e,t,n){var i,r,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(i=1,a=m[0];a>=10;a/=10)i++;if(r=e-i,r<0)r+=ne,s=e,l=m[d=0],c=l/We(10,i-s-1)%10|0;else if(d=Math.ceil((r+1)/ne),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,r%=ne,s=r-ne+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;r%=ne,s=r-ne+i,c=s<0?0:l/We(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%We(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/We(10,i-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=We(10,(ne-e%ne)%ne),o.e=-e||0):m[0]=o.e=0,o;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=We(10,ne-r),m[d]=s>0?(l/We(10,i-s)%We(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(o.e++,m[0]==Ct&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Ct)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return ie&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Ft(o,e,t){if(!o.isFinite())return Sa(o);var n,i=o.e,r=Ze(o.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+sn(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(o.e<0?"e":"e+")+o.e):i<0?(r="0."+sn(-i-1)+r,t&&(n=t-s)>0&&(r+=sn(n))):i>=s?(r+=sn(i+1-s),t&&(n=t-i-1)>0&&(r=r+"."+sn(n))):((n=i+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(r+="."),r+=sn(n))),r}function yi(o,e){var t=o[0];for(e*=ne;t>=10;t/=10)e++;return e}function pi(o,e,t){if(e>dl)throw ie=!0,t&&(o.precision=t),Error(Pa);return J(new o(mi),e,1,!0)}function Kt(o,e,t){if(e>Ir)throw Error(Pa);return J(new o(di),e,t,!0)}function Ia(o){var e=o.length-1,t=e*ne+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function sn(o){for(var e="";o--;)e+="0";return e}function Ba(o,e,t,n){var i,r=new o(1),s=Math.ceil(n/ne+4);for(ie=!1;;){if(t%2&&(r=r.times(e),ga(r.d,s)&&(i=!0)),t=et(t/2),t===0){t=r.d.length-1,i&&r.d[t]===0&&++r.d[t];break}e=e.times(e),ga(e.d,s)}return ie=!0,r}function ba(o){return o.d[o.d.length-1]&1}function xa(o,e,t){for(var n,i=new o(e[0]),r=0;++r<e.length;)if(n=new o(e[r]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Br(o,e){var t,n,i,r,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(ie=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(We(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=J(r.times(o),c,1),t=t.times(++l),a=s.plus(Te(r,t,c,1)),Ze(a.d).slice(0,c)===Ze(s.d).slice(0,c)){for(i=m;i--;)s=J(s.times(s),c,1);if(e==null)if(u<3&&so(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return J(s,d.precision=y,p,ie=!0);else return d.precision=y,s}s=a}}function an(o,e){var t,n,i,r,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,A=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(ie=!1,l=w):l=e,g.precision=l+=y,t=Ze(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=Ze(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return u=pi(g,l+2,w).times(r+""),f=an(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=w,e==null?J(f,w,A,ie=!0):f;for(m=f,c=s=f=Te(f.minus(1),f.plus(1),l,1),d=J(f.times(f),l,1),i=3;;){if(s=J(s.times(d),l,1),u=c.plus(Te(s,new g(i),l,1)),Ze(u.d).slice(0,l)===Ze(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(pi(g,l+2,w).times(r+""))),c=Te(c,new g(p),l,1),e==null)if(so(c.d,l-y,A,a))g.precision=l+=y,u=s=f=Te(m.minus(1),m.plus(1),l,1),d=J(f.times(f),l,1),i=a=1;else return J(c,g.precision=w,A,ie=!0);else return g.precision=w,c;c=u,i+=2}}function Sa(o){return String(o.s*o.s/0)}function xr(o,e){var t,n,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ne,t<0&&(n+=ne),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ne;n<i;)o.d.push(+e.slice(n,n+=ne));e=e.slice(n),n=ne-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),ie&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function fl(o,e){var t,n,i,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ta.test(e))return xr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(cl.test(e))t=16,e=e.toLowerCase();else if(ul.test(e))t=2;else if(ll.test(e))t=8;else throw Error(un+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,i=Ba(n,new n(t),r,r*2)),u=li(e,t,Ct),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(o.s*0):(o.e=yi(u,l),o.d=u,ie=!1,s&&(o=Te(o,i,a*4)),c&&(o=o.times(Math.abs(c)<54?We(2,c):ao.pow(2,c))),ie=!0,o)}function yl(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Un(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/bi(5,t)),e=Un(o,2,e,e);for(var i,r=new o(5),s=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(r.plus(i.times(s.times(i).minus(a))));return e}function Un(o,e,t,n,i){var r,s,a,c,u=1,l=o.precision,m=Math.ceil(l/ne);for(ie=!1,c=t.times(t),a=new o(n);;){if(s=Te(a.times(c),new o(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Te(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return ie=!0,s.d.length=m+1,s}function bi(o,e){for(var t=o;--e;)t*=o;return t}function Ka(o,e){var t,n=e.s<0,i=Kt(o,o.precision,1),r=i.times(.5);if(e=e.abs(),e.lte(r))return Xt=n?4:1,e;if(t=e.divToInt(i),t.isZero())Xt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(r))return Xt=ba(t)?n?2:3:n?4:1,e;Xt=ba(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Sr(o,e,t,n){var i,r,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(mt(t,1,cn),n===void 0?n=p.rounding:mt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=Sa(o);else{for(l=Ft(o),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=li(Ft(d),10,i),d.e=d.d.length),m=li(l,10,i),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(o=new p(o),o.d=m,o.e=r,o=Te(o,d,t,n,0,i),m=o.d,r=o.e,u=wa),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=hr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=li(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=hr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function ga(o,e){if(o.length>e)return o.length=e,!0}function bl(o){return new this(o).abs()}function gl(o){return new this(o).acos()}function Al(o){return new this(o).acosh()}function wl(o,e){return new this(o).plus(e)}function Pl(o){return new this(o).asin()}function kl(o){return new this(o).asinh()}function hl(o){return new this(o).atan()}function Tl(o){return new this(o).atanh()}function Il(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,r=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Kt(this,r,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Kt(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Kt(this,r,1).times(.5),t.s=o.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Te(o,e,r,1)),e=Kt(this,r,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Te(o,e,r,1)),t}function Bl(o){return new this(o).cbrt()}function xl(o){return J(o=new this(o),o.e+1,2)}function Sl(o,e,t){return new this(o).clamp(e,t)}function Kl(o){if(!o||typeof o!="object")throw Error(fi+"Object expected");var e,t,n,i=o.defaults===!0,r=["precision",1,cn,"rounding",0,8,"toExpNeg",-qn,0,"toExpPos",0,qn,"maxE",0,qn,"minE",-qn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],i&&(this[t]=Tr[t]),(n=o[t])!==void 0)if(et(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(un+t+": "+n);if(t="crypto",i&&(this[t]=Tr[t]),(n=o[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(ka);else this[t]=!1;else throw Error(un+t+": "+n);return this}function Cl(o){return new this(o).cos()}function Rl(o){return new this(o).cosh()}function Ca(o){var e,t,n;function i(r){var s,a,c,u=this;if(!(u instanceof i))return new i(r);if(u.constructor=i,Aa(r)){u.s=r.s,ie?!r.d||r.e>i.maxE?(u.e=NaN,u.d=null):r.e<i.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;ie?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return xr(u,r.toString())}else if(c!=="string")throw Error(un+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),Ta.test(r)?xr(u,r):fl(u,r)}if(i.prototype=V,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Kl,i.clone=Ca,i.isDecimal=Aa,i.abs=bl,i.acos=gl,i.acosh=Al,i.add=wl,i.asin=Pl,i.asinh=kl,i.atan=hl,i.atanh=Tl,i.atan2=Il,i.cbrt=Bl,i.ceil=xl,i.clamp=Sl,i.cos=Cl,i.cosh=Rl,i.div=Ll,i.exp=Ol,i.floor=Ml,i.hypot=Nl,i.ln=_l,i.log=vl,i.log10=El,i.log2=Vl,i.max=Fl,i.min=Dl,i.mod=Wl,i.mul=ql,i.pow=Ul,i.random=Gl,i.round=Xl,i.sign=zl,i.sin=Ql,i.sinh=Yl,i.sqrt=jl,i.sub=Hl,i.sum=Zl,i.tan=$l,i.tanh=Jl,i.trunc=em,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function Ll(o,e){return new this(o).div(e)}function Ol(o){return new this(o).exp()}function Ml(o){return J(o=new this(o),o.e+1,3)}function Nl(){var o,e,t=new this(0);for(ie=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return ie=!0,new this(1/0);t=e}return ie=!0,t.sqrt()}function Aa(o){return o instanceof ao||o&&o.toStringTag===ha||!1}function _l(o){return new this(o).ln()}function vl(o,e){return new this(o).log(e)}function Vl(o){return new this(o).log(2)}function El(o){return new this(o).log(10)}function Fl(){return xa(this,arguments,"lt")}function Dl(){return xa(this,arguments,"gt")}function Wl(o,e){return new this(o).mod(e)}function ql(o,e){return new this(o).mul(e)}function Ul(o,e){return new this(o).pow(e)}function Gl(o){var e,t,n,i,r=0,s=new this(1),a=[];if(o===void 0?o=this.precision:mt(o,1,cn),n=Math.ceil(o/ne),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)i=e[r],i>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)i=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(i%1e7),r+=4);r=n/4}else throw Error(ka);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],o%=ne,n&&o&&(i=We(10,ne-o),a[r]=(n/i|0)*i);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ne)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ne&&(t-=ne-n)}return s.e=t,s.d=a,s}function Xl(o){return J(o=new this(o),o.e+1,this.rounding)}function zl(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function Ql(o){return new this(o).sin()}function Yl(o){return new this(o).sinh()}function jl(o){return new this(o).sqrt()}function Hl(o,e){return new this(o).sub(e)}function Zl(){var o=0,e=arguments,t=new this(e[o]);for(ie=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return ie=!0,J(t,this.precision,this.rounding)}function $l(o){return new this(o).tan()}function Jl(o){return new this(o).tanh()}function em(o){return J(o=new this(o),o.e+1,1)}V[Symbol.for("nodejs.util.inspect.custom")]=V.toString;V[Symbol.toStringTag]="Decimal";var ao=V.constructor=Ca(Tr);mi=new ao(mi);di=new ao(di);var O=ao;import am from"big.js";import ln from"bn.js";import tm from"toformat";var nm=tm,uo=nm;import Ai from"big.js";import om from"bn.js";import im from"decimal.js-light";import co from"bn.js";var Kr=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(Kr||{}),Ra=9007199254740991;function H(o){let e=me("Raydium_parseBigNumberish");if(o instanceof co)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new co(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Ra||o<=-Ra)&&e.logWithError(`BigNumberish number overflow: ${o}`),new co(String(o))):typeof o=="bigint"?new co(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new co(0))}var gi=me("module/fraction"),Cr=uo(Ai),lo=uo(im),rm={[0]:lo.ROUND_DOWN,[1]:lo.ROUND_HALF_UP,[2]:lo.ROUND_UP},sm={[0]:Ai.roundDown,[1]:Ai.roundHalfUp,[2]:Ai.roundUp},re=class{constructor(e,t=new om(1)){this.numerator=H(e),this.denominator=H(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new re(this.denominator,this.numerator)}add(e){let t=e instanceof re?e:new re(H(e));return this.denominator.eq(t.denominator)?new re(this.numerator.add(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof re?e:new re(H(e));return this.denominator.eq(t.denominator)?new re(this.numerator.sub(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof re?e:new re(H(e));return new re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof re?e:new re(H(e));return new re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||gi.logWithError(`${e} is not an integer.`),e<=0&&gi.logWithError(`${e} is not positive.`),lo.set({precision:e+1,rounding:rm[n]});let i=new lo(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||gi.logWithError(`${e} is not an integer.`),e<0&&gi.logWithError(`${e} is negative.`),Cr.DP=e,Cr.RM=sm[n]||1,new Cr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var um=me("Raydium_amount"),wi=uo(am);function La(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):um.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var be=class extends re{constructor(t,n,i=!0,r){let s=new ln(0),a=Pn.pow(new ln(t.decimals));if(i)s=H(n);else{let c=new ln(0),u=new ln(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=La(n.toString(),t.decimals);c=H(l),u=H(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"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 be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return wi.DP=this.token.decimals,new wi(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},wn=class extends re{constructor(t,n,i=!0,r){let s=new ln(0),a=Pn.pow(new ln(t.decimals));if(i)s=H(n);else{let c=new ln(0),u=new ln(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=La(n.toString(),t.decimals);c=H(l),u=H(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new wn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new wn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return wi.DP=this.currency.decimals,new wi(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as cm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Oa}from"@solana/spl-token";var Dt={chainId:101,address:cm.default.toBase58(),programId:Oa.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},qe={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Oa.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Nr}from"@solana/web3.js";import{PublicKey as Se,SystemProgram as Ma,SYSVAR_RENT_PUBKEY as lm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mm}from"@solana/spl-token";function k({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Rr=[k({pubkey:mm,isWritable:!1}),k({pubkey:Ma.programId,isWritable:!1}),k({pubkey:lm,isWritable:!1})];function Lr({publicKey:o,transformSol:e}){let t=Or(o.toString());if(t instanceof Se)return e&&t.equals(Ue)?j:t;if(e&&t.toString()===Ue.toBase58())return j;if(typeof t=="string"){if(t===Se.default.toBase58())return Se.default;try{return new Se(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Or(o){try{return new Se(o)}catch{return o}}var Pi=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),mn=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Se("SysvarRent111111111111111111111111111111111"),Mr=new Se("SysvarC1ock11111111111111111111111111111111"),zt=new Se("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),ki=new Se("Sysvar1nstructions1111111111111111111111111"),hi=Ma.programId,vy=new Se("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Vy=new Se("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Ey=new Se("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Fy=new Se("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Dy=new Se("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Wy=new Se("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),qy=new Se("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Uy=new Se("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Gy=new Se("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Xy=new Se("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),zy=new Se("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Se("So11111111111111111111111111111111111111112"),Ue=Se.default;function bt(o){return Lr({publicKey:o,transformSol:!0})}var _r=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:r=!1,isToken2022:s=!1}){if(e===Ue.toBase58()||e instanceof Nr&&Ue.equals(e)){this.decimals=qe.decimals,this.symbol=qe.symbol,this.name=qe.name,this.mint=new Nr(qe.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=r?Nr.default:Lr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},we=_r;we.WSOL=new _r(F(R({},qe),{mint:qe.address}));var vr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},mo=vr;mo.SOL=new vr(Dt);function tb(o,e){return o instanceof we&&e instanceof we?o.equals(e):o instanceof we||e instanceof we?!1:o===e}import dm from"bn.js";var Na=new re(new dm(100)),Ce=class extends re{toSignificant(e=5,t,n){return this.mul(Na).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Na).toFixed(e,t,n)}};var pm=me("Raydium_price"),Qe=class extends re{constructor(t){let{baseToken:n,quoteToken:i,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=i,this.scalar=new re(Vr(n.decimals),Vr(i.decimals))}get raw(){return new re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Qe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&pm.logWithError("mul token not equals");let n=super.mul(t);return new Qe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};function Ne(o){if(o instanceof Ce)return new re(o.numerator,o.denominator);if(o instanceof Qe)return o.adjusted;if(o instanceof be)try{return Ne(o.toExact())}catch{return new re(Ge)}if(o instanceof re)return o;let e=String(o),t=kn(e);return new re(t.numerator,t.denominator)}function hb(o){var n;if(o instanceof Ce)return{fr:new re(o.numerator,o.denominator)};if(o instanceof Qe)return{fr:o.adjusted};if(o instanceof be)return{fr:Ne(o.toExact()),decimals:o.token.decimals};if(o instanceof re)return{fr:o};let e=String(o),t=kn(e);return{fr:new re(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Tb(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Ge)}function fm(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.gt(Ge)}function Ib(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.lte(Ge)}function Bb(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.gte(Ge)}function ym(o,e){if(o==null||e==null)return!1;let t=Ne(o),n=Ne(e);return t.sub(n).numerator.eq(Ge)}function xb(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);try{return t.div(n)}catch{return t}}function Sb(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);return t.sub(n)}function Kb(o){return o==null?!1:!ym(o,0)}function Cb(o,e){return fm(e,o)?e:o}function Er(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);return t.mul(n)}function Rb(o,e){if(o==null||e==null)return;let t=Ne(o),n=Ne(e);return t.add(n)}import{PublicKey as bm}from"@solana/web3.js";import gm from"bn.js";async function _a(o){new Promise(e=>setTimeout(e,o))}function vb(){return new Date().getTime()}function Fr(o){return typeof o=="object"&&o!==null&&![we,be,bm,re,gm,Qe,Ce].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?Or(o):Array.isArray(o)?o.map(e=>Ie(e)):Fr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}var Ge=new _e(0),Ea=new _e(1),jb=new _e(2),Hb=new _e(3),Zb=new _e(5),Pn=new _e(10),$b=new _e(100),Jb=new _e(1e3),eg=new _e(1e4);function Vr(o){return Pn.pow(H(o))}function kn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof _e)return{numerator:o.toString(),denominator:"1"};if(o instanceof re)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:i}}function Ti(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Am(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function wm(o,e=0){return o instanceof _e?o:new _e(Am(Fa(o).mul(Pn.pow(new _e(String(e))))))}function Fa(o){if(o instanceof Ce)return new re(o.numerator,o.denominator);if(o instanceof Qe)return o.adjusted;if(o instanceof be)try{return Fa(o.toExact())}catch{return new re(Ge)}if(o instanceof re)return o;let e=String(o),t=kn(e);return new re(t.numerator,t.denominator)}function tg(o,e){let{numerator:t,denominator:n}=kn(o);return new Ce(new _e(t),new _e(n).mul(e!=null&&e.alreadyDecimaled?new _e(100):new _e(1)))}function ng(o){let{token:e,numberPrice:t,decimalDone:n}=o,i=new we({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=kn(t),a=n?new _e(r).mul(Pn.pow(new _e(e.decimals))):r,c=new _e(s).mul(Pn.pow(new _e(i.decimals)));return new Qe({baseToken:i,denominator:c.toString(),quoteToken:new we(F(R({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function va(o){let e=new mo({decimals:6,symbol:"usd",name:"usd"}),t=wm(Er(o,10**e.decimals));return new wn(e,t)}function og(o,e){return va(!e||!o?0:Er(o,e))}function Pm(o){if(o==null)return;let{numerator:e,denominator:t}=kn(o.toString());return new re(e,t)}function km(o){return o instanceof O}function Va(o){return km(o)?Pm(o):Array.isArray(o)?o.map(e=>Va(e)):Fr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Va(t)])):o}var Da=o=>typeof o=="number",Wa=o=>o?new Date(o):new Date,hm=o=>Wa(o).getTime();function qa(o,e,t){let n=Da(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function Ua(o,e,t){let n=Da(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function rg(o,e){let n=hm(o)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return Wa(n)}function kr(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function ag(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function ug(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function cg(o){return[...new Set(o)]}var Rt=class{constructor(e){this._owner=e}get publicKey(){return Rt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Rt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Rt.isKeyPair(this._owner)}get isPublicKey(){return Rt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Rt.isKeyPair(e)}};import{PublicKey as Sm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Km}from"@solana/spl-token";import{ComputeBudgetProgram as Ga,Keypair as Xa,PublicKey as za,Transaction as Bi,TransactionMessage as Tm,VersionedTransaction as Dr}from"@solana/web3.js";var hn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(hn||{}),E={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",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"};import{TOKEN_PROGRAM_ID as Im}from"@solana/spl-token";var Qt=me("Raydium_txUtil"),Qa=1644;function xi(o){let e=[],t=[];return o.microLamports&&(e.push(Ga.setComputeUnitPrice({microLamports:o.microLamports})),t.push(E.SetComputeUnitPrice)),o.units&&(e.push(Ga.setComputeUnitLimit({units:o.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Gn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function Si(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,r=>{if(clearTimeout(i),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function Ki(o,e){o.length<1&&Qt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Qt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Bi;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Qa}catch{return!1}}async function Ya(o,e,t,n=!0){let i=new za("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Bi;s.feePayer=i;for(let u of e)Ki([...s.instructions,u],[i])||(r.push(s),s=new Bi,s.feePayer=i),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await Bm(o,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Qt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Qt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Qt.debug("filteredLog:",c),l.length||Qt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function ja(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Qt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Yt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Qt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function se(o,e){let[t,n]=za.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function Bm(o,e,t){let n=[];if(t){let i=await o.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=i.blockhash,u.lastValidBlockHeight=i.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=o._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await o.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Qt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function po({instructions:o,payer:e,signers:t}){return Ki(o,[e,...t])}function fo({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Xa.generate().publicKey.toString()}){let r=new Tm({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Dr(r).serialize()).toString("base64").length<Qa}catch{return!1}}var Ii={time:0,data:void 0};async function hg(o){if(!Ii.data||(Date.now()-Ii.time)/1e3>30){let e=await o.getEpochInfo();return Ii={time:Date.now(),data:e},e}else return Ii.data}var Ha=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),xm=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Dr&&(e=Ha(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Tn(o){let e=[];return o.forEach(t=>{t instanceof Bi&&(t.recentBlockhash||(t.recentBlockhash=Im.toBase58()),t.feePayer||(t.feePayer=Xa.generate().publicKey)),e.push(xm(t))}),console.log("simulate tx string:",e),e}function Tg(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof Dr&&(e=Ha(e)),e.toString("base64")}function le(o,e,t){return se([o.toBuffer(),(t!=null?t:Km).toBuffer(),e.toBuffer()],new Sm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ue}from"@solana/web3.js";var Wr=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),qr=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Cm=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Rm=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ci=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Ur=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Lm=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Za=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),In=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),zn=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),yo=new ue("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Om=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Rg=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Mm=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Nm=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),_m=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),vm=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),bo=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Gr=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Vm=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Em=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Fm=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Dm=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),go=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Wm=new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),Ao=new ue("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),qm=new ue("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),wo={IDO_PROGRAM_ID_V1:Mm,IDO_PROGRAM_ID_V2:Nm,IDO_PROGRAM_ID_V3:_m,IDO_PROGRAM_ID_V4:vm},Lg={AMM_V4:Ur,AMM_STABLE:Lm,CLMM_PROGRAM_ID:In,CLMM_LOCK_PROGRAM_ID:zn,CLMM_LOCK_AUTH_ID:yo,FARM_PROGRAM_ID_V3:Wr,FARM_PROGRAM_ID_V5:qr,FARM_PROGRAM_ID_V6:Xn,OPEN_BOOK_PROGRAM:Rm,SERUM_PROGRAM_ID_V3:Ci,UTIL1216:Cm,Router:Om,CREATE_CPMM_POOL_PROGRAM:bo,CREATE_CPMM_POOL_AUTH:Gr,CREATE_CPMM_POOL_FEE_ACC:Vm,LOCK_CPMM_PROGRAM:go,LOCK_CPMM_AUTH:Ao},Og={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ue("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Em,CREATE_CPMM_POOL_AUTH:Fm,CREATE_CPMM_POOL_FEE_ACC:Dm,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Wm,LCOK_CPMM_AUTH:qm};import Ve from"bn.js";var Wt=1e4;function _g(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new Ve(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Wt){let a=new Ve(i.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=Lt(o.mul(new Ve(Wt)),new Ve(Wt-i.transferFeeBasisPoints)),c=new Ve(i.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=Lt(u.mul(new Ve(i.transferFeeBasisPoints)),new Ve(Wt)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=Lt(o.mul(new Ve(i.transferFeeBasisPoints)),new Ve(Wt)),c=a.gt(r)?r:a;return{amount:o,fee:c,expirationTime:s}}}function ge(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=F(R({},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}}),r=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Ve(r.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Wt){let c=new Ve(r.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=Lt(o.mul(new Ve(Wt)),new Ve(Wt-r.transferFeeBasisPoints)),u=new Ve(r.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=Lt(l.mul(new Ve(r.transferFeeBasisPoints)),new Ve(Wt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Lt(o.mul(new Ve(r.transferFeeBasisPoints)),new Ve(Wt)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Ot(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function Lt(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Ve(0))?t.add(new Ve(1)):t}import{PublicKey as $a,AddressLookupTableAccount as Ri}from"@solana/web3.js";async function Xr({connection:o,address:e}){let t=await St(o,[...new Set(e.map(i=>i.toString()))].map(i=>new $a(i))),n={};for(let i=0;i<e.length;i++){let r=t[i],s=e[i];if(!r)continue;let a=new Ri({key:s,state:Ri.deserialize(r.data)});n[s.toString()]=a,Li[s.toString()]=a}return n}var Li={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Ri({key:new $a("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Ri.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as Po,sendAndConfirmTransaction as zr,Transaction as ko,TransactionMessage as ho,VersionedTransaction as To}from"@solana/web3.js";import Um from"axios";var Oi=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.api=e.api}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 Um.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}=xi(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:i=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==Po.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(R({},t||{})):this.build(t)}build(e){var n;let t=new ko;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async i=>{var u;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=i||{},c=r!=null?r:await Gn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),Tn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await zr(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Gn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let A of s){let w=await zr(this.connection,A,this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((w,h)=>(w.recentBlockhash=f,a[h].length&&w.sign(...a[h]),w));Tn(g);let A=await this.signAllTransactions(g);if(m){let w=0,h=[],I=async()=>{if(!A[w])return;let T=await this.connection.sendRawTransaction(A[w].serialize(),{skipPreflight:y});h.push({txId:T,status:"sent",signedTx:A[w]}),d==null||d([...h]),w++,this.connection.onSignature(T,S=>{let B=h.findIndex(C=>C.txId===T);B>-1&&(h[B].status=S.err?"error":"success"),d==null||d([...h]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:h.map(T=>T.txId),signedTxs:A}}else{let w=[];for(let h=0;h<A.length;h+=1){let I=await this.connection.sendRawTransaction(A[h].serialize(),{skipPreflight:y});w.push(I)}return{txIds:w,signedTxs:A}}}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 f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:r}=y,s=Me(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=R(R({},this.cluster==="devnet"?{}:Li),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Po(b));let l=await Xr({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?Po.default.toBase58():r!=null?r:await Gn(this.connection,this.blockhashCommitment),d=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new To(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var w;let{skipPreflight:g=!0,sendAndConfirm:A}=b||{};if(Tn([p]),(w=this.owner)!=null&&w.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await Si(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Tn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:y});await Si(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],w=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:y});A.push({txId:h,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++,this.connection.onSignature(h,I=>{let T=A.findIndex(S=>S.txId===h);T>-1&&(A[T].status=I.err?"error":"success"),d==null||d([...A]),I.err||w()},"processed"),this.connection.getSignatureStatus(h)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let w=await this.connection.sendTransaction(b[A],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Me(u,["computeBudgetConfig"]),i=t?xi(t):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,d)=>F(R({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...i.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Po(b));if(c.length<12&&po({instructions:p,payer:this.feePayer,signers:f})||po({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");po({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new ko().add(...i.instructions,...c)):s.push(new ko().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>r[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>r[p]).filter(p=>p!==void 0);po({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new ko().add(...i.instructions,...c)):s.push(new ko().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Gn(this.connection,this.blockhashCommitment);if(s.forEach(async(A,w)=>{A.recentBlockhash=b,a[w].length&&A.sign(...a[w])}),Tn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let A=[];for(let w of s){let h=await zr(this.connection,w,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(h)}return{txIds:A,signedTxs:s}}return{txIds:await Promise.all(s.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let A=await this.signAllTransactions(s);if(d){let w=0,h=[],I=async()=>{if(!A[w])return;let T=await this.connection.sendRawTransaction(A[w].serialize(),{skipPreflight:f});h.push({txId:T,status:"sent",signedTx:A[w]}),p==null||p([...h]),w++,this.connection.onSignature(T,S=>{let B=h.findIndex(C=>C.txId===T);B>-1&&(h[B].status=S.err?"error":"success"),p==null||p([...h]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:h.map(T=>T.txId),signedTxs:A}}else{let w=[];for(let h=0;h<A.length;h+=1){let I=await this.connection.sendRawTransaction(A[h].serialize(),{skipPreflight:f});w.push(I)}return{txIds:w,signedTxs:A}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,r=Me(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=R(R({},this.cluster==="devnet"?{}:Li),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),c=[];for(let A of a)s[A]===void 0&&c.push(new Po(A));let u=await Xr({connection:this.connection,address:c});for(let[A,w]of Object.entries(u))s[A]=w;let l=t?xi(t):{instructions:[],instructionTypes:[]},m=await Gn(this.connection,this.blockhashCommitment),d=this.signers.reduce((A,w)=>F(R({},A),{[w.publicKey.toBase58()]:w}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(A=>{let w=[...f,A],h=t?[...l.instructions,...w]:w;if(f.length<12&&fo({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s})||fo({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(A);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&fo({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new To(T))}else{let T=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new To(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[A]}}),f.length>0){let w=[...new Set(f.map(h=>h.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(h=>d[h]).filter(h=>h!==void 0);if(t&&fo({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new To(h))}else{let h=new ho({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new To(h))}y.push(w)}return(g=this.owner)!=null&&g.signer&&y.forEach(A=>{A.some(w=>w.publicKey.equals(this.owner.publicKey))||A.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async A=>{var S;let{sequentially:w,onTxUpdate:h,recentBlockHash:I,skipPreflight:T=!0}=A||{};if(p.map(async(B,C)=>{y[C].length&&B.sign(y[C]),I&&(B.message.recentBlockhash=I)}),Tn(p),(S=this.owner)!=null&&S.isKeyPair){if(w){let B=[];for(let C of p){let x=await this.connection.sendTransaction(C,{skipPreflight:T});await Si(this.connection,x),B.push(x)}return{txIds:B,signedTxs:p}}return{txIds:await Promise.all(p.map(async B=>await this.connection.sendTransaction(B,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let B=await this.signAllTransactions(p);if(w){let C=0,x=[],L=async()=>{if(!B[C])return;let q=await this.connection.sendTransaction(B[C],{skipPreflight:T});x.push({txId:q,status:"sent",signedTx:B[C]}),h==null||h([...x]),C++,this.connection.onSignature(q,M=>{let Z=x.findIndex(X=>X.txId===q);Z>-1&&(x[Z].status=M.err?"error":"success"),h==null||h([...x]),M.err||L()},"processed"),this.connection.getSignatureStatus(q)};return L(),{txIds:[],signedTxs:B}}else{let C=[];for(let x=0;x<B.length;x+=1){let L=await this.connection.sendTransaction(B[x],{skipPreflight:T});C.push(L)}return{txIds:C,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};var Ja=(t=>(t.ALL="all",t.Strict="strict",t))(Ja||{}),eu=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(eu||{});var ve={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},gA=R({},ve);var tu="ray_tab_hash",Qr="ray_req_hash",Gm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(tu);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(tu,o)),o},Mi=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=Me(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(Qr)||"[]").slice(0,o-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(F(R({},t),{time:Date.now(),session:Gm()}));try{localStorage.setItem(Qr,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Qr,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Mi(F(R({},t),{logCount:o,removeLastLog:!0}))}};var Qn=me("Raydium_Api"),Yr=new Map;async function EA(o,e,t=1e3){let n;for(;n==null;)try{Qn.debug(`Request ${o} through endlessRetry`),n=await e()}catch(i){Qn.error(`Request ${o} failed, retry after ${t} ms`,i),await _a(t)}return n}var Ni=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=i||1e3,this.api=nu.create({baseURL:this.urlConfigs.BASE_HOST||ve.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Qn.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Qn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&Mi({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Qn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Mi({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Qn.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||ve.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||ve.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||ve.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await nu.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,r)=>i+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||ve.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||ve.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||ve.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||ve.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||ve.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||ve.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||ve.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Yr.has(s)?(n.push(Yr.get(s)),!1):!0),r=[];return i.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||ve.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),r.forEach(a=>{Yr.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&bt(t).toBase58(),n&&n!=="undefined"?bt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||ve.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||ve.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||ve.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||ve.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||ve.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||ve.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||ve.JITO})).data}};import{merge as Xf}from"lodash";var _i="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ou="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Wi,SystemProgram as ep}from"@solana/web3.js";import{AccountLayout as Hn,createAssociatedTokenAccountInstruction as us,TOKEN_PROGRAM_ID as yn,TOKEN_2022_PROGRAM_ID as tp}from"@solana/spl-token";var jr=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=me(t)}createTxBuilder(e){return this.scope.checkOwner(),new Oi({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(jr(e))}logInfo(...e){this.logger.info(jr(e))}logAndCreateError(...e){let t=jr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Yd,SystemProgram as jd}from"@solana/web3.js";import Hd from"bn.js";import{createCloseAccountInstruction as Zd,createInitializeAccountInstruction as $d,createTransferInstruction as Jd,TOKEN_PROGRAM_ID as jn}from"@solana/spl-token";import{Keypair as Gd,PublicKey as wu}from"@solana/web3.js";import Xd from"bn.js";import{TOKEN_PROGRAM_ID as zd}from"@solana/spl-token";function Xm(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Hr(o,...e){if(!Xm(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function Zr(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function iu(o,e){Hr(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Vi=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Mt=(o,e)=>o<<32-e|o>>>e;var $A=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function zm(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function $r(o){return typeof o=="string"&&(o=zm(o)),Hr(o),o}var vi=class{clone(){return this._cloneInto()}},JA={}.toString;function ru(o){let e=n=>o().update($r(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Qm(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),r=BigInt(4294967295),s=Number(t>>i&r),a=Number(t&r),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var su=(o,e,t)=>o&e^~o&t,au=(o,e,t)=>o&e^o&t^e&t,Ei=class extends vi{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Vi(this.buffer)}update(e){Zr(this);let{view:t,buffer:n,blockLen:i}=this;e=$r(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(i-this.pos,r-s);if(a===i){let c=Vi(e);for(;i<=r-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Zr(this),iu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Qm(n,i-8,BigInt(this.length*8),r),this.process(n,0);let a=Vi(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:r,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=r,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Ym=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),pn=new Uint32Array(64),Jr=class extends Ei{constructor(){super(64,32,8,!1),this.A=dn[0]|0,this.B=dn[1]|0,this.C=dn[2]|0,this.D=dn[3]|0,this.E=dn[4]|0,this.F=dn[5]|0,this.G=dn[6]|0,this.H=dn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:r,F:s,G:a,H:c}=this;return[e,t,n,i,r,s,a,c]}set(e,t,n,i,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=r|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)pn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=pn[m-15],p=pn[m-2],y=Mt(d,7)^Mt(d,18)^d>>>3,f=Mt(p,17)^Mt(p,19)^p>>>10;pn[m]=f+pn[m-7]+y+pn[m-16]|0}let{A:n,B:i,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Mt(a,6)^Mt(a,11)^Mt(a,25),p=l+d+su(a,c,u)+Ym[m]+pn[m]|0,f=(Mt(n,2)^Mt(n,13)^Mt(n,22))+au(n,i,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,i,r,s,a,c,u,l)}roundClean(){pn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var uu=ru(()=>new Jr);import{PublicKey as Dd}from"@solana/web3.js";import yu,{isBN as bu}from"bn.js";import{bits as jm,BitStructure as Hm,blob as Zm,Blob as $m,cstr as Jm,f32 as ed,f32be as td,f64 as nd,f64be as od,greedy as id,Layout as rd,ns64 as sd,ns64be as ad,nu64 as ud,nu64be as cd,offset as ld,s16 as md,s16be as dd,s24 as pd,s24be as fd,s32 as yd,s32be as bd,s40 as gd,s40be as Ad,s48 as wd,s48be as Pd,s8 as kd,seq as hd,struct as uw,Structure as Td,u16 as Id,u16be as Bd,u24 as xd,u24be as Sd,u32 as Kd,u32be as Cd,u40 as Rd,u40be as Ld,u48 as Od,u48be as Md,u8 as Nd,UInt as _d,union as vd,Union as Vd,unionLayoutDiscriminator as Ed,utf8 as Fd}from"@solana/buffer-layout";var Io=rd,cu=Td,lu=Vd,cw=Hm,es=_d,mu=$m,lw=id,Fi=Nd,jt=Id,mw=xd,Bo=Kd,dw=Rd,pw=Od,du=ud,fw=Bd,yw=Sd,bw=Cd,gw=Ld,Aw=Md,ww=cd,Pw=kd,kw=md,hw=pd,$e=yd,Tw=gd,Iw=wd,Bw=sd,xw=dd,Sw=fd,Kw=bd,Cw=Ad,Rw=Pd,Lw=ad,Ow=ed,Mw=td,Nw=nd,_w=od;var pu=hd,fu=vd,vw=Ed,Ae=Zm,Vw=Jm,Ew=Fd,ts=jm,ns=ld;var Bn=class extends Io{constructor(t,n,i){super(t,i);this.blob=Ae(t),this.signed=n}decode(t,n=0){let i=new yu(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new yu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},Di=class extends Io{constructor(t){super(8,t);this._lower=ts(Bo(),!1),this._upper=ts(Bo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return R(R({},i),r)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function D(o){return new es(1,o)}function Je(o){return new es(4,o)}function P(o){return new Bn(8,!1,o)}function ee(o){return new Bn(16,!1,o)}function gu(o){return new Bn(1,!0,o)}function Yn(o){return new Bn(8,!0,o)}function Au(o){return new Bn(16,!0,o)}var Ht=class extends Io{constructor(t,n,i,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new Ht(Ae(32),e=>new Dd(e),e=>e.toBuffer(),o)}var os=class extends Io{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=Fi()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Uw(o,e){return new os(o,e)}function Ee(o){return new Ht(Fi(),Wd,qd,o)}function Wd(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function qd(o){return o?1:0}function Gw(o,e){let t=Bo("length"),n=v([t,Q(o,ns(t,-t.span),"values")]);return new Ht(n,({values:i})=>i,i=>({values:i}),e)}function Xw(o,e,t){let n=v([P("tag"),e.replicate("data")]);function i({tag:r,data:s}){if(!r.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+r.toString("hex"));return s}return new Ht(n,i,r=>({tag:o,data:r}),t)}function Ud(o){let e=Bo("length"),t=v([e,Ae(ns(e,-e.span),"data")]);return new Ht(t,({data:n})=>n,n=>({data:n}),o)}function zw(o){return new Ht(Ud(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function Qw(o,e){let t=fu(Fi(),e);return o.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function Yw(o,e,t){let n=v([Q(o,e,"values")]);return new Ht(n,({values:i})=>i,i=>({values:i}),t)}var is=class extends cu{decode(e,t){return super.decode(e,t)}};function v(o,e,t){return new is(o,e,t)}var rs=class extends lu{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function jw(o,e,t){return new rs(o,e,t)}var ss=class extends mu{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function Hw(o){return new ss(o)}function Q(o,e,t){let n,i=typeof e=="number"?e:bu(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=bu(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return pu(o,i,t)}var fn=v([K("mint"),K("owner"),P("amount"),Je("delegateOption"),K("delegate"),D("state"),Je("isNativeOption"),P("isNative"),P("delegatedAmount"),Je("closeAuthorityOption"),K("closeAuthority")]);var lP=me("Raydium_Util");function Pu({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:r,account:s}of t.value){let a=fn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:le(o,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),i.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:wu.default,amount:new Xd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function dt({fromPublicKey:o,programId:e=zd}){let t=Gd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Qd(o,t,e),seed:t}}function Qd(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=uu(n);return new wu(i)}function as(o){let{mint:e,tokenAccount:t,owner:n,programId:i=jn}=o;return $d(t,e,n,i)}function Zt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:r=jn}=o;return Zd(e,t,i,n,r)}async function $t(o){let{connection:e,amount:t,commitment:n,payer:i,owner:r,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(fn.span,n),c=H(t).add(new Hd(a)),u=dt({fromPublicKey:i,programId:jn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[jd.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:fn.span,programId:jn}),as({mint:new Yd(qe.address),tokenAccount:u.publicKey,owner:r,programId:jn})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[Zt({tokenAccount:u.publicKey,payer:i,owner:r})]}}function ku({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:r=jn}){return Jd(o,e,t,BigInt(String(n)),i,r)}var xo=class extends Ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return le(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=R(R({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:yn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:tp},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Pu({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=yn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let r=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of r){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Wi(t.tokenProgram||yn),m=this.getAssociatedTokenAccount(n,new Wi(l)),d=(a?[]:this.tokenAccountRawInfos).filter(A=>A.accountInfo.mint.equals(n)&&(!r||A.pubkey.equals(m))).sort((A,w)=>A.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let A=us(s,m,s,n,l);if(u){let w=await this.scope.connection.getAccountInfo(m);if(w===null)(y=p.instructions)==null||y.push(A),p.instructionTypes.push(E.CreateATA);else if(!(w.owner.equals(l)&&Hn.decode(w.data).mint.equals(n)&&Hn.decode(w.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(A),p.instructionTypes.push(E.CreateATA);if(n.equals(j)&&i.amount){let w=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),i.amount&&(p.instructions.push(ku({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:yn})),p.instructionTypes.push(E.TransferAmount))}return c||(p.endInstructions.push(Zt({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:m,instructionParams:p}}else{let A=dt({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Hn.span),h=ep.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:A.seed,newAccountPubkey:A.publicKey,lamports:w+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:Hn.span,programId:l});return p.instructions.push(h,as({mint:n,tokenAccount:A.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),c||(p.endInstructions.push(Zt({owner:s,payer:i.payer||s,tokenAccount:A.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:A.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=yn,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let r=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!r){let u=this.getAssociatedTokenAccount(t,n),l=await us(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],r=u}return i&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Zt({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:r,programId:s=yn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new Wi(j).equals(r)){let p=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return R({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=us(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(yn)&&Hn.decode(f.data).mint.equals(r)&&Hn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=yn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Wi(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Me(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Me(m,["tokenAccount"]);c=d,u.addInstruction(p)}return R({tokenAccount:c},u.AllTxData)}};import{PublicKey as Pe,SystemProgram as hp}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Tp}from"@solana/spl-token";import{PublicKey as Ku}from"@solana/web3.js";var cs=v([D("instruction")]),ls=v([D("instruction")]),np=v([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),ee("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),op=v([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),ee("perShareReward"),P("lastSlot"),P("perSlotReward")]),ip=v([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),ee("perShareRewardA"),P("perSlotRewardA"),D("option"),K("rewardVaultB"),Ae(7),P("totalRewardB"),ee("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),rp=v([P(),P("state"),P("nonce"),P("validRewardTokenNum"),ee("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),Q(np,5,"rewardInfos"),K("creator"),K(),Q(P(),32,"padding")]),hu=new Proxy(op,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),Tu=new Proxy(ip,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),So=new Proxy(rp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:6,rewardInfos:i.rewardInfos.map(r=>{var s;return F(R({},r),{rewardType:((s=Object.entries(bn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),sp=v([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),ms=v([D("instruction"),P("nonce"),Q(sp,5,"rewardTimeInfo")]),ds=v([D("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),ps=v([D("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),qP=v([P("state"),K("id"),K("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),Ko=v([P("state"),K("id"),K("owner"),P("deposited"),Q(ee(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),UP=v([P("state"),K("id"),K("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),Iu=v([P("state"),K("id"),K("owner"),P("deposited"),Q(ee(),2,"rewardDebts"),Q(P(),17)]),Bu=v([P(),P("state"),K("id"),K("owner"),P("deposited"),Q(ee(),5,"rewardDebts"),Q(P(),16)]),at=v([D("instruction"),P("amount")]),ap=v([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),gu("digitShift"),Q(D(),7,"reserved1"),Q(P(),7,"reserved2")]),xu=v([Ae(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),Q(D(),32,"reserved1"),Q(ap,4,"votingMints"),Yn("timeOffset"),D("bump"),Q(D(),7,"reserved2"),Q(P(),11,"reserved3")]),up=v([Yn("startTime"),Yn("endTime"),D("kind"),Q(D(),15,"reserved")]),cp=v([Q(up,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ee("isUsed"),Ee("allowClawback"),D("votingMintConfigIdx"),Q(D(),29,"reserved")]),Su=v([Ae(8),K("voterAuthority"),K("registrar"),Q(cp,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),Q(D(),94,"reserved")]);var ZP=me("Raydium_farm_config"),Cu=new Ku("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ru=new Ku("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Lu={3:hu,5:Tu,6:So},Ou={3:Ko,5:Iu,6:Bu},fs=o=>[3,5,6].indexOf(o)!==-1,ys=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=r[e])==null?void 0:s.call(r)},bn={"Standard SPL":0,"Option tokens":1},kt={[Wr.toString()]:3,[qr.toString()]:5,[Xn.toString()]:6};import{PublicKey as ce,SystemProgram as xn,SYSVAR_CLOCK_PUBKEY as Lo,SYSVAR_RENT_PUBKEY as dp,TransactionInstruction as Ye}from"@solana/web3.js";import qi from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as pp,createAssociatedTokenAccountInstruction as fp,TOKEN_PROGRAM_ID as gt}from"@solana/spl-token";function bs(o,e,t){return se([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function gs(o,e){return se([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function As(o,e){return se([e.toBuffer()],o)}function ws(o,e,t){return se([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function Ps(o,e,t){return se([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function ks(o,e,t,n){return se([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import pt from"bn.js";var Co=me("Raydium.farm.util");function Ro({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function nt({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var Mu=({programId:o,poolId:e})=>se([e.toBuffer()],o);function Nu(o){return{isSet:new pt(1),rewardPerSecond:H(o.perSecond),rewardOpenTime:H(o.openTime),rewardEndTime:H(o.endTime),rewardType:H(bn[o.rewardType])}}function hs(o){return H(o.endTime).sub(H(o.openTime)).mul(H(o.perSecond))}function Zn(o){let e=Ou[o];return e||Co.logWithError("invalid version",o),e}function lp(o){let e=Lu[o];return e||Co.logWithError("invalid version",o),e}function mp(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new pt(t)))return o;let i=new pt(t).sub(o.lastSlot);o.lastSlot=new pt(t);for(let r of o.rewardInfos){if(e.amount.eq(new pt(0)))continue;let s=r.perSlotReward.mul(i);r.perShareReward=r.perShareReward.add(s.mul(new pt(10).pow(new pt(o.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(o.version===6)for(let i of o.rewardInfos){if(i.rewardState.eq(new pt(0)))continue;let r=pt.min(new pt(n),i.rewardEndTime);if(i.rewardOpenTime.gte(r))continue;let a=r.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),c=i.totalReward.sub(i.totalRewardEmissioned);c.lt(a)?(a=c,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(c.div(i.rewardPerSecond))):i.rewardLastUpdateTime=r,!e.amount.eq(new pt(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return o}async function fk({connection:o,farmPools:e,owner:t,config:n,chainTime:i}){let r=!1,s=!1,a=new pt(10),c=[];for(let d of e){let p=Ie(d);p.version===6?s=!0:r=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:nt({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await De(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=R({},u[g]),y==="state"){let A=lp(p);(!b||!b.data||b.data.length!==A.span)&&Co.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=A.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==fn.span)&&Co.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=fn.decode(b.data);else if(y==="ledger"){let A=Zn(p);b&&b.data&&(b.data.length!==A.span&&Co.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=A.decode(b.data))}}let m=s||r?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=mp(u[d].state,u[d].lpVault,m,i));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new pt(9)):a.pow(new pt(15)),b=p.rewardInfos.map((g,A)=>{let w=y.rewardDebts[A];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(w)});u[d].wrapped=F(R({},u[d].wrapped),{pendingRewards:b})}return u}function yk(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>qa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Ua(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Ts(o,e,t,n){let i=await o.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=xu.decode(i.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Su.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var yp=me("Raydium_farm_instruction"),Oo={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function Mo(o){let{version:e,id:t,ledger:n,programId:i,owner:r}=o,s={3:9,5:10}[e];s||yp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(cs.span);cs.encode({instruction:s},a);let c=[k({pubkey:t}),k({pubkey:n}),k({pubkey:r,isWritable:!1}),k({pubkey:xn.programId,isWritable:!1}),k({pubkey:dp,isWritable:!1})];return{instruction:new Ye({programId:i,keys:c,data:a}),instructionType:E.FarmV3CreateLedger}}function _u(o){var n;let e=Buffer.alloc(ms.span);ms.encode({instruction:0,nonce:new qi(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Rr,k({pubkey:o.farmId}),k({pubkey:o.farmAuthority,isWritable:!1}),k({pubkey:o.lpVault}),k({pubkey:o.lpMint,isWritable:!1}),k({pubkey:o.lockVault}),k({pubkey:o.lockMint,isWritable:!1}),k({pubkey:(n=o.lockUserAccount)!=null?n:Ue}),k({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(k({pubkey:i.rewardMint,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}));return{instruction:new Ye({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function vu(o){let e=Buffer.alloc(ls.span);ls.encode({instruction:5},e);let t=[k({pubkey:gt,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.lpVault,isWritable:!1}),k({pubkey:o.rewardVault}),k({pubkey:o.userRewardToken}),k({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ye({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function bp(o,e,t,n,i,r,s,a,c,u,l,m,d){let p=v([D("depositEntryIndex"),P("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:ki,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Oo.voterStakeRegistryDeposit,...f]);return new Ye({keys:y,programId:o,data:b})}function gp(o,e,t,n){let i=v([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:xn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...Oo.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ye({keys:r,programId:o,data:a})}function Ap(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=v([D("depositEntryIndex"),P("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:ki,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let A=Buffer.from([...Oo.voterStakeRegistryWithdraw,...g]);return new Ye({keys:b,programId:o,data:A})}function wp(o,e,t,n,i,r){let s=v([D("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:xn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ye({keys:a,programId:o,data:c})}function Pp(o,e,t,n,i,r,s,a){let c=v([D("voterBump"),D("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:xn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:ki,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Oo.voterStakeRegistryCreateVoter,...l]);return new Ye({keys:u,programId:o,data:m})}function kp(o,e,t,n,i,r,s,a,c,u,l,m){let d=v([D("depositEntryIndex"),D("kind"),D("option"),P("startTs"),Je("periods"),Ee("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:xn.programId,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:pp,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Oo.voterStakeRegistryCreateDepositEntry,...y]);return new Ye({keys:p,programId:o,data:f})}async function Lk({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=bs(n,i,r).publicKey,l=nt({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ko.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new qi(0)))throw Error("user do not has new stake amount");let y=gs(e,a).publicKey,f=As(e,a).publicKey,{publicKey:b,nonce:g}=ws(n,u,s),A=le(b,y,c).publicKey,{publicKey:w,nonce:h}=Ps(n,u,s),I=ks(t,i,r,s).publicKey,T=[],S=le(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(fp(s,S,s,y)),await o.getAccountInfo(b)===null){let q=wp(t,i,s,r,s,I);T.push(q,Pp(n,u,b,w,s,s,g,h))}let{index:x,isInit:L}=await Ts(o,u,b,y);return L||T.push(kp(n,u,b,A,s,s,y,x,0,void 0,0,!1)),T.push(bp(n,u,b,A,S,s,l,a,y,f,e,x,p),gp(n,u,b,w)),T}async function Ok({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=bs(n,i,r).publicKey,l=nt({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ko.decode(m.data);if(d.voteLockedBalance.eq(new qi(0)))throw Error("user has vote locked balance = 0");let p=gs(e,a).publicKey,y=As(e,a).publicKey,{publicKey:f}=ws(n,u,s),b=le(f,p,c).publicKey,{publicKey:g}=Ps(n,u,s),A=ks(t,i,r,s).publicKey,w=[],{index:h,isInit:I}=await Ts(o,u,f,p);if(!I)throw Error("deposit entry index check error");return w.push(Ap(n,u,f,s,A,g,b,le(s,p,c).publicKey,l,a,p,y,e,h,d.voteLockedBalance)),w}function Is({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let r=Buffer.alloc(ds.span);ds.encode({instruction:3,rewardReopenTime:H(i.openTime),rewardEndTime:H(i.endTime),rewardPerSecond:H(i.perSecond)},r);let s=[k({pubkey:gt,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:o,isWritable:!1,isSigner:!0})];return new Ye({programId:n.programId,keys:s,data:r})}function Bs({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let r=Buffer.alloc(ps.span);ps.encode({instruction:4,isSet:new qi(1),rewardPerSecond:H(i.perSecond),rewardOpenTime:H(i.openTime),rewardEndTime:H(i.endTime),rewardType:H(bn[i.rewardType])},r);let s=[...Rr,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:i.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:o,isWritable:!1,isSigner:!0})];return new Ye({programId:t.programId,keys:s,data:r})}function Mk(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new ce(e.programId),new ce(e.id)],d=nt({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(at.span);at.encode({instruction:a,amount:c},p);let y=n===6?[k({pubkey:gt,isWritable:!1}),...u?[k({pubkey:xn.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:new ce(t.lpVault)}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i})]:[k({pubkey:m}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i}),k({pubkey:new ce(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:r[f]})),y.push(k({pubkey:new ce(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new ce(t.rewardInfos[f].vault)})),y.push(k({pubkey:r[f]}));return new Ye({programId:l,keys:y,data:p})}function No(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new ce(e.programId),new ce(e.id)],u=nt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(at.span);at.encode({instruction:2,amount:H(s)},l);let m=[k({pubkey:gt,isWritable:!1}),k({pubkey:c}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:new ce(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Ye({programId:a,keys:m,data:l})}function _o(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(at.span);at.encode({instruction:12,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function vo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(at.span);at.encode({instruction:11,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function Vu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(at.span);at.encode({instruction:10,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function Eu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=nt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(at.span);at.encode({instruction:11,amount:H(s)},m);let d=[k({pubkey:u}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ce(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ce(t.rewardInfos[0].vault)}),k({pubkey:Lo,isWritable:!1}),k({pubkey:gt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Ye({programId:c,keys:d,data:m})}function Fu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new ce(e.programId),new ce(e.id)],u=nt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(at.span);at.encode({instruction:1,amount:H(s)},l);let m=[k({pubkey:gt,isWritable:!1}),k({pubkey:xn.programId,isWritable:!1}),k({pubkey:c}),k({pubkey:new ce(t.authority),isWritable:!1}),k({pubkey:new ce(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Ye({programId:a,keys:m,data:l})}var Vo=class extends Ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ue)){let n=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:hs(F(R({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Xn,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Pe(e.lpMint.address),lockInfo:{lockMint:Cu,lockVault:Ru},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=dt({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(So.span);c.addInstruction({instructions:[hp.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:So.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Mu({programId:new Pe(a.programId),poolId:l.publicKey}),y=Ro({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(bn[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Nu(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=I.mint.equals(Ue)?new Pe(qe.address):I.mint;b.push({rewardMint:B,rewardVault:Ro({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:new Pe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});A&&c.addInstruction(A),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:w,instructionType:h}=_u({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[w],instructionTypes:[h]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let r=kt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Ue)?new Pe(qe.address):n.mint,l=a.rewardInfos.findIndex(g=>new Pe(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Ue,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Is({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let r=kt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ue)?new Pe(qe.address):m.mint,p=a.rewardInfos.findIndex(w=>new Pe(w.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ue,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let A=Is({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[A],instructionTypes:[E.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:r}=e,s=kt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(Ue)?new Pe(qe.address):i.mint,m=Ro({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[Bs({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:r}=e,s=kt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ue)?new Pe(qe.address):l.mint,d=Ro({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Bs({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(R({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[E.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=kt[d];fs(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Pe(n.programId),new Pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=nt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),A=this.createTxBuilder();A.addCustomComputeBudget(l);let w={};for(let M of this.scope.account.tokenAccounts)if(a){let Z=le(this.scope.ownerPubKey,M.mint,M.programId).publicKey;M.publicKey&&Z.equals(M.publicKey)&&(w[M.mint.toString()]=M.publicKey)}else w[M.mint.toString()]=M.publicKey;let h=b.lpMint,I=w[h.address];I||this.logAndCreateError("you don't have any lp","lp zero",w);let T=[];for(let M of m){let Z=s&&M.mint.address===j.toString(),X=w[M.mint.address];if(!X){let{account:W,instructionParams:ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:M.mint.programId,mint:new Pe(M.mint.address),notUseTokenAccount:Z,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:c});X=W,ze&&A.addInstruction(ze)}w[M.mint.address]=X,T.push(X)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=Zn(p).decode(B.data)),n.programId!==Xn.toString()&&!S){let{instruction:M,instructionType:Z}=Mo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});A.addInstruction({instructions:[M],instructionTypes:[Z]})}let C=ys({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});C&&this.logAndCreateError(C);let x={amount:H(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(M=>new Pe(M))},L=p===6?Fu(x):p===5?Eu(x):Vu(x),q={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return A.addInstruction({instructions:[L],instructionTypes:[q[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=kt[n.programId];fs(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=le(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(r)r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=nt({programId:new Pe(n.programId),poolId:new Pe(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)Zn(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:q}=Mo({id:new Pe(y.id),programId:new Pe(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[q]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}let g=y.lpMint.address,A=s&&g===j.toString(),w=b[g.toString()];if(!w){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Pe(g),notUseTokenAccount:A,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:A?!1:c,checkCreateATAOwner:u});w=C,x&&f.addInstruction(x)}b[g.toString()]=w;let h=[];for(let C of d){let x=s&&C.mint.address===j.toString(),L=b[C.mint.address];if(!L){let{account:q,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Pe(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});L=q,M&&f.addInstruction(M)}b[C.mint.address]=L,h.push(L)}let I=ys({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:h});I&&this.logAndCreateError(I);let T={amount:H(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new Pe(C))},S=p===6?No(T):p===5?_o(T):vo(T),B={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=kt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ue.toString()?new Pe(qe.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ue,u=this.createTxBuilder(),l;if(t.equals(Ue)){let y=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:hs(F(R({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Tp(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:m,instructionType:d}=vu({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=le(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(R({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:A}=y,w=kt[f],h=b.address,I=n&&h===j.toString(),T=m[h];if(!T){let{account:q,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Pe(h),notUseTokenAccount:I,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:r,checkCreateATAOwner:s});T=q,M&&l.addInstruction(M)}m[h.toString()]=T;let S=[];for(let q of g){let M=n&&q.mint.address===j.toString(),Z=m[q.mint.address];if(!Z){let{account:X,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:q.mint.programId,mint:new Pe(q.mint.address),notUseTokenAccount:M,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!M,associatedOnly:M?!1:r,checkCreateATAOwner:s});Z=X,W&&l.addInstruction(W)}m[q.mint.address]=Z,S.push(Z)}let B=p[A],C={amount:Ge,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(q=>new Pe(q))},x=w===6?No(C):w===5?_o(C):vo(C),L={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[L[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as rt}from"@solana/web3.js";import{AccountLayout as df,NATIVE_MINT as Bc,TOKEN_PROGRAM_ID as to}from"@solana/spl-token";import{Keypair as Yi,PublicKey as U,SystemProgram as On,TransactionInstruction as lt}from"@solana/web3.js";import sc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ns,TOKEN_2022_PROGRAM_ID as Ut,TOKEN_PROGRAM_ID as xe}from"@solana/spl-token";import _p from"bn.js";import ht from"bn.js";var ye=new ht(0),At=new ht(1),Jt=new ht(-1),wt=new ht(1).shln(64),Ui=new ht(1).shln(128),xs=wt.sub(At),Eo=64,Du=Ui.subn(1),ot=-443636,ut=-ot,Tt=new ht("4295048016"),It=new ht("79226673521066979257578248091"),Gi=new ht("4295048017"),Xi=new ht("79226673521066979257578248090"),Wu=16,qu="59543866431248",Uu="184467440737095516",Gu="15793534762490258745",zi=new ht(10).pow(new ht(6)),Ip=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Ip||{}),lh={[500]:10,[3e3]:60,[1e4]:200},mh={version:6,liquidity:ye,tickCurrent:0,feeGrowthGlobalX64A:ye,feeGrowthGlobalX64B:ye,protocolFeesTokenA:ye,protocolFeesTokenB:ye,swapInAmountTokenA:ye,swapOutAmountTokenB:ye,swapInAmountTokenB:ye,swapOutAmountTokenA:ye,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},Xu={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},dh=new ht("18446744073700000000");import ae from"bn.js";function zu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function fh(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function yh(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Qi(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ss(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Ks(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Fo(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Qu(o,e){return Fo(o,e)?null:Ss(o,e)}function Yu(o,e){return Fo(o,e)?null:Ks(o,e)}var Bp=Buffer.from("amm_config","utf8"),xp=Buffer.from("pool","utf8"),Sp=Buffer.from("pool_vault","utf8"),Kp=Buffer.from("pool_reward_vault","utf8"),ju=Buffer.from("position","utf8"),Cp=Buffer.from("tick_array","utf8"),Rp=Buffer.from("operation","utf8"),Lp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Op=Buffer.from("observation","utf8");function wh(o,e){return se([Bp,zu(e)],o)}function Hu(o,e,t,n){return se([xp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Cs(o,e,t){return se([Sp,e.toBuffer(),t.toBuffer()],o)}function Zu(o,e,t){return se([Kp,e.toBuffer(),t.toBuffer()],o)}function de(o,e,t){return se([Cp,e.toBuffer(),Qi(t)],o)}function Nt(o,e,t,n){return se([ju,e.toBuffer(),Qi(t),Qi(n)],o)}function ct(o,e){return se([ju,e.toBuffer()],o)}function Sn(o){return se([Buffer.from("metadata","utf8"),zt.toBuffer(),o.toBuffer()],zt)}function Do(o){return se([Rp],o)}function ft(o,e){return se([Lp,e.toBuffer()],o)}function $u(o,e){return se([Op,e.toBuffer()],o)}var Ju=Buffer.from("locked_position","utf8");function Rs(o,e){return se([Ju,e.toBuffer()],o)}function Wo(o,e){return se([Ju,e.toBuffer()],o)}import{PublicKey as _t}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as ec}from"@solana/spl-token";import Be from"bn.js";import qt from"bn.js";var qo=class{static getfeeGrowthInside(e,t,n){let i=new qt(0),r=new qt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new qt(0),a=new qt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,wt),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,wt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,wt),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,wt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,wt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,i){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,wt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:r,epochInfo:s}){var b,g,A,w;let a=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+i:1-i,m=pe.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new qt(new O(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),ge(new qt(new O(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Ot(d.expirationTime,p.expirationTime)}}};var Mp=15,fe=class{static async getTickArrays(e,t,n,i,r,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(i,r),l=Y.getInitializedTickArrayInRange(s,a,r,u,Math.floor(Mp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=de(t,n,l[p]);c.push(y)}let m=(await St(e,c)).map(p=>p!==null?Uo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(R({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,r){let s=Math.floor(e/fe.tickCount(t)),a=n?Y.searchLowBitFromStart(i,r,s-1,1,t):Y.searchHightBitFromStart(i,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let r;if(i){let a=Xe-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<Xe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=de(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,r,s){let a=Y.getTickArrayStartIndexByTick(i,r),c=Math.floor((i-a)/r),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Xe;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=de(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>ut)return!1;let n=Y.getTickArrayStartIndexByTick(ot,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Xe*e}};var Ls=14,en=class{static maxTickInTickarrayBitmap(e){return e*Xe*Kn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let r=n*i;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!fe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=i?t-fe.tickCount(n):t+fe.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*Xe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=Qu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=Yu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-fe.tickCount(n)}}}},Go=class{static getBitmapOffset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=en.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=en.maxTickInTickarrayBitmap(e),n=-t;if(ut<=t)throw Error(`extensionTickBoundary check error: ${ut}, ${t}`);if(n<=ot)throw Error(`extensionTickBoundary check error: ${n}, ${ot}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(i).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let r=fe.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:r,maxValue:s}=en.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=Y.mergeTickArrayBitmap(e).shln(Kn-1-a),u=Fo(512,c)?null:Ss(512,c);if(u!==null){let l=t-u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=Fo(512,c)?null:Ks(512,c);if(u!==null){let l=t+u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-fe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%en.maxTickInTickarrayBitmap(t),i=Math.floor(n/fe.tickCount(t));return e<0&&n!=0&&(i=Kn-i),i}};var Re=class{static getOutputAmountAndRemainAccounts(e,t,n,i,r,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=Cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,r,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(Jt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,r){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=de(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Jt),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Re.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Go.checkTickArrayIsInit(fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=de(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/fe.tickCount(e.tickSpacing)),i=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:r}=en.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Go.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<ot||t>ut)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(R({},m),{perSecond:oe.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new _t(d)});if(p.tokenMint.equals(_t.default))continue;if(n<=p.openTime.toNumber()||i.eq(ye)){s.push(p);continue}let y=new Be(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=oe.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),A=oe.mulDivFloor(f,p.emissionsPerSecondX64,wt),w=p.rewardTotalEmissioned.add(A);s.push(F(R({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let r of t){let s=Y.getTickArrayStartIndexByTick(r,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=en.maxTickInTickarrayBitmap(e),n=-t;return t>ut&&(t=fe.getArrayStartIndex(ut,e)+fe.tickCount(e)),n<ot&&(n=fe.getArrayStartIndex(ot,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/fe.tickCount(t)*Kn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await De(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of i)s.accountInfo!==null&&(r[s.pubkey.toString()]=nc.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},r=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=de(c.programId,c.id,m);r.push({pubkey:d}),i[d.toString()]=c.id}}let s=await De(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Uo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(R({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:r=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(ct(p,d).publicKey);let l=await St(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Xo.decode(d.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:h}=pe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:w,amountB:h,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>F(R({},B),{pendingReward:new Be(0)})),leverage:I,tokenFeeAmountA:new Be(0),tokenFeeAmountB:new Be(0)}];let T=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await St(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Uo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[A].toString()],I=y[m[w].toString()],T=h.ticks[Y.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[Y.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await qo.GetPositionFees(f,g,T,S),x=await qo.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=B.gte(new Be(0))?B:new Be(0),g.tokenFeeAmountB=C.gte(new Be(0))?C:new Be(0);for(let L=0;L<x.length;L++)g.rewardInfos[L].pendingReward=x[L].gte(new Be(0))?x[L]:new Be(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:r,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var q;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new O(0))?u=l?Tt.add(new Be(1)):It.sub(new Be(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,i,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:A}=Re.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((q=p.fee)!=null?q:ye),u,c),w=ge(f,d,i,!1),h=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?h:new O(1).div(h),T=f.mul(new Be(Math.floor((1-s)*1e10))).div(new Be(1e10)),S=ge(T,d,i,!1),B=l?e.currentPrice:new O(1).div(e.currentPrice),C=new O(I).sub(B).abs(),x=B,L=new Ce(new O(C).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:Ot(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:L,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new we(F(R({},u),{mint:u.address,isToken2022:u.programId===ec.toBase58()})),new we(F(R({},l),{mint:l.address,isToken2022:l.programId===ec.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:w,priceImpact:h,fee:I,remainingAccounts:T,executionPriceX64:S}=Re.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new _t(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),B=F(R({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=F(R({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=F(R({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new Qe({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),q=new Qe({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),M=new be(m,I);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:L,executionPrice:q,priceImpact:h,fee:M,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:r,slippage:s,priceLimit:a=new O(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new O(0))?l=c?It.sub(new Be(1)):Tt.add(new Be(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Re.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:ye),l),b=c?e.mintB.address:e.mintA.address,g=ge(d,u[b],i,!1),A=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),w=c?A:new O(1).div(A),h=d.mul(new Be(Math.floor((1+s)*1e10))).div(new Be(1e10)),I=ge(h,u[b],i,!0),T=c?e.currentPrice:new O(1).div(e.currentPrice),S=new O(w).sub(T).abs(),B=T,C=new Ce(new O(S).mul(10**15).toFixed(0),new O(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Ot(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let r=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[bt(e.mintA.address).toString()],d=i[bt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:w}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:I}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),T=new O(A.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(w.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(h.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(I.toString()).div(new O(10).pow(y)).mul(d.value)),B=new O(1).div(T.add(S)),x=new O(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),L=3600*24*365,q=e.rewardDefaultInfos.map(M=>{var W,ze;let Z=M.mint.decimals,X=i[M.mint.address];return c<((W=M.startTime)!=null?W:0)||c>((ze=M.endTime)!=null?ze:0)||!M.perSecond||!X||Z===void 0?0:new O(X.value).mul(new O(M.perSecond).mul(L)).div(new O(10).pow(Z)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:q,apr:x+q.reduce((M,Z)=>M+Z,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Be(new O(y.amount.sub((A=y.fee)!=null?A:ye).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?pe.getLiquidityFromTokenAmountA(m,d,f,!a):new Be(0);else if(l.lte(d)){let w=pe.getLiquidityFromTokenAmountA(l,d,f,!a),h=pe.getLiquidityFromTokenAmountB(m,l,f);b=t?w:h}else b=t?new Be(0):pe.getLiquidityFromTokenAmountB(m,d,f);return Re.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:r,slippage:s,add:a}){var b,g,A,w;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ge(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Ot(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new _t(c.id));(await St(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=Rn.decode(c.data))});let s=t.map(c=>ft(new _t(c.programId),new _t(c.id)).publicKey),a=await Re.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(R({},c),{[u.id]:F(R({},n[u.id]),{id:new _t(u.id),version:6,programId:new _t(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(R({},u.config),{id:new _t(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapInfo:a[ft(new _t(u.programId),new _t(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function iT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var w,h,I,T;let[u,l,m,d]=e<t?[e,t,n,i]:[t,e,i,n],p=te.priceToSqrtPriceX64(new O(o.price),o.mintA.decimals,o.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[ge(m,(w=o.mintA.extensions)==null?void 0:w.feeConfig,a,!c),ge(d,(h=o.mintB.extensions)==null?void 0:h.feeConfig,a,!c)],A=pe.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:ye),g.amount.sub((T=g.fee)!=null?T:ye));return pe.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:A,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var Os={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function tc(o){return F(R({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Os,week:Os,month:Os,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:F(R({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var oe=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),r=i.div(n);return i.mod(n).eq(ye)||(r=r.add(At)),r}static mulDivFloor(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).add(n.sub(At)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ae(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ui).sub(t).mod(Ui)}};function je(o,e){return Ms(o.mul(e),64,256)}function Np(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ms(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return oe.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return oe.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(ye))return e;let r=t.shln(Eo);if(i){let s=r,a=r.add(n.mul(e));return a.gte(s)?oe.mulDivCeil(s,e,a):oe.mulDivRoundingUp(s,At,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return oe.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let r=n.shln(Eo);if(i)return e.add(r.div(t));{let s=oe.mulDivRoundingUp(r,At,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<ot||e>ut)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ae("18445821805675395072"):new ae("18446744073709551616");return(t&2)!=0&&(n=je(n,new ae("18444899583751176192"))),(t&4)!=0&&(n=je(n,new ae("18443055278223355904"))),(t&8)!=0&&(n=je(n,new ae("18439367220385607680"))),(t&16)!=0&&(n=je(n,new ae("18431993317065453568"))),(t&32)!=0&&(n=je(n,new ae("18417254355718170624"))),(t&64)!=0&&(n=je(n,new ae("18387811781193609216"))),(t&128)!=0&&(n=je(n,new ae("18329067761203558400"))),(t&256)!=0&&(n=je(n,new ae("18212142134806163456"))),(t&512)!=0&&(n=je(n,new ae("17980523815641700352"))),(t&1024)!=0&&(n=je(n,new ae("17526086738831433728"))),(t&2048)!=0&&(n=je(n,new ae("16651378430235570176"))),(t&4096)!=0&&(n=je(n,new ae("15030750278694412288"))),(t&8192)!=0&&(n=je(n,new ae("12247334978884435968"))),(t&16384)!=0&&(n=je(n,new ae("8131365268886854656"))),(t&32768)!=0&&(n=je(n,new ae("3584323654725218816"))),(t&65536)!=0&&(n=je(n,new ae("696457651848324352"))),(t&131072)!=0&&(n=je(n,new ae("26294789957507116"))),(t&262144)!=0&&(n=je(n,new ae("37481735321082"))),e>0&&(n=Du.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(It)||e.lt(Tt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ae(t-64),i=Np(n,32,128),r=new ae("8000000000000000","hex"),s=0,a=new ae(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new ae(0))&&s<Wu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new ae(qu)),d=Ms(m.sub(new ae(Uu)),64,128).toNumber(),p=Ms(m.add(new ae(Gu)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},Ln=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let r=Ln.getTickWithPriceAndTickspacing(e,t,n,i),s=te.getSqrtPriceX64FromTick(r);return te.sqrtPriceX64ToPrice(s,n,i)}},pe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(Eo),s=t.sub(e);return i?oe.mulDivRoundingUp(oe.mulDivCeil(r,s,t),At,e):oe.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");return i?oe.mulDivCeil(n,t.sub(e),wt):oe.mulDivFloor(n,t.sub(e),wt)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return i?oe.mulDivRoundingUp(a,At,xs):a.shrn(Eo)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),oe.mulDivFloor(n,xs,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,i,!1),a=pe.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,i,r),amountB:new ae(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,i,r),a=pe.getTokenAmountBFromLiquidity(t,e,i,r);return{amountA:s,amountB:a}}else return{amountA:new ae(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,i,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,r,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,i,s),l=r?1+a:1-a,m=new ae(new O(c.toString()).mul(l).toFixed(0)),d=new ae(new O(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var A,w,h,I;let u=te.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=pe.getAmountsFromLiquidity(u,l,m,i,s),[y,f]=[ge(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),ge(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[ge(new ae(new O(p.amountA.toString()).mul(d).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ge(new ae(new O(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Ot(y.expirationTime,f.expirationTime)}}},Cn=class{static swapCompute(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(ye))throw new Error("amountSpecified must not be 0");if(y||(y=s?Tt.add(At):It.sub(At)),s){if(y.lt(Tt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(It))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(ye),g={amountSpecifiedRemaining:d,amountCalculated:ye,sqrtPriceX64:m,tick:u>p?Math.min(p+fe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ae(0)},A=p,w=n[p],h=0,I=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(ye)&&!g.sqrtPriceX64.eq(y);){h>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(w,g.tick,l,s,I),B=S||null,C=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let L=Re.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:r},A,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=L.nextStartIndex;let{publicKey:q}=de(e,t,A);C=q,w=n[A];try{B=Y.firstInitializedTick(w,s)}catch{throw Error("not found next tick info")}}T.tickNext=B.tick,T.initialized=B.liquidityGross.gtn(0),p!==A&&C&&(g.accounts.push(C),p=A),T.tickNext<ot?T.tickNext=ot:T.tickNext>ut&&(T.tickNext=ut),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let x;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?x=y:x=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=Cn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=B.liquidityNet;s&&(L=L.mul(Jt)),g.liquidity=pe.addDelta(g.liquidity,L)}I=T.tickNext!=g.tick&&!s&&w.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=L!=g.tick&&!s&&w.startTickIndex===L,g.tick=L}++h}try{let{nextStartIndex:T,isExist:S}=fe.nextInitializedTickArray(g.tick,l,s,i,r);S&&p!==T&&(g.accounts.push(de(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:ye,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,r){let s={sqrtPriceX64Next:new ae(0),amountIn:new ae(0),amountOut:new ae(0),feeAmount:new ae(0)},a=e.gte(t),c=i.gte(ye);if(c){let l=oe.mulDivFloor(i,zi.sub(new ae(r.toString())),zi);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Jt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,i.mul(Jt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(i.mul(Jt))&&(s.amountOut=i.mul(Jt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=oe.mulDivCeil(s.amountIn,new ae(r),zi.sub(new ae(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Xe=60,Kn=512,Y=class{static getTickArrayAddressByTick(e,t,n,i){let r=Y.getTickArrayStartIndexByTick(n,i),{publicKey:s}=de(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Xe)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=fe.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*fe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Xe,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Xe,r=Math.floor(t/i)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Xe:e+t*Xe}static mergeTickArrayBitmap(e){let t=new _p(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,r){let s=Math.floor(i/(n*Xe));return[...Y.searchLowBitFromStart(e,t,s-1,r,n),...Y.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,Kn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,r){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,i,r);for(let c of a){let{publicKey:u}=de(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<ot||e>ut}static nextInitTick(e,t,n,i,r){if(fe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<Xe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Xe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Xe;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new O(1).div(r),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),r=Ln.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new O(1).div(r),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),r=Ln.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new O(1).div(a)}}};var oc=v([Ae(8),D("bump"),jt("index"),K(""),Je("protocolFeeRate"),Je("tradeFeeRate"),jt("tickSpacing"),Q(P(),8,"")]),vp=v([Je("blockTimestamp"),Yn("tickCumulative"),Q(P(),4)]),ic=v([Ae(8),Ee("initialized"),P("recentEpoch"),jt("observationIndex"),K("poolId"),Q(vp,100,"observations"),Q(P(),4)]),Vp=v([D("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),ee("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),ee("rewardGrowthGlobalX64")]),Rn=v([Ae(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),jt("tickSpacing"),ee("liquidity"),ee("sqrtPriceX64"),$e("tickCurrent"),Je(),ee("feeGrowthGlobalX64A"),ee("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),ee("swapInAmountTokenA"),ee("swapOutAmountTokenB"),ee("swapInAmountTokenB"),ee("swapOutAmountTokenA"),D("status"),Q(D(),7,""),Q(Vp,3,"rewardInfos"),Q(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Q(P(),15*4-3,"padding")]),Ep=v([ee("growthInsideLastX64"),P("rewardAmountOwed")]),Xo=v([Ae(8),D("bump"),K("nftMint"),K("poolId"),$e("tickLower"),$e("tickUpper"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(Ep,3,"rewardInfos"),Q(P(),8,"")]),KT=v([Ae(8),D("bump"),K("poolId"),$e("tickLowerIndex"),$e("tickUpperIndex"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(ee(),3,"rewardGrowthInside"),Q(P(),8,"")]),Fp=v([$e("tick"),Au("liquidityNet"),ee("liquidityGross"),ee("feeGrowthOutsideX64A"),ee("feeGrowthOutsideX64B"),Q(ee(),3,"rewardGrowthsOutsideX64"),Q(Je(),13,"")]),Uo=v([Ae(8),K("poolId"),$e("startTickIndex"),Q(Fp,Xe,"ticks"),D("initializedTickCount"),Q(D(),115,"")]),rc=v([Ae(329),Q(K(),100,"whitelistMints")]),nc=v([Ae(8),K("poolId"),Q(Q(P(),8),Ls,"positiveTickArrayBitmap"),Q(Q(P(),8),Ls,"negativeTickArrayBitmap")]),CT=v([P(),D("bump"),K("owner"),K("poolId"),K("positionId"),K("nftAccount"),Q(P(),8)]),RT=v([Ae(8),D("bump"),K("lockOwner"),K("poolId"),K("positionId"),K("nftAccount"),K("lockNftMint"),P("recentEpoch"),Q(P(),8)]);ic.span;var ac=me("Raydium_Clmm"),vt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},uc=[188,37,179,131,82,150,84,73],cc=[16,72,250,198,14,162,212,19],ke=class{static createPoolInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=v([ee("sqrtPriceX64"),P("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let A=Buffer.from([...vt.createPool,...g]);return new lt({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(i.address),new U(r.address)],{publicKey:m}=Hu(t,s,u,l),{publicKey:d}=$u(t,m),{publicKey:p}=Cs(t,m,u),{publicKey:y}=Cs(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(i.programId||xe),l,y,new U(r.programId||xe),ft(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w,h,I,T,S,B,C,x){let L=v([$e("tickLowerIndex"),$e("tickUpperIndex"),$e("tickArrayLowerStartIndex"),$e("tickArrayUpperStartIndex"),ee("liquidity"),P("amountMaxA"),P("amountMaxB"),Ee("withMetadata"),D("optionBaseFlag"),Ee("baseFlag")]),q=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],M=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ns,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},Z);let X=Buffer.from([...vt.openPosition,...Z]);return new lt({keys:M,programId:e,data:X})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let B=Yi.generate();m.push(B),y=B.publicKey}let f=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:A}=de(d,p,b),{publicKey:w}=le(n.wallet,y,xe),{publicKey:h}=Sn(y),{publicKey:I}=ct(d,y),{publicKey:T}=Nt(d,p,i,r),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,w,h,T,g,A,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,r,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:h,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let B=Yi.generate();m.push(B),y=B.publicKey}let f=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:A}=de(d,p,b),{publicKey:w}=le(n.wallet,y,xe),{publicKey:h}=Sn(y),{publicKey:I}=ct(d,y),{publicKey:T}=Nt(d,p,i,r),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,w,h,T,g,A,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,r,f,b,u,s,a,c,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ft(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w,h,I,T,S,B,C,x){let L=v([$e("tickLowerIndex"),$e("tickUpperIndex"),$e("tickArrayLowerStartIndex"),$e("tickArrayUpperStartIndex"),ee("liquidity"),P("amountMaxA"),P("amountMaxB"),Ee("withMetadata"),D("optionBaseFlag"),Ee("baseFlag")]),q=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],M=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ns,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:new sc(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let X=Buffer.from([...vt.openPosition,...Z]);return new lt({keys:M,programId:e,data:X})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let B=Yi.generate();d.push(B),m=B.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(p,y,f),{publicKey:A}=de(p,y,b),{publicKey:w}=le(n.wallet,m,xe),{publicKey:h}=Sn(m),{publicKey:I}=ct(p,m),{publicKey:T}=Nt(p,y,i,r),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,w,h,T,g,A,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),i,r,f,b,s,a,c,u,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ft(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,r){let s=v([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...vt.closePosition,...c]);return new lt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let r=new U(e.programId),{publicKey:s}=le(n.wallet,i.nftMint,xe),{publicKey:a}=ct(r,i.nftMint),c=[];return c.push(this.closePositionInstruction(r,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let w=v([ee("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ee("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...vt.increaseLiquidity,...T]);return new lt({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=ct(c,n.nftMint),{publicKey:b}=Nt(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ft(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:r,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=ct(c,n.nftMint),{publicKey:b}=Nt(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ft(c,u).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let w=v([ee("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ee("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(w.span);w.encode({liquidity:new sc(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...vt.increaseLiquidity,...T]);return new lt({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w){let h=v([ee("liquidity"),P("amountMinA"),P("amountMinB")]),I=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:Pi,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:A},S);let B=Buffer.from([...vt.decreaseLiquidity,...S]);return new lt({keys:T,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=le(i.wallet,n.nftMint,c),{publicKey:b}=ct(u,n.nftMint),{publicKey:g}=Nt(u,l,n.tickLower,n.tickUpper),A=[];for(let I=0;I<e.rewardDefaultInfos.length;I++)A.push({poolRewardVault:new U(t.rewardInfos[I].vault),ownerRewardVault:i.rewardAccounts[I],rewardMint:new U(e.rewardDefaultInfos[I].mint.address)});let w=[],h=this.decreaseLiquidityInstruction(u,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),A,r,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ft(u,l).publicKey:void 0);return w.push(h),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g){let A=v([P("amount"),P("otherAmountThreshold"),ee("sqrtPriceLimitX64"),Ee("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:Pi,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],I=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...vt.swap,...I]);return new lt({keys:h,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,i.wallet,m,new U(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,ft(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new U(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,ft(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,r,s,a,c,u,l,m,d){let p=v([P("openTime"),P("endTime"),ee("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:H(l),endTime:H(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...vt.initReward,...f]);return new lt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new U(e.programId),new U(e.id)],a=Zu(r,s,i.mint).publicKey,c=Do(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new U(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,r,s,a,c,u,l,m,d){let p=v([D("rewardIndex"),ee("emissionsPerSecondX64"),P("openTime"),P("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:H(l),endTime:H(m)},f);let b=Buffer.from([...vt.setRewardEmissions,...f]);return new lt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Do(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,r,s,a){let c=v([D("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:Pi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...vt.collectReward,...l]);return new lt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[r,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[E.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:r,nftMint:s,getEphemeralSigners:a}){let c=[],u;if(a)u=new U((await a(1))[0]);else{let b=Yi.generate();c.push(b),u=b.publicKey}let{publicKey:l}=le(r,s,xe),{publicKey:m}=ct(n,s),d=Wo(e,u).publicKey,p=le(r,u,xe).publicKey,y=Sn(u).publicKey,f=ke.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:r,lockOwner:r,positionNftAccount:l,positionId:m,lockPositionId:d,lockNftMint:u,lockNftAccount:p,metadataAccount:y,withMetadata:!0});return{address:{positionId:m,lockPositionId:d,lockNftAccount:p,lockNftMint:u,positionNftAccount:l,metadataAccount:y},instructions:[f],signers:c,instructionTypes:[E.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:r,positionNftAccount:s,positionId:a,lockPositionId:c,lockNftMint:u,lockNftAccount:l,metadataAccount:m,withMetadata:d}){let p=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:Ns,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1}],y=v([Ee("withMetadata")]),f=Buffer.alloc(y.span);y.encode({withMetadata:d},f);let b=Buffer.from([...uc,...f]);return new lt({keys:p,programId:e,data:b})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:r}){let{publicKey:s}=le(i,r,xe),{publicKey:a}=ct(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Rs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1}];return new lt({keys:c,programId:e,data:Buffer.from(uc)})}static harvestLockPositionInstruction(e){let[t,n]=[new U(e.poolKeys.programId),new U(e.poolKeys.id)],i=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=de(t,n,i),{publicKey:a}=de(t,n,r),{publicKey:c}=le(e.owner,e.ownerPosition.nftMint,xe),{publicKey:u}=ct(t,e.ownerPosition.nftMint),{publicKey:l}=Nt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new U(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new U(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Rs(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:mn,isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new lt({keys:p,programId:e.programId,data:Buffer.from(cc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:A,mintB:w,rewardAccounts:h,exTickArrayBitmap:I}){let T=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[],...h.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ut,isSigner:!1,isWritable:!1},{pubkey:mn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...T];return new lt({keys:S,programId:e,data:Buffer.from(cc)})}};var zT=v([Je("mintAuthorityOption"),K("mintAuthority"),P("supply"),D("decimals"),D("isInitialized"),Je("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Dp}from"@solana/web3.js";import{MintLayout as lc,TOKEN_PROGRAM_ID as Wp}from"@solana/spl-token";var nI=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new Dp(e));return!t||t.data.length!==lc.span?void 0:lc.decode(t.data)},oI=({mint:o,decimals:e,programId:t=Wp,logoURI:n="",priority:i=3})=>{let r=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:i}},ji=o=>new we({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),zo=i=>{var r=i,{amount:o,isRaw:e,name:t}=r,n=Me(r,["amount","isRaw","name"]);return new be(new we({mint:bt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function iI(o){return o.address===Dt.address?qe:o}function rI(o){return o.address===qe.address?Dt:o}var it=i=>{var r=i,{address:o,programId:e,decimals:t}=r,n=Me(r,["address","programId","decimals"]);return R({chainId:101,address:bt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},gn=o=>o?F(R({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(R({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(R({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import mc from"bn.js";var _s=new mc(25),Hi=new mc(1e4),qp={4:3,5:3};import{PublicKey as he,SystemProgram as wc,SYSVAR_RENT_PUBKEY as nf,TransactionInstruction as tn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as of,TOKEN_PROGRAM_ID as eo}from"@solana/spl-token";var vs=v([D("instruction"),P("amountIn"),P("minAmountOut")]),Vs=v([D("instruction"),P("maxAmountIn"),P("amountOut")]),bI=v([D("instruction"),D("nonce")]),Es=v([D("instruction"),D("nonce"),P("startTime")]),Qo=v([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),P("swapBase2QuoteFee"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),P("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),P("lpReserve"),Q(P(),3,"padding")]),Up=v([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),Q(P(),64,"padding")]),Fs=v([D("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),Ds=v([D("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]),gI={4:Qo,5:Up},dc=v([P("fee")]);import{PublicKey as Gp}from"@solana/web3.js";var Jn=new Gp("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Nn=5e4,Xp=v([P("x"),P("y"),P("price")]),zp=v([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q(Xp,Nn,"DataElement")]);function Qp(o,e){return[0,Nn-2]}function Yp(o){return[0,Nn-2]}function jp(o){return[0,Nn-2]}function Hp(o,e,t){let[n,i]=Qp(e,t),r=n,s=i,a=0,c=e*o.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Nn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function Ws(o,e,t){let[n,i,r]=Hp(o,e,t);if(!r)return 0;if(n===i){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[i].x,u=o.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function Mn(o,e,t){return e*o.multiplier/t}function pc(o,e,t){return e*t/o.multiplier}function Zp(o,e){let[t,n]=Yp(e),i=t,r=n,s=0,a=e;for(;i<r;){if(s=Math.floor((r+i)/2),s<=0||s>Nn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function $p(o,e){let[t,n]=jp(e),i=t,r=n,s=0,a=e;for(;i<=r;){if(s=Math.floor((r+i)/2),s<=0||s>=Nn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function fc(o,e,t,n){let i=n?e+t:e-t,[r,s,a]=Zp(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(i-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-i)*o.multiplier/l),[y,f,!1,a]}}}function Jp(o,e,t,n){let i=n?e-t:e+t,[r,s,a]=$p(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-i)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(i-p)/o.multiplier),[y,f,!1,a]}}}function ef(o,e){let t=fc(o,e,0,!1);return t[3]?t[0]:0}function yc(o,e,t,n){let i=Ws(o,e,t),r=Mn(o,e,i),s=Mn(o,t,i),a=Mn(o,n,i),c=!0,[u,l,m,d]=fc(o,r,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return pc(o,p,i)}}function bc(o,e,t,n){let i=Ws(o,e,t),r=Mn(o,e,i),s=Mn(o,t,i),a=Mn(o,n,i),c=!1,[u,l,m,d]=Jp(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=r-l;return pc(o,p,i)}}function tf(o){let e=zp.decode(o);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function gc(o,e,t,n){let i=ef(o,Mn(o,e,Ws(o,e,t)))/o.multiplier;return n?i:1/i}var $n=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Jn);e&&(this._layoutData=tf(e==null?void 0:e.data))}}};var Ac=me("Raydium_liquidity_instruction");function Pc(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=o,c=Buffer.alloc(Fs.span);Fs.encode({instruction:3,baseAmountIn:H(i),quoteAmountIn:H(r),otherAmountMin:H(a),fixedSide:s==="base"?Ge:Ea},c);let u=[k({pubkey:eo,isWritable:!1}),k({pubkey:new he(e.id)}),k({pubkey:new he(t.authority),isWritable:!1}),k({pubkey:new he(t.openOrders),isWritable:!1}),k({pubkey:new he(t.targetOrders)}),k({pubkey:new he(e.lpMint.address)}),k({pubkey:new he(t.vault.A)}),k({pubkey:new he(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Jn})),u.push(k({pubkey:new he(e.marketId),isWritable:!1}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:new he(t.marketEventQueue),isWritable:!1})),new tn({programId:new he(e.programId),keys:u,data:c})}function qs(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:r,quoteAmountMin:s}=o,a=Ie(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(Ds.span);Ds.encode({instruction:4,lpAmount:H(i),baseAmountMin:H(r),quoteAmountMin:H(s)},u);let l=[k({pubkey:eo,isWritable:!1}),k({pubkey:a.id}),k({pubkey:a.authority,isWritable:!1}),k({pubkey:a.openOrders}),k({pubkey:a.targetOrders}),k({pubkey:a.mintLp.address}),k({pubkey:a.vault.A}),k({pubkey:a.vault.B})];return c===5?l.push(k({pubkey:Jn})):(l.push(k({pubkey:a.id})),l.push(k({pubkey:a.id}))),l.push(k({pubkey:a.marketProgramId,isWritable:!1}),k({pubkey:a.marketId}),k({pubkey:a.marketBaseVault}),k({pubkey:a.marketQuoteVault}),k({pubkey:a.marketAuthority,isWritable:!1}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:a.marketEventQueue}),k({pubkey:a.marketBids}),k({pubkey:a.marketAsks})),new tn({programId:a.programId,keys:l,data:u})}return new tn({programId:a.programId,keys:[]})}function kc({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:A,openTime:w,coinAmount:h,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let B=v([D("instruction"),D("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),C=[{pubkey:eo,isSigner:!1,isWritable:!1},{pubkey:of,isSigner:!1,isWritable:!1},{pubkey:wc.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:A,openTime:w,coinAmount:h,pcAmount:I},x),{instruction:new tn({keys:C,programId:o,data:x}),instructionType:E.AmmV4CreatePool}}function MI(o){let e=v([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new he(o.id),isWritable:!1}),k({pubkey:new he(o.authority),isWritable:!1}),k({pubkey:new he(o.openOrders),isWritable:!1}),k({pubkey:new he(o.vault.A),isWritable:!1}),k({pubkey:new he(o.vault.B),isWritable:!1}),k({pubkey:new he(o.mintLp.address),isWritable:!1}),k({pubkey:new he(o.marketId),isWritable:!1}),k({pubkey:new he(o.marketEventQueue),isWritable:!1})];return new tn({programId:new he(o.programId),keys:n,data:t})}function rf({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let r=Ie(o),s=Buffer.alloc(vs.span);vs.encode({instruction:9,amountIn:H(t),minAmountOut:H(n)},s);let a=[k({pubkey:eo,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.openOrders})];return i===4&&a.push(k({pubkey:r.targetOrders})),a.push(k({pubkey:r.vault.A}),k({pubkey:r.vault.B})),i===5&&a.push(k({pubkey:Jn})),a.push(k({pubkey:r.marketProgramId,isWritable:!1}),k({pubkey:r.marketId}),k({pubkey:r.marketBids}),k({pubkey:r.marketAsks}),k({pubkey:r.marketEventQueue}),k({pubkey:r.marketBaseVault}),k({pubkey:r.marketQuoteVault}),k({pubkey:r.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new tn({programId:r.programId,keys:a,data:s})}function sf({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let r=Ie(o),s=Buffer.alloc(Vs.span);Vs.encode({instruction:11,maxAmountIn:H(t),amountOut:H(n)},s);let a=[k({pubkey:eo,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.openOrders}),k({pubkey:r.targetOrders}),k({pubkey:r.vault.A}),k({pubkey:r.vault.B})];return i===5&&a.push(k({pubkey:Jn})),a.push(k({pubkey:r.marketProgramId,isWritable:!1}),k({pubkey:r.marketId}),k({pubkey:r.marketBids}),k({pubkey:r.marketAsks}),k({pubkey:r.marketEventQueue}),k({pubkey:r.marketBaseVault}),k({pubkey:r.marketQuoteVault}),k({pubkey:r.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new tn({programId:r.programId,keys:a,data:s})}function Zi(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:r,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return rf(F(R({},a),{amountIn:i,minAmountOut:r}),t);if(s==="out")return sf(F(R({},a),{maxAmountIn:i,amountOut:r}),t);Ac.logWithError("invalid params","params",o)}throw Ac.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function NI({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Es.span);Es.encode({instruction:0,nonce:5,startTime:H(t)},n);let i=Ie(o),r=[k({pubkey:eo,isWritable:!1}),k({pubkey:wc.programId,isWritable:!1}),k({pubkey:nf,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.openOrders}),k({pubkey:i.mintLp.address}),k({pubkey:i.mintA.address,isWritable:!1}),k({pubkey:i.mintB.address,isWritable:!1}),k({pubkey:i.vault.A,isWritable:!1}),k({pubkey:i.vault.B,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:i.id,isWritable:!1}),k({pubkey:i.marketProgramId,isWritable:!1}),k({pubkey:i.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new tn({programId:i.programId,keys:r,data:n})}function hc({poolKeys:o}){let e=v([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new he(o.id),isWritable:!1}),k({pubkey:new he(o.authority),isWritable:!1}),k({pubkey:new he(o.openOrders),isWritable:!1}),k({pubkey:new he(o.vault.A),isWritable:!1}),k({pubkey:new he(o.vault.B),isWritable:!1}),k({pubkey:new he(o.mintLp.address),isWritable:!1}),k({pubkey:new he(o.marketId),isWritable:!1}),k({pubkey:new he(o.marketEventQueue),isWritable:!1})];return{instruction:new tn({programId:new he(o.programId),keys:n,data:t})}}import{PublicKey as cf}from"@solana/web3.js";import Yo from"bn.js";import{TOKEN_PROGRAM_ID as lf}from"@solana/spl-token";import{PublicKey as af}from"@solana/web3.js";var uf=me("Raydium_liquidity_serum");function Tc({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));i=af.createProgramAddressSync(r,o)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:i,nonce:n}}throw uf.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function $i({programId:o}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function _n({name:o,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function mf({programId:o,marketId:e}){let{publicKey:t}=se([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Xs({programId:o}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Ic({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=_n({name:"amm_associated_seed",programId:a,marketId:t}),l=_n({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Xs({programId:a}),p=_n({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=_n({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=_n({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=mf({programId:a,marketId:t}),g=_n({name:"target_associated_seed",programId:a,marketId:t}),A=_n({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=Tc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:cf.default,configId:$i({programId:a})}}var Us;async function HI({connection:o,poolKeysList:e,config:t}){Us||(Us=new $n({connection:o}),await Us.initStableModelLayout());let n=e.map(s=>hc({poolKeys:s}));return(await Ya(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=ja(s,"GetPoolData"),c=new Yo(Yt(a,"status")),u=Number(Yt(a,"coin_decimals")),l=Number(Yt(a,"pc_decimals")),m=Number(Yt(a,"lp_decimals")),d=new Yo(Yt(a,"pool_coin_amount")),p=new Yo(Yt(a,"pool_pc_amount")),y=new Yo(Yt(a,"pool_lp_supply")),f="0";try{f=Yt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Yo(f)}})}var Gs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Ji=o=>{let e={},t=lf.toBase58();return Object.keys(o).map(n=>{let i=o[n],[r,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:it({address:r,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:it({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new O(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new O(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:Gs,week:Gs,month:Gs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:$i({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:it({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import He from"bn.js";var jo=class extends Ke{constructor(t){super(t);this.stableLayout=new $n({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:r}){let s=new He(new O(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=ji(t[r?"mintB":"mintA"]),[c,u]=[new He(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new He(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new He(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=Ge;s.isZero()||(d=m==="base"?Ti(s.mul(u),c):Ti(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ti(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let y=new Ce(new He(1)).add(i),f=new Ce(new He(1)).sub(i),b=y.mul(d).quotient,g=f.mul(d).quotient,A=new be(a,d),w=new be(a,b),h=new be(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:A,maxAnotherAmount:w,minAnotherAmount:h,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),A=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let w=await d.getCreatedTokenAccount({mint:new rt(n.lpMint.address)}),h=[f,b],I=[g,A],T=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(h.reverse(),I.reverse(),T.reverse(),B=c==="a"?"quote":"base"):S==="base"&&(B=c==="a"?"base":"quote");let[C,x]=h,[L,q]=I,[M,Z]=T,X=i!=null?i:await this.getAmmPoolKeys(n.id),W=this.createTxBuilder(),Gt=await d.handleTokenAccount({side:"in",amount:M,mint:C.mint,tokenAccount:L,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:ze}=Gt,on=Me(Gt,["tokenAccount"]);W.addInstruction(on);let ai=await d.handleTokenAccount({side:"in",amount:Z,mint:x.mint,tokenAccount:q,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Fe}=ai,Pt=Me(ai,["tokenAccount"]);W.addInstruction(Pt);let ui=await d.handleTokenAccount({side:"out",amount:0,mint:new rt(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:xt}=ui,Et=Me(ui,["tokenAccount"]);return W.addInstruction(Et),W.addInstruction({instructions:[Pc({poolInfo:n,poolKeys:X,userKeys:{baseTokenAccount:ze,quoteTokenAccount:Fe,lpTokenAccount:xt,owner:this.scope.ownerPubKey},baseAmountIn:M,quoteAmountIn:Z,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),W.addCustomComputeBudget(m),l===0&&await W.buildV0(),W.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,y]=[new rt(n.mintA.address),new rt(n.mintB.address),new rt(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),A=await f.getCreatedTokenAccount({mint:p}),w=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:I}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:T}=x,S=Me(x,["tokenAccount"]);w.addInstruction(S);let L=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:A,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:B}=L,C=Me(L,["tokenAccount"]);return w.addInstruction(C),w.addInstruction({instructions:[qs({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),w.addCustomComputeBudget(l),u===0?await w.buildV0():w.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=to,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let W of this.scope.account.tokenAccountRawInfos)(g[W.accountInfo.mint.toString()]===void 0||le(this.scope.ownerPubKey,W.accountInfo.mint,to).publicKey.equals(W.pubkey))&&(g[W.accountInfo.mint.toString()]=W.pubkey);let A=g[t.lpMint.address];if(A===void 0)throw Error("find lp account error in trade accounts");let w=i.add(a!=null?a:new He(0)),h=t.mintA.address===we.WSOL.mint.toString(),I=t.mintB.address===we.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let W=kt[s.programId],ze=nt({programId:new rt(s.programId),poolId:new rt(s.id),owner:this.scope.ownerPubKey,version:W}),on,Fe=await this.scope.connection.getAccountInfo(ze);if(Fe&&(on=Zn(W).decode(Fe.data)),W!==6&&!on){let{instruction:rn,instructionType:br}=Mo({id:new rt(s.id),programId:new rt(s.programId),version:W,ledger:ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[rn],instructionTypes:[br]})}let Pt=[];for(let rn of s.rewardInfos){let br=rn.mint.address===we.WSOL.mint.toString();if(g[rn.mint.address])Pt.push(g[rn.mint.address]);else{let{account:ua,instructionParams:ca}=await this.scope.account.getOrCreateTokenAccount({mint:new rt(rn.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!br,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});ua||this.logAndCreateError("farm reward account not found:",rn.mint.address),ca&&b.addInstruction(ca),Pt.push(ua)}}let xt=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Et={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:xt,lpAccount:A,rewardAccounts:Pt},Gt=kt[s.programId],ai=Gt===6?No(Et):Gt===5?_o(Et):vo(Et),ui={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[ai],instructionTypes:[ui[Gt]]})}let x=await this.getAmmPoolKeys(t.id),L=qs({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:A,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:w,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[q,M]=t.mintA.address===n.mintA.address?[T,B]:[B,T],Z=await this.scope.clmm.getClmmPoolKeys(n.id),X=await ke.openPositionFromBaseInstructions(F(R({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:q,tokenAccountB:M},withMetadata:"create"},r),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...X.instructions],signers:X.signers,instructionTypes:[...X.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var q;let b=u.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),g=u.useSOLBalance&&i.mint.equals(Bc),A=u.useSOLBalance&&r.mint.equals(Bc),w=this.createTxBuilder(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});w.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:A?{payer:b,amount:a}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:l,checkCreateATAOwner:m});if(w.addInstruction(S||{}),h===void 0||T===void 0)throw Error("you don't has some token account");let B=Ic({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:r.mint,baseDecimals:i.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:L}=kc(F(R({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:T,userLpVault:le(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[x],instructionTypes:[L]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=$i({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return dc.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:r,slippage:s}){let[a,c]=[i.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,A=t.version===4,w;if(A)w=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let M=gc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?w=new O(1e6).div(M*1e6):w=new O(M*1e6).div(1e6)}let h=n,I=new He(0),T=new He(0);if(!h.isZero())if(A){T=Lt(h.mul(_s),Hi);let M=h.sub(T),Z=y.add(M);I=f.mul(M).div(Z)}else{T=h.mul(new He(2)).div(new He(1e4));let M=h.sub(T);p==="quote"?I=new He(yc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),M.toNumber())):I=new He(bc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),M.toNumber()))}let S=new He(new O(I.toString()).mul(1-s).toFixed(0)),B=I,C=S,x=new O(I.toString()).div(new O(h.sub(T).toString()).toFixed(0));!h.isZero()&&!I.isZero()&&(x=new O(I.toString()).div(10**g).div(new O(h.sub(T).toString()).div(10**b)));let L=w.sub(x).div(w).mul(100);return{amountOut:B,minAmountOut:C,currentPrice:w,executionPrice:x,priceImpact:L,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new O(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new He(0),A=n;if(!A.isZero()){A.gt(f)&&(A=f.sub(new He(1)));let C=f.sub(A);g=y.mul(A).div(C).mul(Hi).div(Hi.sub(_s))}let w=new He(new O(g.toString()).mul(1+s).toFixed(0)),h=g,I=w;this.logDebug("amountIn:",new O(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!A.isZero()&&(T=new O(A.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(h.toString()),B=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:h,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),A=y&&b.address===j.toBase58(),{account:w,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(h||{}),w||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:w,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:to,mint:new rt(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:A,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),m.addInstruction({instructions:[Zi({version:B,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:i,amountOut:r,fixedSide:a})],instructionTypes:[B===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await De(this.scope.connection,t.map(l=>({pubkey:new rt(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Qo.decode(m.accountInfo.data);r[String(t[l])]=F(R({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await De(this.scope.connection,s.map(l=>({pubkey:new rt(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new He(df.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(R({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Ji({[t]:n}),r=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as z}from"@solana/web3.js";import yt from"bn.js";import{AccountLayout as xc,TOKEN_PROGRAM_ID as Ho}from"@solana/spl-token";var Zo=class extends Ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var w;let{programId:t,owner:n=((w=this.scope.owner)==null?void 0:w.publicKey)||z.default,mint1:i,mint2:r,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new yt(new z(i.address).toBuffer()).gt(new yt(new z(r.address).toBuffer()))?[r,i,new O(1).div(a)]:[i,r,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),A=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(A),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:F(R({},A.address),{programId:t.toString(),id:A.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:A.address.mintAVault.toString(),B:A.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:R({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:A.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Xu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,A=n.useSOLBalance&&e.mintA.address===j.toString(),w=n.useSOLBalance&&e.mintB.address===j.toString(),[h,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let x=t||await this.getClmmPoolKeys(e.id),L=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:F(R({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:R({},L.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,A=n.useSOLBalance&&e.mintA.address===j.toBase58(),w=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});h&&(b=h),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),C=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:r,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(C),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===j.toString(),g=c.useSOLBalance&&t.mintB.address===j.toString(),{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A&&(y=A),p.addInstruction(w||{});let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h&&(f=h),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(A||{});let{account:w,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});w&&(y=w),d.addInstruction(h||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:r,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=r.useSOLBalance&&t.mintA.address===j.toString(),f=r.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=A,w&&p.addInstruction(w);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=h,I&&p.addInstruction(I);let T=[];for(let x of t.rewardDefaultInfos){let L=r.useSOLBalance&&x.mint.address===j.toString(),q;if(x.mint.address===t.mintA.address)q=b;else if(x.mint.address===t.mintB.address)q=g;else{let{account:M,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(x.mint.programId),mint:new z(x.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});q=M,Z&&p.addInstruction(Z)}T.push(q)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),B=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:B.instructions,instructionTypes:[E.ClmmDecreasePosition]});let C=R({},B.address);if(r.closePosition){let x=await ke.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i});p.addInstruction({endInstructions:x.instructions,endInstructionTypes:x.instructionTypes}),C=R(R({},C),x.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:C}})}async lockPosition(e){let{programId:t=zn,authProgramId:n=yo,poolProgramId:i=In,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:c}=e,u=this.createTxBuilder(),l=await ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint});return u.addInstruction(l),u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:l.address})}async harvestLockPosition(e){let{programId:t=zn,authProgramId:n=yo,clmmProgram:i=In,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=Xo.decode(y.data),b=a.useSOLBalance&&d.mintA.address===j.toString(),g=a.useSOLBalance&&d.mintB.address===j.toString(),A,w,{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new z(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A=h,I&&p.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new z(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});w=T,S&&p.addInstruction(S);let B={},C=[];for(let Fe of d.rewardInfos){let Pt=a.useSOLBalance&&Fe.mint.address===j.toString(),xt=B[Fe.mint.address];if(!xt){let{account:Et,instructionParams:Gt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(Fe.mint.programId),mint:new z(Fe.mint.address),notUseTokenAccount:Pt,owner:this.scope.ownerPubKey,skipCloseAccount:!Pt,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Pt?!1:c});xt=Et,Gt&&p.addInstruction(Gt)}B[Fe.mint.address]=xt,C.push(xt)}let x=Wo(t,s.lockNftMint).publicKey,L=le(this.scope.ownerPubKey,s.lockNftMint,Ho).publicKey,q=Y.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),M=Y.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:Z}=de(new z(d.programId),s.poolId,q),{publicKey:X}=de(new z(d.programId),s.poolId,M),{publicKey:W}=Nt(new z(d.programId),s.poolId,f.tickLower,f.tickUpper),ze=[];for(let Fe=0;Fe<d.rewardInfos.length;Fe++)ze.push({poolRewardVault:new z(d.rewardInfos[Fe].vault),ownerRewardVault:C[Fe],rewardMint:new z(d.rewardInfos[Fe].mint.address)});let on=await ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:s.lockOwner,lockNftMint:s.lockNftMint,lockNftAccount:L,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:W,vaultA:new z(d.vault.A),vaultB:new z(d.vault.B),tickArrayLower:Z,tickArrayUpper:X,userVaultA:A,userVaultB:w,mintA:new z(d.mintA.address),mintB:new z(d.mintB.address),rewardAccounts:ze});return p.addInstruction({instructions:[on],instructionTypes:[E.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=ke.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return r.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(n.mint.address),mint:new z(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new yt(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=ke.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new z(n.mint.programId),mint:new z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new yt(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=ke.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new z(m.mint.programId),mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});l=R(R({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new yt(new O(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new yt(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=ke.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});u.addInstruction(b),l=R(R({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(j),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:i,checkCreateATAOwner:r});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=ke.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=R(R({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),A;!s||s.equals(new O(0))?A=f?Tt.add(new yt(1)):It.sub(new yt(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!w||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:h},inputMint:new z(n),amountIn:i,amountOutMin:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),A;!s||s.equals(new O(0))?A=n.toString()===e.mintB.address?Tt.add(new yt(1)):It.sub(new yt(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!w||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:h},outputMint:new z(n),amountOut:i,amountInMax:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var d;let l={};for(let p of this.scope.account.tokenAccountRawInfos)r?le(this.scope.ownerPubKey,p.accountInfo.mint,a).publicKey.equals(p.pubkey)&&(l[p.accountInfo.mint.toString()]=p.pubkey):l[p.accountInfo.mint.toString()]=p.pubkey;let m=this.createTxBuilder();for(let p of Object.values(e)){if(t[p.id]===void 0||!t[p.id].find(T=>!T.liquidity.isZero()||T.rewardInfos.find(S=>!S.rewardAmountOwed.isZero())))continue;let y=p,f=i.useSOLBalance&&y.mintA.address===j.toString(),b=i.useSOLBalance&&y.mintB.address===j.toString(),g=l[y.mintA.address];if(!g){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new z(y.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:f?!1:r,checkCreateATAOwner:s});g=T,S&&m.addInstruction(S)}let A=l[y.mintB.address];if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new z(y.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:b?!1:r,checkCreateATAOwner:s});A=T,S&&m.addInstruction(S)}l[y.mintA.address]=g,l[y.mintB.address]=A;let w=[];for(let T of y.rewardDefaultInfos){let S=i.useSOLBalance&&T.mint.address===j.toString(),B=l[T.mint.address];if(!B){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(T.mint.programId),mint:new z(T.mint.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r});B=C,x&&m.addInstruction(x)}l[T.mint.address]=B,w.push(B)}let h=await this.getClmmPoolKeys(y.id),I=[];for(let T=0;T<h.rewardInfos.length;T++)I.push({poolRewardVault:new z(h.rewardInfos[T].vault),ownerRewardVault:w[T],rewardMint:new z(h.rewardInfos[T].mint.address)});for(let T of t[p.id]){let S=(d=n==null?void 0:n[p.id])==null?void 0:d[T.nftMint.toBase58()];if(S){let B=le(this.scope.ownerPubKey,S.lockNftMint,Ho).publicKey,C=Y.getTickArrayStartIndexByTick(T.tickLower,h.config.tickSpacing),x=Y.getTickArrayStartIndexByTick(T.tickUpper,h.config.tickSpacing),{publicKey:L}=de(new z(h.programId),S.poolId,C),{publicKey:q}=de(new z(h.programId),S.poolId,x),{publicKey:M}=Nt(new z(h.programId),S.poolId,T.tickLower,T.tickUpper),Z=Wo(zn,S.lockNftMint).publicKey,X=ke.harvestLockPositionInstructionV2({programId:zn,auth:yo,lockPositionId:Z,clmmProgram:In,lockOwner:S.lockOwner,lockNftMint:S.lockNftMint,lockNftAccount:B,positionNftAccount:S.nftAccount,positionId:S.positionId,poolId:S.poolId,protocolPosition:M,vaultA:new z(h.vault.A),vaultB:new z(h.vault.B),tickArrayLower:L,tickArrayUpper:q,userVaultA:g,userVaultB:A,mintA:new z(h.mintA.address),mintB:new z(h.mintB.address),rewardAccounts:I});m.addInstruction({instructions:[X],instructionTypes:[E.ClmmHarvestLockPosition],lookupTableAddress:h.lookupTableAccount?[h.lookupTableAccount]:[]})}else{let B=ke.decreaseLiquidityInstructions({poolInfo:y,poolKeys:h,ownerPosition:T,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A,rewardAccounts:w},liquidity:new yt(0),amountMinA:new yt(0),amountMinB:new yt(0)});m.addInstruction(B)}}}return c===0?m.sizeCheckBuildV0({computeBudgetConfig:u}):m.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Do(e).publicKey);return t?rc.decode(t.data).whitelistMints.filter(i=>!i.equals(z.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new yt(1))).map(s=>ct(new z(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return i.forEach(s=>{if(!s)return;let a=Xo.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await De(this.scope.connection,e.map(r=>({pubkey:new z(r)})),t),i={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=Rn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[r])]=F(R({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await De(this.scope.connection,Array.from(n).map(c=>({pubkey:new z(c)}))),r={};i.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=oc.decode(c.accountInfo.data))});let s=await Re.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:it({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ho.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?gn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:it({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ho.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?gn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(R({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Re.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await Wn({connection:this.scope.connection,mints:Array.from(n).map(m=>new z(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await De(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=tc(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(xc.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(xc.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(R({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(z.default)).map(m=>({mint:it({address:m.tokenMint.toBase58(),programId:Ho.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as G}from"@solana/web3.js";import{AccountLayout as Kf,NATIVE_MINT as cr,TOKEN_PROGRAM_ID as Vt}from"@solana/spl-token";import Qs from"bn.js";import or from"decimal.js-light";import $o from"bn.js";function er(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function pf(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=er(o,e);return n.gt(no)&&(t=t.add(new $o(1)),e=o.div(t),n=er(o,t),n.gt(no)&&(e=e.add(new $o(1)))),[t,e]}var no=new $o(0),tr=class{static swapWithoutFees(e,t,n){let i=t.mul(n),r=t.add(e),[s,a]=pf(i,r),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,r){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return er(e.mul(n),t).gt(no)&&s.gt(no)&&(s=s.add(new $o(1))),er(e.mul(i),t).gt(no)&&a.gt(no)&&(a=a.add(new $o(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Cc from"bn.js";var zs=new Cc(1e6);function ff(o,e,t){return o.mul(e).add(t).sub(new Cc(1)).div(t)}function Kc(o,e,t){return o.mul(e).div(t)}var nr=class{static tradingFee(e,t){return ff(e,t,zs)}static protocolFee(e,t){return Kc(e,t,zs)}static fundFee(e,t){return Kc(e,t,zs)}};var Sc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Sc||{}),ir=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let r=nr.tradingFee(e,i),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:c}=tr.swapWithoutFees(s,t,n),u=a.add(r);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:r,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,r,e.decimals,t.decimals,e.address]:[r,i,t.decimals,e.decimals,t.address],p=new or(u.toString()).div(10**m).div(new or(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new Qs(1)):a,f=u.sub(y),b=Lt(c.mul(y),f),g=Lt(b.mul(new Qs(1e6)),new Qs(1e6).sub(n)),A=g.sub(b),w=new or(y.toString()).div(10**m).div(new or(g.toString()).div(10**l)),h=p.isZero()?0:w.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:A,priceImpact:h}}};import Le from"bn.js";import{PublicKey as Jo,TransactionInstruction as vn,Keypair as If,SystemProgram as Bf}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Oc,TOKEN_2022_PROGRAM_ID as js,TOKEN_PROGRAM_ID as An}from"@solana/spl-token";var yf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),bf=Buffer.from("amm_config","utf8"),gf=Buffer.from("pool","utf8"),Af=Buffer.from("pool_lp_mint","utf8"),wf=Buffer.from("pool_vault","utf8"),Pf=Buffer.from("observation","utf8");function oo(o){return se([yf],o)}function Ax(o,e){return se([bf,hf(e)],o)}function Ys(o,e,t,n){return se([gf,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function kf(o,e){return se([Af,e.toBuffer()],o)}function Rc(o,e,t){return se([wf,e.toBuffer(),t.toBuffer()],o)}function rr(o,e){return se([Pf,e.toBuffer()],o)}function hf(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Lc({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let r=oo(e).publicKey,s=o||Ys(e,t,n,i).publicKey,a=kf(e,s).publicKey,c=Rc(e,s,n).publicKey,u=Rc(e,s,i).publicKey,l=rr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Tf=Buffer.from("locked_liquidity","utf8");function sr(o,e){return se([Tf,e.toBuffer()],o)}var xf=me("Raydium_cpmm"),Vn={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function Mc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,A,w){let h=v([P("amountMaxA"),P("amountMaxB"),P("openTime")]),I=Ys(o,t,r,s).publicKey,T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(I),isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Oc,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:A,openTime:w},S),new vn({keys:T,programId:o,data:Buffer.from([...Vn.initialize,...S])})}function Nc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=v([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:js,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return xf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new vn({keys:b,programId:o,data:Buffer.from([...Vn.deposit,...g])})}function _c(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=v([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:js,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:mn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new vn({keys:b,programId:o,data:Buffer.from([...Vn.withdraw,...g])})}function ar(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f){let b=v([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},A),new vn({keys:g,programId:o,data:Buffer.from([...Vn.swapBaseInput,...A])})}function vc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f){let b=v([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},A),new vn({keys:g,programId:o,data:Buffer.from([...Vn.swapBaseOutput,...A])})}async function Vc(o){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,r=[],[s,a]=[new Jo(t.id),new Jo(t.lpMint.address)],c;if(i)c=new Jo((await i(1))[0]);else{let b=If.generate();r.push(b),c=b.publicKey}let{publicKey:u}=le(e.feePayer,c,An),{publicKey:l}=Sn(c),{publicKey:m}=sr(o.lockProgram,c),{publicKey:d}=le(e.feePayer,a,An),{publicKey:p}=le(o.lockAuthProgram,a,An),y=Sf({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new Jo(n.vault.A),poolVaultB:new Jo(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(f=o.withMetadata)!=null?f:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[E.CpmmLockLp],lookupTableAddress:[]}}function Sf({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Bf.programId,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:Oc,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1}],A=v([P("lpAmount"),Ee("withMetadata")]),w=Buffer.alloc(A.span);A.encode({lpAmount:f,withMetadata:b},w);let h=Buffer.from([...Vn.lockCpLiquidity,...w]);return new vn({keys:g,programId:o,data:h})}function Ec({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:f!=null?f:bo,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Gr,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:js,isSigner:!1,isWritable:!1},{pubkey:mn,isSigner:!1,isWritable:!1}],A=v([P("lpFeeAmount")]),w=Buffer.alloc(A.span);A.encode({lpFeeAmount:y},w);let h=Buffer.from([...Vn.collectCpFee,...w]);return new vn({keys:g,programId:o,data:h})}var Fc=v([Ae(8),D("bump"),Ee("disableCreatePool"),jt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),Q(P(),16)]),ur=v([Ae(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),Q(P(),32)]);var ei=class extends Ke{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await De(this.scope.connection,e.map(m=>({pubkey:new G(m)}))),i={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=ur.decode(d.accountInfo.data);i[String(e[m])]=F(R({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await De(this.scope.connection,m.map(p=>({pubkey:new G(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Fc.decode(y.data)}}let c={},u=await De(this.scope.connection,s.map(m=>({pubkey:new G(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Le(Kf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(R({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let r=e[i],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return F(R({},n),{[i]:F(R({},r),{id:new G(i),configInfo:r.configInfo,version:7,authority:oo(r.programId).publicKey,mintA:it({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?gn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:it({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?gn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Wn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=it({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?gn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=it({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?gn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=it({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Vt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new O(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new O(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:oo(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=Me(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var Z,X,W;let y=r.feePayer||((Z=this.scope.owner)==null?void 0:Z.publicKey),f=new Le(new G(m.mintA.address).toBuffer()).lte(new Le(new G(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[A,w]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],h=r.useSOLBalance&&b.address===cr.toBase58(),I=r.useSOLBalance&&g.address===cr.toBase58(),[T,S]=[new G(b.address),new G(g.address)],B=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:y,amount:A}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:s,checkCreateATAOwner:a});B.addInstruction(x||{});let{account:L,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({mint:new G(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:y,amount:w}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:s,checkCreateATAOwner:a});if(B.addInstruction(q||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let M=Lc({poolId:e,programId:t,configId:new G(u.id),mintA:T,mintB:S});return B.addInstruction({instructions:[Mc(t,this.scope.ownerPubKey,new G(u.id),M.authority,M.poolId,T,S,M.lpMint,C,L,le(this.scope.ownerPubKey,M.lpMint).publicKey,M.vaultA,M.vaultB,n,new G((X=b.programId)!=null?X:Vt),new G((W=g.programId)!=null?W:Vt),M.observationId,A,w,i)],instructionTypes:[E.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.versionBuild({txVersion:c,extInfo:{address:F(R({},M),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(R({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Ce(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(i.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),A=g.amount,w=t.mintA.address===cr.toString(),h=t.mintB.address===cr.toString(),I=this.createTxBuilder(),[T,S]=[new G(t.mintA.address),new G(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||(r?i:A).isZero()?{payer:this.scope.ownerPubKey,amount:r?i:A}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(C||{});let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(r?A:i).isZero()?{payer:this.scope.ownerPubKey,amount:r?A:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(L||{}),!B&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let q=await m.getCreatedTokenAccount({mint:new G(t.lpMint.address)}),ze=await m.handleTokenAccount({side:"out",amount:0,mint:new G(t.lpMint.address),tokenAccount:q,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:M}=ze,Z=Me(ze,["tokenAccount"]);I.addInstruction(Z);let X=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new Ce(new Le(1)).sub(s);return I.addInstruction({instructions:[Nc(new G(t.programId),this.scope.ownerPubKey,new G(X.authority),new G(t.id),M,B,x,new G(X.vault.A),new G(X.vault.B),T,S,new G(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,r?b.amount:A,r?A:b.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var M,Z;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Ce(new Le(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(i.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(i.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,A]=[new G(t.mintA.address),new G(t.mintB.address)],w=g.equals(j),h=A.equals(j),I,T,{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});I=S,B&&b.addInstruction(B);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});T=C,x&&b.addInstruction(x),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new G(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let q=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[_c(new G(t.programId),this.scope.ownerPubKey,new G(q.authority),new G(t.id),L,I,T,new G(q.vault.A),new G(q.vault.B),g,A,new G(t.lpMint.address),i,l.sub((M=p.fee)!=null?M:new Le(0)),m.sub((Z=y.fee)!=null?Z:new Le(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:q.lookupTableAccount?[q.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,L,q,M,Z;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new G(t.mintA.address),new G(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Le((1+c)*1e4)).div(new Le(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Le((1-c)*1e4)).div(new Le(1e4));let A=t.mintA.address===j.toBase58(),w=t.mintB.address===j.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new G((C=t.mintA.programId)!=null?C:Vt),owner:this.scope.ownerPubKey,createInfo:A||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new G((x=t.mintB.programId)!=null?x:Vt),owner:this.scope.ownerPubKey,createInfo:w||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!h||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:T,mintAUseSOLBalance:A,mintBUseSOLBalance:w,associatedOnly:y});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?vc(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),i?h:T,i?T:h,new G(B.vault[i?"A":"B"]),new G(B.vault[i?"B":"A"]),new G((M=t[i?"mintA":"mintB"].programId)!=null?M:Vt),new G((Z=t[i?"mintB":"mintA"].programId)!=null?Z:Vt),i?b:g,i?g:b,rr(new G(t.programId),new G(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):ar(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),i?h:T,i?T:h,new G(B.vault[i?"A":"B"]),new G(B.vault[i?"B":"A"]),new G((L=t[i?"mintA":"mintB"].programId)!=null?L:Vt),new G((q=t[i?"mintB":"mintA"].programId)!=null?q:Vt),i?b:g,i?g:b,rr(new G(t.programId),new G(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?E.CpmmSwapBaseOut:E.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await Vc({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:go,lockAuthProgram:(d=e.authProgram)!=null?d:Ao,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(i),s.versionBuild({txVersion:r,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:r=go,authProgram:s=Ao,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new G(t.mintA.address),new G(t.mintB.address)],y=d.equals(j),f=p.equals(j),b,g,{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=A,w&&m.addInstruction(w);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=h,I&&m.addInstruction(I),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let T=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=le(l,i,Vt),{publicKey:B}=sr(r,i),{publicKey:C}=le(s,new G(t.lpMint.address),Vt);return m.addInstruction({instructions:[Ec({programId:r!=null?r:go,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:Ao,nftMint:i,nftAccount:S,lockPda:B,poolId:new G(t.id),mintLp:new G(T.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new G(T.vault.A),poolVaultB:new G(T.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[E.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let r=n.toString()===e.mintB.address,s=ir.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Le((1-i)*1e4)).div(new Le(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:r,epochInfo:s,baseIn:a}){var h,I,T,S,B,C,x,L,q;let c=1-Number(r.toSignificant())/100,u=new Le(new O(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Le(0)),d=new Le(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(T=(I=l.fee)==null?void 0:I.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:Ge,fee:void 0,expirationTime:void 0};if(!m.isZero()){let M=Cf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:M.amountA.toString(),amountB:M.amountB.toString()}),f=ge(M[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ce(new Le(1)).add(r),g=new Ce(new Le(1)).sub(r),A=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Le(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),w=ge(g.mul(f.amount.sub((B=f.fee)!=null?B:new Le(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(q=(L=A.fee)==null?void 0:L.toString())!=null?q:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:A,minAnotherAmount:w,liquidity:y}}};function Cf(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Le(1)));let r=o.mul(t).div(n);return!r.isZero()&&!o.mul(t).mod(n).isZero()&&(r=r.add(new Le(1))),{amountA:i,amountB:r}}import{PublicKey as Fn}from"@solana/web3.js";import{createTransferInstruction as Xc,TOKEN_PROGRAM_ID as Oe,TOKEN_2022_PROGRAM_ID as dr}from"@solana/spl-token";import pr from"bn.js";var Dc={[Ci.toBase58()]:3},Wc={3:Ci};var Hs=v([Ae(5),Ae(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Ae(7)]),qc={3:Hs};import{PublicKey as Uc}from"@solana/web3.js";var lr=me("Serum"),mr=class{static getProgramId(e){let t=Wc[e];return t||lr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Dc[t];return n||lr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=qc[e];return t||lr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,r;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));r=Uc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:r,nonce:i}}return lr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Uc.default,nonce:i}}};import{PublicKey as $,SystemProgram as Zs,TransactionInstruction as $s}from"@solana/web3.js";import En from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Rf,TOKEN_2022_PROGRAM_ID as Lf,TOKEN_PROGRAM_ID as Js}from"@solana/spl-token";function FS(o,e,t,n,i,r,s,a,c,u,l,m){let d=v([D("instruction"),P("amountIn"),P("amountOut")]),p=[{pubkey:Zs.programId,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},{pubkey:new $(t.programId),isSigner:!1,isWritable:!1},{pubkey:new $(t.id),isSigner:!1,isWritable:!0},{pubkey:new $(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ie(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new $s({keys:p,programId:o,data:y})}function DS(o,e,t,n,i,r,s,a,c,u){let l=v([D("instruction")]),m=[{pubkey:Zs.programId,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},{pubkey:new $(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new $(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new $(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ie(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new $s({keys:m,programId:o,data:d})}function Of(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[k({pubkey:Js,isWritable:!1}),k({pubkey:Lf,isWritable:!1}),k({pubkey:Rf,isWritable:!1}),k({pubkey:Zs.programId,isWritable:!1}),k({pubkey:e,isSigner:!0})];b.push(k({pubkey:t})),b.push(k({pubkey:i}));let g=[c,u],A=[l,m],w=[r,s,a];for(let S=0;S<g.length;S++){let B=g[S],C=w[S]===B.mintA.address;if(b.push(k({pubkey:new $(B.programId),isWritable:!1})),S===g.length-1?b.push(k({pubkey:i})):b.push(k({pubkey:n})),b.push(k({pubkey:new $(w[S])})),b.push(k({pubkey:new $(w[S+1])})),B.version===6){let x=A[S];b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(B.observationId)})),b.push(k({pubkey:mn})),b.push(k({pubkey:ft(new $(B.programId),new $(B.id)).publicKey})),f.push(Mf(B.sqrtPriceX64.toString(),C));for(let L of(T=y[S])!=null?T:[])b.push(k({pubkey:new $(L)}))}else if(B.version===5){let x=A[S];b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(x.marketProgramId)})),b.push(k({pubkey:new $(x.marketAuthority)})),b.push(k({pubkey:Za,isWritable:!1})),b.push(k({pubkey:new $(x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.marketId)})),b.push(k({pubkey:new $(x.marketBids)})),b.push(k({pubkey:new $(x.marketAsks)})),b.push(k({pubkey:new $(x.marketEventQueue)})),b.push(k({pubkey:new $(x.marketBaseVault)})),b.push(k({pubkey:new $(x.marketQuoteVault)}))}else if(B.version===4){let x=A[S],L=B.status!==1;b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(L?x.id:x.marketProgramId)})),b.push(k({pubkey:new $(L?x.id:x.marketAuthority)})),b.push(k({pubkey:new $(L?x.id:x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(L?x.id:x.marketId)})),b.push(k({pubkey:new $(L?x.id:x.marketBids)})),b.push(k({pubkey:new $(L?x.id:x.marketAsks)})),b.push(k({pubkey:new $(L?x.id:x.marketEventQueue)})),b.push(k({pubkey:new $(L?x.id:x.marketBaseVault)})),b.push(k({pubkey:new $(L?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=A[S];b.push(k({pubkey:new $(x.authority)})),b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(B.observationId)}))}else throw Error("pool type error")}let h=v([D("insId"),P("amountIn"),P("amountOut"),Q(ee(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new $s({keys:b,programId:o,data:I})}function Mf(o,e){if(o)if(e){let t=new En(o).div(new En(25));return t.gt(Gi)?t:Gi}else{let t=new En(o).mul(new En(25));return t.lt(Xi)?t:Xi}else return e?Gi:Xi}function Gc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?Tt.add(At):It.sub(At);return ke.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?r:new En(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[ar(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Zi({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new En(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Of(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new En(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var nn=new pr(0),ti=class extends Ke{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(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:i=1}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await $t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=H(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(s.addInstruction({instructions:[Zt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):s.addInstruction({instructions:[Zt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),r=await $t({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:i,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(j),m=u.amount.token.mint.equals(j),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?dr:Oe,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?dr:Oe);else{let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?dr:Oe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=h,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[Zt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Oe})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let h=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?dr:Oe)}let A=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=Gc({routeProgram:r,inputMint:d,swapInfo:F(R({},e),{poolInfo:[...e.poolInfoList],poolKey:A,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[Xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),h.addInstruction(w);let{transactions:I}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[Xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Ur,clmm:n=In,cpmm:i=bo}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Qo.offsetOf("baseMint"),length:64}}),s=v([K("baseMint"),K("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=v([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Rn.span}],dataSlice:{offset:Rn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:ur.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:r}){e=e.toString()===Fn.default.toString()?j:e,t=t.toString()===Fn.default.toString()?j:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Oe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Ji(r),a={};Object.values(s).forEach(f=>{i.delete(f.mintA.address),a[f.mintA.address]={address:new Fn(f.mintA.address),programId:Oe,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(f.mintB.address),a[f.mintB.address]={address:new Fn(f.mintB.address),programId:Oe,mintAuthority:null,supply:BigInt(0),decimals:f.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(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Oe)?(i.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(b),f.mintProgramB.equals(Oe)?(i.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Wn({connection:this.scope.connection,mints:Array.from(i).map(f=>new Fn(f))});a=R(R({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(R({},f),{[b]:F(R({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,w,h,I,T,S,B,C;let m=l===void 0?new pr(0):e.raw.mul(new pr(l.feeBps.toNumber())).div(new pr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(R({},t),{address:bt(t.address).toString()}),b=[];for(let x of n)try{b.push(F(R({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",x.version,x.id.toString(),L.message)}this.logDebug("direct done");for(let[x,L]of Object.entries(i)){let q={chainId:101,address:x,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},M=L.in.map(X=>{try{return{pool:X,data:this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:q,amountIn:p})}}catch(W){this.logDebug("route in error",X.version,X.id.toString(),W.message);return}}).sort((X,W)=>{var Fe,Pt,xt,Et;let ze=X===void 0?nn:X.data.amountOut.amount.raw.sub((Pt=(Fe=X.data.amountOut.fee)==null?void 0:Fe.raw)!=null?Pt:nn),on=W===void 0?nn:W.data.amountOut.amount.raw.sub((Et=(xt=W.data.amountOut.fee)==null?void 0:xt.raw)!=null?Et:nn);return ze.lt(on)?1:-1})[0];if(M===void 0)continue;let Z=new be(ji(q),M.data.amountOut.amount.raw.sub((A=(g=M.data.amountOut.fee)==null?void 0:g.raw)!=null?A:nn));for(let X of L.out)try{let W=this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:Z});b.push(F(R({},W),{allTrade:!!(M.data.allTrade&&W.allTrade),amountIn:M.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new O(new Qe({baseToken:M.data.amountIn.amount.token,denominator:M.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((h=(w=W.amountOut.fee)==null?void 0:w.raw)!=null?h:nn)}).toFixed()),priceImpact:new O(M.data.priceImpact.add(W.priceImpact).toFixed()),fee:[M.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[M.pool,X],remainingAccounts:[M.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(I=W.amountOut.fee)!=null&&I.raw?new be(M.data.amountOut.amount.token,((S=(T=M.data.amountOut.fee)==null?void 0:T.raw)!=null?S:nn).add((C=(B=W.amountOut.fee)==null?void 0:B.raw)!=null?C:nn)):void 0,middleToken:M.data.amountOut.amount.token,poolReady:M.data.poolReady&&W.poolReady,poolType:[M.data.poolType,W.poolType],feeConfig:y,expirationTime:Ot(M.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",X.version,X.id.toString(),W.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,L)=>x.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(nn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:w}=Re.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:Ot(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:zo(F(R({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:zo(F(R({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:zo(F(R({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:zo(F(R({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await De(this.scope.connection,Array.from(s).map(l=>({pubkey:new Fn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Hs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:mr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(R({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=R({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Xs({programId:new Fn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:oo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:it({address:u.mintLp.toBase58(),programId:Oe.toBase58(),decimals:u.lpDecimals}),config:F(R({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Nf,Transaction as ea,TransactionInstruction as _f}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as vf}from"@solana/spl-token";import zc from"bn.js";var st=class extends Ke{static getPdaPoolId(e,t){return se([st.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return se([st.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new zc(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>st.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<st.VERSION_PROJECT.length;l++)a.push(...s.map(m=>st.getPdaOwnerId(t,m,i,l).publicKey));let c=await St(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==st.POOL_LAYOUT.span||b.data.length!==st.OWNER_LAYOUT.span)continue;let g=st.POOL_LAYOUT.decode(f.data),A=st.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),h=g.endTime.toNumber(),I=A.tokenInfo.map(B=>B.debtAmount.gt(new zc(0))).filter(B=>!B).length!==3,T=r>w&&r<h&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:A.lpAmount,project:st.VERSION_PROJECT[m],openTime:w,endTime:h,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:A.tokenInfo[C].debtAmount.add(A.tokenInfo[C].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(we.WSOL.mint),associatedOnly:c.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(u)}n.addInstruction({instructions:[st.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(we.WSOL.mint),associatedOnly:m.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[st.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return Ki(c,[i,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ea().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ea().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ea().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=v([]),r=[{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:vf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new _f({keys:r,programId:e,data:a})}},Bt=st;Bt.CLAIMED_NUM=3,Bt.POOL_LAYOUT=v([Ae(8),D("bump"),D("status"),P("openTime"),P("endTime"),K("ammId"),Q(v([D("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),st.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),Bt.OWNER_LAYOUT=v([Ae(8),D("bump"),D("version"),K("poolId"),K("owner"),P("lpAmount"),Q(v([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),st.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),Bt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Nf(e)),Bt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Bt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as ni}from"@solana/web3.js";import oi from"bn.js";import{TOKEN_PROGRAM_ID as Zc}from"@solana/spl-token";import{SystemProgram as Dn,SYSVAR_RENT_PUBKEY as Ef,Transaction as Qc,TransactionInstruction as Ff}from"@solana/web3.js";import{createInitializeAccountInstruction as Yc,TOKEN_PROGRAM_ID as jc}from"@solana/spl-token";function Vf(o="accountFlags"){let e=new Di(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ta=v([Ae(5),Vf("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),Ae(7)]);function Df({programId:o,marketInfo:e}){let t=v([D("version"),Je("instruction"),P("baseLotSize"),P("quoteLotSize"),jt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Ef,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),i=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},i),new Ff({keys:n,programId:o,data:i})}async function Hc({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Qc,i=await o.getMinimumBalanceForRentExemption(165);n.add(Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:jc}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:jc}),Yc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Yc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let r=new Qc;return r.add(Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(ta.span),space:ta.span,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Dn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Df({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:r,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var io=class extends Ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,txVersion:l,computeBudgetConfig:m}){let d=this.scope.ownerPubKey,p=dt({fromPublicKey:d,programId:r}),y=dt({fromPublicKey:d,programId:r}),f=dt({fromPublicKey:d,programId:r}),b=dt({fromPublicKey:d,programId:r}),g=dt({fromPublicKey:d,programId:r}),A=dt({fromPublicKey:d,programId:Zc}),w=dt({fromPublicKey:d,programId:Zc}),h=0,I=new oi(100);function T(){let M=new oi(0);for(;;)try{return{vaultOwner:ni.createProgramAddressSync([p.publicKey.toBuffer(),M.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:M}}catch{if(M.iaddn(1),M.gt(new oi(25555)))throw Error("find vault owner error")}}let{vaultOwner:S,vaultSignerNonce:B}=T(),C=new oi(Math.round(10**e.decimals*n)),x=new oi(Math.round(n*10**t.decimals*i));if(C.eq(Ge))throw Error("lot size is too small");if(x.eq(Ge))throw Error("tick size or lot size is too small");let L=await Hc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:p,baseMint:e.mint,quoteMint:t.mint,baseVault:A,quoteVault:w,vaultOwner:S,requestQueue:y,eventQueue:f,bids:b,asks:g,feeRateBps:h,quoteDustThreshold:I,vaultSignerNonce:B,baseLotSize:C,quoteLotSize:x,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),q=this.createTxBuilder();q.addInstruction({instructions:L[0].transaction.instructions,signers:L[0].signer});for await(let M of L.slice(1,L.length))q.addInstruction({instructions:M.transaction.instructions,signers:M.signer,instructionTypes:M.instructionTypes});return l===0?q.sizeCheckBuildV0({computeBudgetConfig:m,address:{marketId:p.publicKey,requestQueue:y.publicKey,eventQueue:f.publicKey,bids:b.publicKey,asks:g.publicKey,baseVault:A.publicKey,quoteVault:w.publicKey,baseMint:new ni(e.mint),quoteMin:new ni(t.mint)}}):q.sizeCheckBuild({computeBudgetConfig:m,address:{marketId:p.publicKey,requestQueue:y.publicKey,eventQueue:f.publicKey,bids:b.publicKey,asks:g.publicKey,baseVault:A.publicKey,quoteVault:w.publicKey,baseMint:new ni(e.mint),quoteMin:new ni(t.mint)}})}};import{PublicKey as ri}from"@solana/web3.js";import $c from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Wf,TransactionInstruction as oa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ia}from"@solana/spl-token";var na=v([D("instruction"),du("amount")]),ii=v([D("instruction")]);function i0({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:ia,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],i=Buffer.alloc(na.span);return na.encode({instruction:1,amount:Number(e)},i),new oa({keys:n,programId:o,data:i})}function fr({programId:o},e){let t=[{pubkey:ia,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,r])=>({pubkey:r,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(ii.span);return ii.encode({instruction:2},n),new oa({keys:t,programId:o,data:n})}function ra(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(ii.span);ii.encode({instruction:2},s);let a=[{pubkey:ia,isWritable:!1,isSigner:!1},{pubkey:Wf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new oa({programId:e.programId,keys:a,data:s})}var qf={[wo.IDO_PROGRAM_ID_V1.toString()]:1,[wo.IDO_PROGRAM_ID_V2.toString()]:2,[wo.IDO_PROGRAM_ID_V3.toString()]:3,[wo.IDO_PROGRAM_ID_V4.toString()]:4},ro=class extends Ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:r}){let s=this.createTxBuilder(),a=qf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new $c(e.coin).isZero(),!new $c(e.pc).isZero()],m=c.projectInfo.mint.address.equals(j),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(j),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[fr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new ri(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[fr({programId:new ri(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new ri(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[fr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new ri(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new ri(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ra(F(R({},g),{side:"base"}))]:[],...l?[ra(F(R({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as Uf}from"@solana/web3.js";import{MintLayout as Gf,TOKEN_2022_PROGRAM_ID as sa,TOKEN_PROGRAM_ID as aa}from"@solana/spl-token";var si=class extends Ke{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Dt.address,Dt),this._mintGroup.official.add(Dt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(R({},u),{priority:-1}))}),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?sa.toBase58():aa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?sa.toBase58():aa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?sa.toBase58():aa.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Dt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(R({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new Uf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Gf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var yr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Rt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=me("Raydium"),this.farm=new Vo({scope:this,moduleName:"Raydium_Farm"}),this.account=new xo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new jo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new si({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new ti({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Zo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new ei({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Bt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new io({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new ro({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Xf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Ni({cluster:n,timeout:i,urlConfigs:a,logCount:r,logRequests:s}),u=new yr(F(R({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(_i);return this._owner.publicKey}setOwner(e){return this._owner=e?new Rt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(ou);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(_i),new Error(_i)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>F(R({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var sC=o=>o;export{oy as ACCOUNT_TYPE_SIZE,Lg as ALL_PROGRAM_ID,Bp as AMM_CONFIG_SEED,Lm as AMM_STABLE,Ur as AMM_V4,Xy as ANAMint,ve as API_URLS,al as AccountType,Ni as Api,Wu as BIT_PRECISION,Lt as BNDivCeil,Bn as BNLayout,$b as BN_100,Jb as BN_1000,eg as BN_10000,Zb as BN_FIVE,Ea as BN_ONE,Pn as BN_TEN,Hb as BN_THREE,jb as BN_TWO,Ge as BN_ZERO,cw as BitStructure,mu as Blob,yo as CLMM_LOCK_AUTH_ID,zn as CLMM_LOCK_PROGRAM_ID,In as CLMM_PROGRAM_ID,Mr as CLOCK_PROGRAM_ID,Gr as CREATE_CPMM_POOL_AUTH,Vm as CREATE_CPMM_POOL_FEE_ACC,bo as CREATE_CPMM_POOL_PROGRAM,Zo as Clmm,oc as ClmmConfigLayout,ke as ClmmInstrument,tr as ConstantProductCurve,Fc as CpmmConfigInfoLayout,nr as CpmmFee,ur as CpmmPoolInfoLayout,mo as Currency,wn as CurrencyAmount,ir as CurveCalculator,Og as DEVNET_PROGRAM_ID,gA as DEV_API_URLS,Fm as DEV_CREATE_CPMM_POOL_AUTH,Dm as DEV_CREATE_CPMM_POOL_FEE_ACC,Em as DEV_CREATE_CPMM_POOL_PROGRAM,qm as DEV_LOCK_CPMM_AUTH,Wm as DEV_LOCK_CPMM_PROGRAM,Xp as DataElement,zy as ETHMint,Ls as EXTENSION_TICKARRAY_BITMAP_SIZE,Cu as FARM_LOCK_MINT,Ru as FARM_LOCK_VAULT,Wr as FARM_PROGRAM_ID_V3,qr as FARM_PROGRAM_ID_V5,Xn as FARM_PROGRAM_ID_V6,kt as FARM_PROGRAM_TO_VERSION,Ou as FARM_VERSION_TO_LEDGER_LAYOUT,Lu as FARM_VERSION_TO_STATE_LAYOUT,Rg as FEE_DESTINATION_ID,zi as FEE_RATE_DENOMINATOR,zs as FEE_RATE_DENOMINATOR_VALUE,Mp as FETCH_TICKARRAY_COUNT,Ip as Fee,re as Fraction,wo as IDO_ALL_PROGRAM,Mm as IDO_PROGRAM_ID_V1,Nm as IDO_PROGRAM_ID_V2,_m as IDO_PROGRAM_ID_V3,vm as IDO_PROGRAM_ID_V4,ki as INSTRUCTION_PROGRAM_ID,E as InstructionType,Ja as JupTokenType,Hi as LIQUIDITY_FEES_DENOMINATOR,_s as LIQUIDITY_FEES_NUMERATOR,Za as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,qp as LIQUIDITY_VERSION_TO_SERUM_VERSION,gI as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Ao as LOCK_CPMM_AUTH,go as LOCK_CPMM_PROGRAM,Tf as LOCK_LIQUIDITY_SEED,qu as LOG_B_2_X32,Uu as LOG_B_P_ERR_MARGIN_LOWER_X64,Gu as LOG_B_P_ERR_MARGIN_UPPER_X64,Li as LOOKUP_TABLE_CACHE,Io as Layout,pe as LiquidityMath,RT as LockClPositionLayoutV2,CT as LockPositionLayout,nl as LogLevel,Ar as Logger,ta as MARKET_STATE_LAYOUT_V2,Hs as MARKET_STATE_LAYOUT_V3,qc as MARKET_VERSION_TO_STATE_LAYOUT,Qa as MAX_BASE64_SIZE,It as MAX_SQRT_PRICE_X64,Xi as MAX_SQRT_PRICE_X64_SUB_ONE,ut as MAX_TICK,Pi as MEMO_PROGRAM_ID,mn as MEMO_PROGRAM_ID2,zt as METADATA_PROGRAM_ID,Tt as MIN_SQRT_PRICE_X64,Gi as MIN_SQRT_PRICE_X64_ADD_ONE,ot as MIN_TICK,Jn as MODEL_DATA_PUBKEY,mr as Market,oe as MathUtil,xs as MaxU64,Du as MaxUint128,Jt as NEGATIVE_ONE,Gy as NRVMint,Op as OBSERVATION_SEED,At as ONE,Rm as OPEN_BOOK_PROGRAM,Rp as OPERATION_SEED,ic as ObservationInfoLayout,vp as ObservationLayout,rc as OperationLayout,os as OptionLayout,Rt as Owner,Vy as PAIMint,Ju as POOL_LOCK_ID_SEED,Kp as POOL_REWARD_VAULT_SEED,xp as POOL_SEED,Lp as POOL_TICK_ARRAY_BITMAP_SEED,Sp as POOL_VAULT_SEED,ju as POSITION_SEED,Ce as Percent,eu as PoolFetchType,Rn as PoolInfoLayout,Re as PoolUtils,Xo as PositionInfoLayout,Ep as PositionRewardInfoLayout,qo as PositionUtils,Qe as Price,KT as ProtocolPositionLayout,Ui as Q128,wt as Q64,vy as RAYMint,tt as RENT_PROGRAM_ID,yr as Raydium,Vp as RewardInfo,Sc as RoundDirection,Kr as Rounding,Om as Router,Dc as SERUM_PROGRAMID_TO_VERSION,Ci as SERUM_PROGRAM_ID_V3,Wc as SERUM_VERSION_TO_PROGRAMID,tu as SESSION_KEY,Ue as SOLMint,Dt as SOL_INFO,zT as SPL_MINT_LAYOUT,Ey as SRMMint,Qr as STORAGE_KEY,hi as SYSTEM_PROGRAM_ID,te as SqrtPriceMath,$n as StableLayout,is as Structure,Cn as SwapMath,Kn as TICK_ARRAY_BITMAP_SIZE,Cp as TICK_ARRAY_SEED,Xe as TICK_ARRAY_SIZE,lh as TICK_SPACINGS,qe as TOKEN_WSOL,en as TickArrayBitmap,nc as TickArrayBitmapExtensionLayout,Go as TickArrayBitmapExtensionUtils,Uo as TickArrayLayout,Fp as TickLayout,Ln as TickMath,fe as TickQuery,Y as TickUtils,we as Token,be as TokenAmount,Oi as TxBuilder,hn as TxVersion,Eo as U64Resolution,dh as U64_IGNORE_RANGE,es as UInt,Fy as USDCMint,Uy as USDHMint,Dy as USDTMint,Cm as UTIL1216,rs as Union,Su as Voter,cp as VoterDepositEntry,up as VoterLockup,xu as VoterRegistrar,ap as VoterVotingMintConfig,j as WSOLMint,Di as WideBits,Ht as WrappedLayout,ye as ZERO,Na as _100_PERCENT,k as accountMeta,Rb as add,xi as addComputeBudget,Fs as addLiquidityLayout,Yw as array,cs as associatedLedgerAccountLayout,ts as bits,Ae as blob,Ee as bool,hs as calFarmRewardAmount,ff as ceilDiv,po as checkLegacyTxSize,fo as checkV0TxSize,kr as chunkArray,ii as claimLayout,tc as clmmComputeInfoToApiInfo,Zt as closeAccountInstruction,Ec as collectCpFeeInstruction,Rr as commonSystemAccountMeta,Si as confirmTransaction,Sf as cpmmLockPositionInstruction,Mo as createAssociatedLedgerAccountInstruction,me as createLogger,dc as createPoolFeeLayout,kc as createPoolV4InstructionV2,bI as createPoolV4Layout,$t as createWSolAccountInstructions,Vw as cstr,tb as currencyEquals,Pm as decimalToFraction,Wd as decodeBool,xb as div,Ti as divCeil,at as dwLayout,qd as encodeBool,EA as endlessRetry,ym as eq,Ow as f32,Mw as f32be,Nw as f64,_w as f64be,ps as farmAddRewardLayout,qP as farmLedgerLayoutV3_1,Ko as farmLedgerLayoutV3_2,UP as farmLedgerLayoutV5_1,Iu as farmLedgerLayoutV5_2,Bu as farmLedgerLayoutV6_1,Nu as farmRewardInfoToConfig,ms as farmRewardLayout,ds as farmRewardRestartLayout,sp as farmRewardTimeInfoLayout,hu as farmStateV3Layout,Tu as farmStateV5Layout,So as farmStateV6Layout,fk as fetchMultipleFarmInfoAndUpdate,HI as fetchMultipleInfo,Wn as fetchMultipleMintInfos,se as findProgramAddress,vs as fixedSwapInLayout,Vs as fixedSwapOutLayout,Kc as floorDiv,Ki as forecastTransactionSize,tf as formatLayout,dt as generatePubKey,le as getATAAddress,Mu as getAssociatedAuthority,$i as getAssociatedConfigId,nt as getAssociatedLedgerAccount,Ro as getAssociatedLedgerPoolAccount,mf as getAssociatedOpenOrders,Ic as getAssociatedPoolKeys,sr as getCpLockPda,Ax as getCpmmPdaAmmConfigId,Ys as getCpmmPdaPoolId,Lc as getCreatePoolKeys,Wa as getDate,Ts as getDepositEntryIndex,bc as getDxByDyBaseIn,yc as getDyByDxBaseIn,hg as getEpochInfo,Zn as getFarmLedgerLayout,lp as getFarmStateLayout,Xs as getLiquidityAssociatedAuthority,_n as getLiquidityAssociatedId,iT as getLiquidityFromAmounts,Cb as getMax,St as getMultipleAccountsInfo,De as getMultipleAccountsInfoWithCustomFlags,Xr as getMultipleLookupTableInfo,wh as getPdaAmmConfigId,ft as getPdaExBitmapAccount,Wo as getPdaLockClPositionIdV2,Rs as getPdaLockPositionId,kf as getPdaLpMint,Sn as getPdaMetadataKey,$u as getPdaObservationAccount,rr as getPdaObservationId,Do as getPdaOperationAccount,ct as getPdaPersonalPositionAddress,oo as getPdaPoolAuthority,Hu as getPdaPoolId,Zu as getPdaPoolRewardVaulId,Cs as getPdaPoolVaultId,Nt as getPdaProtocolPositionAddress,de as getPdaTickArrayAddress,Rc as getPdaVault,Gn as getRecentBlockHash,bs as getRegistrarAddress,Gm as getSessionKey,gc as getStablePrice,hm as getTime,vb as getTimestamp,ks as getTokenOwnerRecordAddress,_g as getTransferAmountFee,ge as getTransferAmountFeeV2,ws as getVoterAddress,Ps as getVoterWeightRecordAddress,As as getVotingMintAuthority,gs as getVotingTokenMint,wp as governanceCreateTokenOwnerRecord,lw as greedy,fm as gt,Bb as gte,Au as i128,fh as i16ToBytes,Qi as i32ToBytes,Yn as i64,gu as i8,Es as initPoolLayout,as as initTokenAccountInstruction,Df as initializeMarket,ag as intersection,Ua as isDateAfter,qa as isDateBefore,km as isDecimal,Kb as isMeaningfulNumber,Da as isNumber,fs as isValidFarmVersion,Fo as isZero,Ie as jsonInfo2PoolKeys,yk as judgeFarmType,Ss as leadingZeros,Yu as leastSignificantBit,Qo as liquidityStateV4Layout,Up as liquidityStateV5Layout,Tb as lt,Ib as lte,Wy as mSOLMint,Zi as makeAMMSwapInstruction,Pc as makeAddLiquidityInstruction,Bs as makeAddNewRewardInstruction,fr as makeClaimInstruction,ra as makeClaimInstructionV4,Vc as makeCpmmLockInstruction,Mc as makeCreateCpmmPoolInInstruction,_u as makeCreateFarmInstruction,Hc as makeCreateMarketInstruction,vu as makeCreatorWithdrawFarmRewardInstruction,Nc as makeDepositCpmmInInstruction,Vu as makeDepositInstructionV3,Eu as makeDepositInstructionV5,Fu as makeDepositInstructionV6,Lk as makeDepositTokenInstruction,Mk as makeDepositWithdrawInstruction,NI as makeInitPoolInstructionV4,i0 as makePurchaseInstruction,Is as makeRestartRewardInstruction,hc as makeSimulatePoolInfoInstruction,ar as makeSwapCpmmBaseInInInstruction,vc as makeSwapCpmmBaseOutInInstruction,rf as makeSwapFixedInInstruction,sf as makeSwapFixedOutInstruction,Gc as makeSwapInstruction,ku as makeTransferInstruction,_c as makeWithdrawCpmmInInstruction,vo as makeWithdrawInstructionV3,_o as makeWithdrawInstructionV5,No as makeWithdrawInstructionV6,Ok as makeWithdrawTokenInstruction,Ot as minExpirationTime,mh as mockCreatePoolInfo,Xu as mockV3CreatePoolInfo,zp as modelDataInfoLayout,Qu as mostSignificantBit,Er as mul,Fr as notInnerObject,Bw as ns64,Lw as ns64be,du as nu64,ww as nu64be,ns as offset,rg as offsetDateTime,Uw as option,H as parseBigNumberish,kn as parseNumberInfo,ja as parseSimulateLogToJson,Yt as parseSimulateValue,Pu as parseTokenAccountResp,nI as parseTokenInfo,bn as poolTypeV6,Tn as printSimulate,K as publicKey,na as purchaseLayout,op as realFarmStateV3Layout,ip as realFarmStateV5Layout,rp as realFarmV6Layout,Va as recursivelyDecimalToFraction,qs as removeLiquidityInstruction,Ds as removeLiquidityLayout,FS as route1Instruction,DS as route2Instruction,Of as routeInstruction,Qw as rustEnum,kw as s16,xw as s16be,hw as s24,Sw as s24be,$e as s32,Kw as s32be,Tw as s40,Cw as s40be,Iw as s48,Rw as s48be,Pw as s8,Q as seq,Yf as setLoggerLevel,Am as shakeFractionDecimal,Ya as simulateMultipleInstruction,MI as simulatePoolInfoInstruction,Bm as simulateTransaction,_a as sleep,bt as solToWSol,iI as solToWSolToken,fn as splAccountLayout,La as splitNumber,qy as stSOLMint,zw as str,v as struct,Sb as sub,Xw as tagged,Vr as tenExponential,Ji as toAmmComputePoolInfo,it as toApiV3Token,wm as toBN,Ha as toBuffer,gn as toFeeConfig,Fa as toFraction,hb as toFractionWithDecimals,tg as toPercent,ji as toToken,zo as toTokenAmount,oI as toTokenInfo,ng as toTokenPrice,og as toTotalPrice,va as toUsdCurrency,Ks as trailingZeros,Tg as transformTxToBase64,Or as tryParsePublicKey,xm as txToBase64,ee as u128,jt as u16,zu as u16ToBytes,fw as u16be,mw as u24,yw as u24be,Je as u32,yh as u32ToBytes,bw as u32be,dw as u40,gw as u40be,pw as u48,Aw as u48be,P as u64,D as u8,jw as union,sC as unionArr,vw as unionLayoutDiscriminator,cg as uniq,mp as updateFarmPoolInfo,Mi as updateReqHistory,Ew as utf8,Lr as validateAndParsePublicKey,ys as validateFarmRewards,Gw as vec,Ud as vecU8,kp as voterStakeRegistryCreateDepositEntry,Pp as voterStakeRegistryCreateVoter,bp as voterStakeRegistryDeposit,gp as voterStakeRegistryUpdateVoterWeightRecord,Ap as voterStakeRegistryWithdraw,rI as wSolToSolToken,ls as withdrawRewardLayout,ug as xor,Hw as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map