@raydium-io/raydium-sdk-v2 0.1.29-alpha → 0.1.30-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/api.d.ts +1 -1
- package/lib/api/index.d.ts +1 -1
- package/lib/api/type.d.ts +1 -1
- package/lib/common/accountInfo.d.ts +1 -1
- package/lib/common/bignumber.d.ts +1 -1
- package/lib/common/fractionUtil.d.ts +1 -1
- package/lib/common/index.d.ts +1 -1
- package/lib/common/transfer.d.ts +1 -1
- package/lib/common/txTool/txTool.d.ts +1 -1
- package/lib/common/txTool/txUtils.d.ts +1 -1
- package/lib/common/utility.d.ts +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/module/amount.d.ts +1 -1
- package/lib/module/fraction.d.ts +1 -1
- package/lib/module/index.d.ts +1 -1
- package/lib/module/percent.d.ts +1 -1
- package/lib/module/price.d.ts +1 -1
- package/lib/raydium/account/account.d.ts +3 -3
- package/lib/raydium/account/index.d.ts +1 -1
- package/lib/raydium/account/instruction.d.ts +1 -1
- package/lib/raydium/account/types.d.ts +1 -1
- package/lib/raydium/account/util.d.ts +1 -1
- package/lib/raydium/clmm/clmm.d.ts +3 -3
- package/lib/raydium/clmm/index.d.ts +3 -3
- package/lib/raydium/clmm/instrument.d.ts +2 -2
- package/lib/raydium/clmm/layout.d.ts +1 -1
- package/lib/raydium/clmm/type.d.ts +2 -2
- package/lib/raydium/clmm/utils/math.d.ts +2 -2
- package/lib/raydium/clmm/utils/pool.d.ts +2 -2
- package/lib/raydium/clmm/utils/position.d.ts +2 -2
- package/lib/raydium/clmm/utils/tick.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
- package/lib/raydium/cpmm/cpmm.d.ts +3 -3
- package/lib/raydium/cpmm/index.d.ts +1 -1
- package/lib/raydium/cpmm/layout.d.ts +1 -1
- package/lib/raydium/cpmm/type.d.ts +1 -1
- package/lib/raydium/farm/config.d.ts +1 -1
- package/lib/raydium/farm/farm.d.ts +3 -3
- package/lib/raydium/farm/index.d.ts +1 -1
- package/lib/raydium/farm/instruction.d.ts +1 -1
- package/lib/raydium/farm/layout.d.ts +1 -1
- package/lib/raydium/farm/type.d.ts +1 -1
- package/lib/raydium/farm/util.d.ts +1 -1
- package/lib/raydium/ido/ido.d.ts +3 -3
- package/lib/raydium/ido/index.d.ts +3 -3
- package/lib/raydium/ido/instruction.d.ts +1 -1
- package/lib/raydium/ido/type.d.ts +1 -1
- package/lib/raydium/index.d.ts +3 -3
- package/lib/raydium/index.js +1 -1
- package/lib/raydium/index.js.map +1 -1
- package/lib/raydium/index.mjs +1 -1
- package/lib/raydium/index.mjs.map +1 -1
- package/lib/raydium/liquidity/index.d.ts +1 -1
- package/lib/raydium/liquidity/instruction.d.ts +1 -1
- package/lib/raydium/liquidity/layout.d.ts +6 -6
- package/lib/raydium/liquidity/liquidity.d.ts +3 -3
- package/lib/raydium/liquidity/liquidity.js +1 -1
- package/lib/raydium/liquidity/liquidity.js.map +1 -1
- package/lib/raydium/liquidity/liquidity.mjs +1 -1
- package/lib/raydium/liquidity/liquidity.mjs.map +1 -1
- package/lib/raydium/liquidity/type.d.ts +6 -2
- package/lib/raydium/liquidity/type.js.map +1 -1
- package/lib/raydium/liquidity/utils.d.ts +1 -1
- package/lib/raydium/marketV2/createMarket.d.ts +3 -3
- package/lib/raydium/marketV2/index.d.ts +3 -3
- package/lib/raydium/moduleBase.d.ts +3 -3
- package/lib/raydium/raydium.d.ts +3 -3
- package/lib/raydium/raydium.js +1 -1
- package/lib/raydium/raydium.js.map +1 -1
- package/lib/raydium/raydium.mjs +1 -1
- package/lib/raydium/raydium.mjs.map +1 -1
- package/lib/raydium/token/constant.d.ts +1 -1
- package/lib/raydium/token/index.d.ts +1 -1
- package/lib/raydium/token/token.d.ts +3 -3
- package/lib/raydium/token/type.d.ts +1 -1
- package/lib/raydium/token/utils.d.ts +1 -1
- package/lib/raydium/tradeV2/index.d.ts +2 -2
- package/lib/raydium/tradeV2/instrument.d.ts +2 -2
- package/lib/raydium/tradeV2/trade.d.ts +3 -3
- package/lib/raydium/tradeV2/type.d.ts +2 -2
- package/lib/raydium/type.d.ts +1 -1
- package/lib/raydium/utils1216/index.d.ts +3 -3
- package/lib/raydium/utils1216/utils1216.d.ts +3 -3
- package/lib/{raydium-1e9cad89.d.ts → raydium-8871c9e8.d.ts} +4 -4
- package/lib/{type-b95eb35d.d.ts → type-0de39dab.d.ts} +1 -1
- package/package.json +1 -1
- package/src/raydium/liquidity/liquidity.ts +76 -30
- package/src/raydium/liquidity/type.ts +5 -1
- package/lib/{type-60acc172.d.ts → type-2596119f.d.ts} +5 -5
package/lib/raydium/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var lc=Object.defineProperty,mc=Object.defineProperties;var dc=Object.getOwnPropertyDescriptors;var Vo=Object.getOwnPropertySymbols;var Ks=Object.prototype.hasOwnProperty,Cs=Object.prototype.propertyIsEnumerable;var Ss=(o,e,t)=>e in o?lc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))Ks.call(e,t)&&Ss(o,t,e[t]);if(Vo)for(var t of Vo(e))Cs.call(e,t)&&Ss(o,t,e[t]);return o},F=(o,e)=>mc(o,dc(e));var Be=(o,e)=>{var t={};for(var n in o)Ks.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Vo)for(var n of Vo(o))e.indexOf(n)<0&&Cs.call(o,n)&&(t[n]=o[n]);return t};import{merge as up}from"lodash";import wa from"axios";import{get as Rs,set as pc}from"lodash";import Os from"dayjs";import fc from"dayjs/plugin/utc";Os.extend(fc);var Yr=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 Os().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},Ls={},yc={};function ue(o){let e=Rs(Ls,o);if(!e){let t=Rs(yc,o);e=new Yr({name:o,logLevel:t}),pc(Ls,o,e)}return e}import{PublicKey as Il}from"@solana/web3.js";import Bl from"bn.js";import hl from"big.js";import $o from"bn.js";import it from"bn.js";var In=9e15,Zt=1e9,Qr="0123456789abcdef",Fo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Eo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",jr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-In,maxE:In,crypto:!1},Vs,vt,oe=!0,Wo="[DecimalError] ",Ht=Wo+"Invalid argument: ",vs=Wo+"Precision limit exceeded",Fs=Wo+"crypto unavailable",Es="[object Decimal]",Xe=Math.floor,Oe=Math.pow,bc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,gc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Ac=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ds=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,ee=7,wc=9007199254740991,Pc=Fo.length-1,Hr=Eo.length-1,M={toStringTag:Es};M.absoluteValue=M.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),H(o)};M.ceil=function(){return H(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(Ht+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};M.comparedTo=M.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,c=i.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(i.e!==o.e)return i.e>o.e^c<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===r?0:n>r^c<0?1:-1};M.cosine=M.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())+ee,n.rounding=1,t=hc(n,Xs(n,t)),n.precision=o,n.rounding=e,H(vt==2||vt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var o,e,t,n,r,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Oe(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Oe(t,1/3),o=Xe((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=we(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,H(n,o,m.rounding,e)};M.decimalPlaces=M.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-Xe(this.e/ee))*ee,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(o){return we(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return H(we(e,new t(o),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(o){return this.cmp(o)===0};M.floor=function(){return H(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(o){return this.cmp(o)>0};M.greaterThanOrEqualTo=M.gte=function(o){var e=this.cmp(o);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var o,e,t,n,r,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/Uo(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=Bn(s,1,i.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return H(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=Bn(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Uo(5,o)),r=Bn(i,2,r,r,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,H(r,e,t,!0)};M.hyperbolicTangent=M.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,we(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?wt(t,r,i):new t(0):new t(NaN):e.isZero()?wt(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=wt(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};M.inverseHyperbolicCosine=M.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,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.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,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?H(new i(r),o,e,!0):(i.precision=t=n-r.e,r=we(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=wt(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};M.inverseTangent=M.atan=function(){var o,e,t,n,r,i,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<=Hr)return s=wt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Hr)return s=wt(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/ee+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),r=u;o!==-1;)if(r=r.times(c),i=s.minus(r.div(n+=2)),r=r.times(c),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,H(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Xe(this.e/ee)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(o){return this.cmp(o)<0};M.lessThanOrEqualTo=M.lte=function(o){return this.cmp(o)<1};M.logarithm=M.log=function(o){var e,t,n,r,i,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)i=!0;else{for(r=t[0];r%10===0;)r/=10;i=r!==1}if(oe=!1,a=m+p,s=jt(u,a),n=e?Do(l,a+10):jt(o,a),c=we(s,n,a,1),Dn(c.d,r=m,d))do if(a+=10,s=jt(u,a),n=e?Do(l,a+10):jt(o,a),c=we(s,n,a,1),!i){+De(c.d).slice(r+1,r+15)+1==1e14&&(c=H(c,m+1,0));break}while(Dn(c.d,r+=10,d));return oe=!0,H(c,m,d)};M.minus=M.sub=function(o){var e,t,n,r,i,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 oe?H(o,a,c):o}if(t=Xe(o.e/ee),l=Xe(p.e/ee),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;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}i=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>i;){if(u[--n]<d[n]){for(r=n;r&&u[--r]===0;)u[r]=Pt-1;--u[r],u[n]+=Pt}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=qo(u,t),oe?H(o,a,c):o):new y(c===3?-0:0)};M.modulo=M.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]?H(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=we(t,o.abs(),0,3,1),e.s*=o.s):e=we(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Zr(this)};M.naturalLogarithm=M.ln=function(){return jt(this)};M.negated=M.neg=function(){var o=new this.constructor(this);return o.s=-o.s,H(o)};M.plus=M.add=function(o){var e,t,n,r,i,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)),oe?H(o,a,c):o;if(i=Xe(m.e/ee),n=Xe(o.e/ee),u=u.slice(),r=i-n,r){for(r<0?(t=u,r=-r,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/ee),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=u.length,r=l.length,s-r<0&&(r=s,t=l,l=u,u=t),e=0;r;)e=(u[--r]=u[r]+l[r]+e)/Pt|0,u[r]%=Pt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=qo(u,n),oe?H(o,a,c):o};M.precision=M.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Ht+o);return t.d?(e=Ws(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var o=this,e=o.constructor;return H(new e(o),o.e+1,e.rounding)};M.sine=M.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())+ee,n.rounding=1,t=Tc(n,Xs(n,t)),n.precision=o,n.rounding=e,H(vt>2?t.neg():t,o,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var o,e,t,n,r,i,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(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Xe((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(we(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(H(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,c+1,1),o=!n.times(n).eq(s));break}return oe=!0,H(n,c,l.rounding,o)};M.tangent=M.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=we(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,H(vt==2||vt==4?t.neg():t,o,e,!0)):new n(NaN)};M.times=M.mul=function(o){var e,t,n,r,i,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=Xe(l.e/ee)+Xe(o.e/ee),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,r=c+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%Pt|0,e=a/Pt|0;i[r]=(i[r]+e)%Pt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=qo(i,t),oe?H(o,m.precision,m.rounding):o};M.toBinary=function(o,e){return Jr(this,2,o,e)};M.toDecimalPlaces=M.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(nt(o,0,Zt),e===void 0?e=n.rounding:nt(e,0,8),H(t,o+t.e+1,e))};M.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Kt(n,!0):(nt(o,0,Zt),e===void 0?e=r.rounding:nt(e,0,8),n=H(new r(n),o+1,e),t=Kt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Kt(r):(nt(o,0,Zt),e===void 0?e=i.rounding:nt(e,0,8),n=H(new i(r),o+r.e+1,e),t=Kt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};M.toFraction=function(o){var e,t,n,r,i,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),i=e.e=Ws(y)-p.e-1,s=i%ee,e.d[0]=Oe(10,s<0?ee+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(Ht+a);o=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*ee*2;m=we(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(m.times(r)),c=r,r=e,e=a.minus(m.times(r)),a=r;return r=we(o.minus(t),n,0,1,1),c=c.plus(r.times(u)),t=t.plus(r.times(n)),c.s=u.s=p.s,d=we(u,n,i,1).minus(p).abs().cmp(we(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};M.toHexadecimal=M.toHex=function(o,e){return Jr(this,16,o,e)};M.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:nt(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]?(oe=!1,t=we(t,o,0,e,1).times(o),oe=!0,H(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Jr(this,8,o,e)};M.toPower=M.pow=function(o){var e,t,n,r,i,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(Oe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,o.eq(1))return H(a,n,i);if(e=Xe(o.e/ee),e>=o.d.length-1&&(t=u<0?-u:u)<=wc)return r=qs(c,a,t,n),o.s<0?new c(1).div(r):H(r,n,i);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=Oe(+a,u),e=t==0||!isFinite(t)?Xe(u*(Math.log("0."+De(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):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Zr(o.times(jt(a,n+t)),n),r.d&&(r=H(r,n+5,1),Dn(r.d,n,i)&&(e=n+10,r=H(Zr(o.times(jt(a,e+t)),e),e+5,1),+De(r.d).slice(n+1,n+15)+1==1e14&&(r=H(r,n+1,0)))),r.s=s,oe=!0,c.rounding=i,H(r,n,i))};M.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Kt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(nt(o,1,Zt),e===void 0?e=r.rounding:nt(e,0,8),n=H(new r(n),o,e),t=Kt(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(nt(o,1,Zt),e===void 0?e=n.rounding:nt(e,0,8)),H(new n(t),o,e)};M.toString=function(){var o=this,e=o.constructor,t=Kt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return H(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var o=this,e=o.constructor,t=Kt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function De(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=ee-n.length,t&&(i+=Qt(t)),i+=n;s=o[e],n=s+"",t=ee-n.length,t&&(i+=Qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Ht+o)}function Dn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=ee,r=0):(r=Math.ceil((e+1)/ee),e%=ee),i=Oe(10,ee-e),a=o[r]%i|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==i||t>3&&a+1==i/2)&&(o[r+1]/i/100|0)==Oe(10,e-2)-1||(a==i/2||a==0)&&(o[r+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(o[r+1]/i/1e3|0)==Oe(10,e-3)-1,s}function vo(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=Qr.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function hc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Uo(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=Bn(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var we=function(){function o(n,r,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*r+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=r[a]){c=n[a]>r[a]?1:-1;break}return c}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,c){var u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I,L,q,D=n.constructor,J=n.s==r.s?1:-1,G=n.d,W=r.d;if(!G||!G[0]||!W||!W[0])return new D(!n.s||!r.s||(G?W&&G[0]==W[0]:!W)?NaN:G&&G[0]==0||!W?J*0:J/0);for(c?(p=1,l=n.e-r.e):(c=Pt,p=ee,l=Xe(n.e/p)-Xe(r.e/p)),L=W.length,R=G.length,g=new D(J),h=g.d=[],m=0;W[m]==(G[m]||0);m++);if(W[m]>(G[m]||0)&&l--,i==null?(T=i=D.precision,s=D.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),h[m]=S/W|0,d=S%W|0;y=d||m<R}else{for(d=c/(W[0]+1)|0,d>1&&(W=o(W,d,c),G=o(G,d,c),L=W.length,R=G.length),x=L,P=G.slice(0,L),k=P.length;k<L;)P[k++]=0;q=W.slice(),q.unshift(0),I=W[0],W[1]>=c/2&&++I;do d=0,u=e(W,P,L,k),u<0?(B=P[0],L!=k&&(B=B*c+(P[1]||0)),d=B/I|0,d>1?(d>=c&&(d=c-1),f=o(W,d,c),b=f.length,k=P.length,u=e(f,P,b,k),u==1&&(d--,t(f,L<b?q:W,b,c))):(d==0&&(u=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(P,f,k,c),u==-1&&(k=P.length,u=e(W,P,L,k),u<1&&(d++,t(P,L<k?q:W,k,c))),k=P.length):u===0&&(d++,P=[0]),h[m++]=d,u&&P[0]?P[k++]=G[x]||0:(P=[G[x]],k=1);while((x++<R||P[0]!==void 0)&&T--);y=P[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Vs=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?i+g.e+1:i,s,y)}return g}}();function H(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=ee,s=e,l=m[d=0],c=l/Oe(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,r=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=ee,s=i-ee+r,c=s<0?0:l/Oe(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Oe(10,r-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Oe(10,r-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]=Oe(10,(ee-e%ee)%ee),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Oe(10,ee-i),m[d]=s>0?(l/Oe(10,r-s)%Oe(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,m[0]==Pt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Pt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Kt(o,e,t){if(!o.isFinite())return Gs(o);var n,r=o.e,i=De(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Qt(-r-1)+i,t&&(n=t-s)>0&&(i+=Qt(n))):r>=s?(i+=Qt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Qt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Qt(n))),i}function qo(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function Do(o,e,t){if(e>Pc)throw oe=!0,t&&(o.precision=t),Error(vs);return H(new o(Fo),e,1,!0)}function wt(o,e,t){if(e>Hr)throw Error(vs);return H(new o(Eo),e,t,!0)}function Ws(o){var e=o.length-1,t=e*ee+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 Qt(o){for(var e="";o--;)e+="0";return e}function qs(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/ee+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Ms(i.d,s)&&(r=!0)),t=Xe(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Ms(e.d,s)}return oe=!0,i}function Ns(o){return o.d[o.d.length-1]&1}function Us(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function Zr(o,e){var t,n,r,i,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?(oe=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=H(i.times(o),c,1),t=t.times(++l),a=s.plus(we(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(r=m;r--;)s=H(s.times(s),c,1);if(e==null)if(u<3&&Dn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return H(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function jt(o,e){var t,n,r,i,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,h=g.rounding,P=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?(oe=!1,l=P):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=Do(g,l+2,P).times(i+""),f=jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?H(f,P,h,oe=!0):f;for(m=f,c=s=f=we(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),r=3;;){if(s=H(s.times(d),l,1),u=c.plus(we(s,new g(r),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Do(g,l+2,P).times(i+""))),c=we(c,new g(p),l,1),e==null)if(Dn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=we(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),r=a=1;else return H(c,g.precision=P,h,oe=!0);else return g.precision=P,c;c=u,r+=2}}function Gs(o){return String(o.s*o.s/0)}function $r(o,e){var t,n,r;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(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=ee;n<r;)o.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),oe&&(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 kc(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ds.test(e))return $r(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(gc.test(e))t=16,e=e.toLowerCase();else if(bc.test(e))t=2;else if(Ac.test(e))t=8;else throw Error(Ht+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=qs(n,new n(t),i,i*2)),u=vo(e,t,Pt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(o.s*0):(o.e=qo(u,l),o.d=u,oe=!1,s&&(o=we(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?Oe(2,c):Wn.pow(2,c))),oe=!0,o)}function Tc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Uo(5,t)),e=Bn(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function Bn(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,m=Math.ceil(l/ee);for(oe=!1,c=t.times(t),a=new o(n);;){if(s=we(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=we(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function Uo(o,e){for(var t=o;--e;)t*=o;return t}function Xs(o,e){var t,n=e.s<0,r=wt(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return vt=n?4:1,e;if(t=e.divToInt(r),t.isZero())vt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return vt=Ns(t)?n?2:3:n?4:1,e;vt=Ns(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Jr(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(nt(t,1,Zt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=Gs(o);else{for(l=Kt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=vo(Kt(d),10,r),d.e=d.d.length),m=vo(l,10,r),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=we(o,d,t,n,0,r),m=o.d,i=o.e,u=Vs),s=m[t],a=r/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]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Qr.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=vo(l,r,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Qr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function Ms(o,e){if(o.length>e)return o.length=e,!0}function Ic(o){return new this(o).abs()}function Bc(o){return new this(o).acos()}function xc(o){return new this(o).acosh()}function Sc(o,e){return new this(o).plus(e)}function Kc(o){return new this(o).asin()}function Cc(o){return new this(o).asinh()}function Rc(o){return new this(o).atan()}function Lc(o){return new this(o).atanh()}function Oc(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=wt(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?wt(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=wt(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(we(o,e,i,1)),e=wt(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(we(o,e,i,1)),t}function Nc(o){return new this(o).cbrt()}function Mc(o){return H(o=new this(o),o.e+1,2)}function _c(o,e,t){return new this(o).clamp(e,t)}function Vc(o){if(!o||typeof o!="object")throw Error(Wo+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Zt,"rounding",0,8,"toExpNeg",-In,0,"toExpPos",0,In,"maxE",0,In,"minE",-In,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=jr[t]),(n=o[t])!==void 0)if(Xe(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ht+t+": "+n);if(t="crypto",r&&(this[t]=jr[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(Fs);else this[t]=!1;else throw Error(Ht+t+": "+n);return this}function vc(o){return new this(o).cos()}function Fc(o){return new this(o).cosh()}function zs(o){var e,t,n;function r(i){var s,a,c,u=this;if(!(u instanceof r))return new r(i);if(u.constructor=r,_s(i)){u.s=i.s,oe?!i.d||i.e>r.maxE?(u.e=NaN,u.d=null):i.e<r.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>r.maxE?(u.e=NaN,u.d=null):s<r.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return $r(u,i.toString())}else if(c!=="string")throw Error(Ht+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Ds.test(i)?$r(u,i):kc(u,i)}if(r.prototype=M,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=Vc,r.clone=zs,r.isDecimal=_s,r.abs=Ic,r.acos=Bc,r.acosh=xc,r.add=Sc,r.asin=Kc,r.asinh=Cc,r.atan=Rc,r.atanh=Lc,r.atan2=Oc,r.cbrt=Nc,r.ceil=Mc,r.clamp=_c,r.cos=vc,r.cosh=Fc,r.div=Ec,r.exp=Dc,r.floor=Wc,r.hypot=qc,r.ln=Uc,r.log=Gc,r.log10=zc,r.log2=Xc,r.max=Yc,r.min=Qc,r.mod=jc,r.mul=Hc,r.pow=Zc,r.random=$c,r.round=Jc,r.sign=el,r.sin=tl,r.sinh=nl,r.sqrt=ol,r.sub=rl,r.sum=il,r.tan=sl,r.tanh=al,r.trunc=ul,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 r.config(o),r}function Ec(o,e){return new this(o).div(e)}function Dc(o){return new this(o).exp()}function Wc(o){return H(o=new this(o),o.e+1,3)}function qc(){var o,e,t=new this(0);for(oe=!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 oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function _s(o){return o instanceof Wn||o&&o.toStringTag===Es||!1}function Uc(o){return new this(o).ln()}function Gc(o,e){return new this(o).log(e)}function Xc(o){return new this(o).log(2)}function zc(o){return new this(o).log(10)}function Yc(){return Us(this,arguments,"lt")}function Qc(){return Us(this,arguments,"gt")}function jc(o,e){return new this(o).mod(e)}function Hc(o,e){return new this(o).mul(e)}function Zc(o,e){return new this(o).pow(e)}function $c(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:nt(o,1,Zt),n=Math.ceil(o/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(Fs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=ee,n&&o&&(r=Oe(10,ee-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function Jc(o){return H(o=new this(o),o.e+1,this.rounding)}function el(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function tl(o){return new this(o).sin()}function nl(o){return new this(o).sinh()}function ol(o){return new this(o).sqrt()}function rl(o,e){return new this(o).sub(e)}function il(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,H(t,this.precision,this.rounding)}function sl(o){return new this(o).tan()}function al(o){return new this(o).tanh()}function ul(o){return H(o=new this(o),o.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var Wn=M.constructor=zs(jr);Fo=new Wn(Fo);Eo=new Wn(Eo);var V=Wn;import{PublicKey as ri}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as cl}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Ys,SYSVAR_RENT_PUBKEY as ll}from"@solana/web3.js";function A({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var ei=[A({pubkey:cl,isWritable:!1}),A({pubkey:Ys.programId,isWritable:!1}),A({pubkey:ll,isWritable:!1})];function ti({publicKey:o,transformSol:e}){let t=ni(o.toString());if(t instanceof Te)return e&&t.equals(Ne)?$:t;if(e&&t.toString()===Ne.toBase58())return $;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ni(o){try{return new Te(o)}catch{return o}}var Go=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Xo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Te("SysvarRent111111111111111111111111111111111"),oi=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),zo=new Te("Sysvar1nstructions1111111111111111111111111"),Yo=Ys.programId,Ap=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),wp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Pp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),hp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),kp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Tp=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ip=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Bp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),xp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Sp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Kp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),$=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function ut(o){return ti({publicKey:o,transformSol:!0})}import{PublicKey as ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qs}from"@solana/spl-token";var Ct={chainId:101,address:ml.default.toBase58(),programId:Qs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Qs.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var ii=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof ri&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new ri(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?ri.default:ti({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=ii;Ie.WSOL=new ii(F(C({},Me),{mint:Me.address}));import jo from"big.js";import fl from"bn.js";import yl from"decimal.js-light";import dl from"toformat";var pl=dl,qn=pl;var Qo=ue("module/fraction"),si=qn(jo),Un=qn(yl),bl={[0]:Un.ROUND_DOWN,[1]:Un.ROUND_HALF_UP,[2]:Un.ROUND_UP},gl={[0]:jo.roundDown,[1]:jo.roundHalfUp,[2]:jo.roundUp},pe=class{constructor(e,t=new fl(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe(Z(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe(Z(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe(Z(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(Z(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Qo.logWithError(`${e} is not an integer.`),e<=0&&Qo.logWithError(`${e} is not positive.`),Un.set({precision:e+1,rounding:bl[n]});let r=new Un(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Qo.logWithError(`${e} is not an integer.`),e<0&&Qo.logWithError(`${e} is negative.`),si.DP=e,si.RM=gl[n]||1,new si(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var wl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new pe(ai(n.decimals),ai(r.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&wl.logWithError("mul token not equals");let n=super.mul(t);return new rt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var ui=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Ho=ui;Ho.SOL=new ui(Ct);import Pl from"bn.js";var js=new pe(new Pl(100)),$e=class extends pe{toSignificant(e=5,t,n){return this.mul(js).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(js).toFixed(e,t,n)}};var pt=new it(0),Zs=new it(1),Bf=new it(2),xf=new it(3),Sf=new it(5),ci=new it(10),Kf=new it(100),Cf=new it(1e3),Rf=new it(1e4),Hs=9007199254740991;function Z(o){let e=ue("Raydium_parseBigNumberish");if(o instanceof it)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new it(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Hs||o<=-Hs)&&e.logWithError(`BigNumberish number overflow: ${o}`),new it(String(o))):typeof o=="bigint"?new it(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new it(0))}function ai(o){return ci.pow(Z(o))}function Zo(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var kl=ue("Raydium_amount"),Js=qn(hl);function Tl(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):kl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ye=class extends pe{constructor(t,n,r=!0,i){let s=new $o(0),a=ci.pow(new $o(t.decimals));if(r)s=Z(n);else{let c=new $o(0),u=new $o(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Tl(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return Js.DP=this.token.decimals,new Js(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function $s(o){return typeof o=="object"&&o!==null&&![Ie,ye,Il,pe,Bl,rt,$e].some(e=>typeof e=="object"&&o instanceof e)}function ke(o){return typeof o=="string"?ni(o):Array.isArray(o)?o.map(e=>ke(e)):$s(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,ke(t)])):o}import{PublicKey as zn,sendAndConfirmTransaction as pi,Transaction as Yn,TransactionMessage as Qn,VersionedTransaction as jn}from"@solana/web3.js";import Ml from"axios";var v={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",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"};import{PublicKey as ta,ComputeBudgetProgram as ea,Transaction as Jo,TransactionMessage as xl,Keypair as na,VersionedTransaction as oa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sl}from"@solana/spl-token";var Ft=ue("Raydium_txUtil"),ra=1644;function er(o){let e=[],t=[];return o.microLamports&&(e.push(ea.setComputeUnitPrice({microLamports:o.microLamports})),t.push(v.SetComputeUnitPrice)),o.units&&(e.push(ea.setComputeUnitLimit({units:o.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Sn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function tr(o,e){o.length<1&&Ft.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Ft.logWithError(`no signers provided:, ${e.toString()}`);let t=new Jo;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ra}catch{return!1}}async function ia(o,e,t,n=!0){let r=new ta("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new Jo;s.feePayer=r;for(let u of e)tr([...s.instructions,u],[r])||(i.push(s),s=new Jo,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Kl(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ft.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ft.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ft.debug("filteredLog:",c),l.length||Ft.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function sa(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Ft.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Et(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Ft.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(o,e){let[t,n]=ta.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function Kl(o,e,t){let n=[];if(t){let r=await o.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=r.blockhash,u.lastValidBlockHeight=r.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.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 r=>await(await o.simulateTransaction(r)).value))}catch(r){r instanceof Error&&Ft.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function Gn({instructions:o,payer:e,signers:t}){return tr(o,[e,...t])}function Xn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=na.generate().publicKey.toString()}){let i=new xl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new oa(i).serialize()).toString("base64").length<ra}catch{return!1}}var Cl=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function an(o){let e=[];return o.forEach(t=>{t instanceof Jo&&(t.recentBlockhash||(t.recentBlockhash=Sl.toBase58()),t.feePayer||(t.feePayer=na.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof oa&&(n=Cl(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as ua,AddressLookupTableAccount as nr}from"@solana/web3.js";import{PublicKey as aa}from"@solana/web3.js";import{MINT_SIZE as Rl,TOKEN_PROGRAM_ID as Ll,getTransferFeeConfig as Ol,unpackMint as Nl}from"@solana/spl-token";var li=ue("Raydium_accountInfo_util");async function ht(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=mi(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=mi(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&li.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"&&li.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new aa(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&li.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(o,e,t){let n=await ht(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>F(C({},r),{accountInfo:n[i]}))}async function Kn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await _e(o,e.map(c=>({pubkey:ut(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Rl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Nl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Ll,feeConfig:(a=Ol(u))!=null?a:void 0})}return r[aa.default.toBase58()]=r[$.toBase58()],r}async function di({connection:o,address:e}){let t=await ht(o,[...new Set(e.map(r=>r.toString()))].map(r=>new ua(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new nr({key:s,state:nr.deserialize(i.data)});n[s.toString()]=a,or[s.toString()]=a}return n}var or={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new nr({key:new ua("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:nr.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"))})};var rr=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}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 Ml.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}=er(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:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==zn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new Yn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.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 r=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},c=i!=null?i:await Sn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),an([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await pi(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:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions: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 Sn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let P=await pi(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async(g,h)=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((P,k)=>(P.recentBlockhash=f,a[k].length&&P.sign(...a[k]),P));an(g);let h=await this.signAllTransactions(g);if(m){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[P]}),d==null||d([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=d,i=Be(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:or),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new zn(y));let u=await di({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new Qn({payerKey:this.feePayer,recentBlockhash:r?zn.default.toBase58():await Sn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new jn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),an([m]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:P},"confirmed")}return{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:b}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),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),an(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:P,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:P,signature:h},"confirmed"),b.push(h)}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,h=[],P=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||P()},"processed"),this.connection.getSignatureStatus(k)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let P=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(P)}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=Be(u,["computeBudgetConfig"]),r=t?er(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...r.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 zn(b));if(c.length<12&&Gn({instructions:p,payer:this.feePayer,signers:f})||Gn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");Gn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Yn().add(...r.instructions,...c)):s.push(new Yn().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=>i[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=>i[p]).filter(p=>p!==void 0);Gn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Yn().add(...r.instructions,...c)):s.push(new Yn().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))||this.signers.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 Sn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,P)=>{h.recentBlockhash=b,a[P].length&&h.sign(...a[P])}),an(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let P of s){let k=await pi(this.connection,P,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[P]}),p==null||p([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});P.push(B)}return{txIds:P,signedTxs:h}}}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:r=[]}=b,i=Be(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:or),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let h of a)s[h]===void 0&&c.push(new zn(h));let u=await di({connection:this.connection,address:c});for(let[h,P]of Object.entries(u))s[h]=P;let l=t?er(t):{instructions:[],instructionTypes:[]},m=await Sn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,P)=>F(C({},h),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let P=[...f,h],k=t?[...l.instructions,...P]:P;if(f.length<12&&Xn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Xn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&Xn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new Qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new jn(T))}else{let T=new Qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new jn(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=[h]}}),f.length>0){let P=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Xn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new Qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new jn(k))}else{let k=new Qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new jn(k))}y.push(P)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(P=>P.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:P,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),an(p),(S=this.owner)!=null&&S.isKeyPair){if(P){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:q}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:q,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(P){let R=0,I=[],L=async()=>{if(!x[R])return;let q=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:q,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(q,D=>{let J=I.findIndex(G=>G.txId===q);J>-1&&(I[J].status=D.err?"error":"success"),k==null||k([...I]),D.err||L()},"processed"),this.connection.getSignatureStatus(q)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var kt=class{constructor(e){this._owner=e}get publicKey(){return kt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return kt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return kt.isKeyPair(this._owner)}get isPublicKey(){return kt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!kt.isKeyPair(e)}};function mi(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var ca=o=>typeof o=="number";function la(o,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function ma(o,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var da=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),pa=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Zn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Dy=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Wy=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),fi=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),fa=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),qy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ya=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ba=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Uy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Gy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),_l=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),vl=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Fl=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),ga=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Xy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),zy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),El=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Dl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Wl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),$n={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:vl,IDO_PROGRAM_ID_V4:Fl};var ir={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:El,CREATE_CPMM_POOL_AUTH:Dl,CREATE_CPMM_POOL_FEE_ACC:Wl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";function be(o,e,t){return ae([o.toBuffer(),(t!=null?t:Ul).toBuffer(),e.toBuffer()],new ql("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var Jn=1e4;function Pe(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new Tt(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Jn){let c=new Tt(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=eo(o.mul(new Tt(Jn)),new Tt(Jn-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=eo(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt(Jn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=eo(o.mul(new Tt(i.transferFeeBasisPoints)),new Tt(Jn)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Rt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function eo(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Tt(0))?t.add(new Tt(1)):t}var We={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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}",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"},Ab=C({},We);var Aa="ray_tab_hash",yi="ray_req_hash",Gl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Aa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Aa,o)),o},sr=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Be(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(yi)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Gl()}));try{localStorage.setItem(yi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(yi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return sr(F(C({},t),{logCount:o,removeLastLog:!0}))}};var ar=ue("Raydium_Api"),bi=new Map;var ur=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=wa.create({baseURL:this.urlConfigs.BASE_HOST||We.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ar.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ar.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&sr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ar.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&sr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ar.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||We.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||We.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await wa.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||We.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||We.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||We.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||We.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||We.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||We.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||We.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>bi.has(s)?(n.push(bi.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||We.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{bi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ut(t).toBase58(),n&&n!=="undefined"?ut(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||We.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||We.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||We.CHECK_AVAILABILITY)).data}};var cr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Pa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Si,TOKEN_PROGRAM_ID as tn,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as Pm}from"@solana/spl-token";import{PublicKey as gr,SystemProgram as hm}from"@solana/web3.js";var gi=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new rr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(gi(e))}logInfo(...e){this.logger.info(gi(e))}logAndCreateError(...e){let t=gi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as fm,createCloseAccountInstruction as ym,createTransferInstruction as bm,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as gm,SystemProgram as Am}from"@solana/web3.js";import wm from"bn.js";import{PublicKey as Ma,Keypair as lm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mm}from"@solana/spl-token";import dm from"bn.js";import{PublicKey as om}from"@solana/web3.js";import Ba,{isBN as xa}from"bn.js";import{bits as zl,BitStructure as $b,blob as Yl,Blob as Jb,cstr as eg,f32 as tg,f32be as ng,f64 as og,f64be as rg,greedy as ig,Layout as Ql,ns64 as sg,ns64be as ag,nu64 as jl,nu64be as ug,offset as cg,s16 as lg,s16be as mg,s24 as dg,s24be as pg,s32 as Hl,s32be as fg,s40 as yg,s40be as bg,s48 as gg,s48be as Ag,s8 as wg,seq as Zl,struct as Pg,Structure as $l,u16 as Jl,u16be as hg,u24 as kg,u24be as Tg,u32 as em,u32be as Ig,u40 as Bg,u40be as xg,u48 as Sg,u48be as Kg,u8 as tm,UInt as nm,union as Cg,Union as Rg,unionLayoutDiscriminator as Lg,utf8 as Og}from"@solana/buffer-layout";var lr=Ql,ha=$l;var Ai=nm;var ka=tm,Lt=Jl;var wi=em;var Ta=jl;var qe=Hl;var Ia=Zl;var fe=Yl;var Pi=zl;var un=class extends lr{constructor(t,n,r){super(t,r);this.blob=fe(t),this.signed=n}decode(t,n=0){let r=new Ba(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new Ba(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},mr=class extends lr{constructor(t){super(8,t);this._lower=Pi(wi(),!1),this._upper=Pi(wi(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function E(o){return new Ai(1,o)}function ze(o){return new Ai(4,o)}function w(o){return new un(8,!1,o)}function Q(o){return new un(16,!1,o)}function Sa(o){return new un(1,!0,o)}function pr(o){return new un(8,!0,o)}function Ka(o){return new un(16,!0,o)}var dr=class extends lr{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new dr(fe(32),e=>new om(e),e=>e.toBuffer(),o)}function Ue(o){return new dr(ka(),rm,im,o)}function rm(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function im(o){return o?1:0}var hi=class extends ha{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new hi(o,e,t)}function X(o,e,t){let n,r=typeof e=="number"?e:xa(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=xa(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Ia(o,r,t)}var $t=_([K("mint"),K("owner"),w("amount"),ze("delegateOption"),K("delegate"),E("state"),ze("isNativeOption"),w("isNative"),w("delegatedAmount"),ze("closeAuthorityOption"),K("closeAuthority")]);function sm(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function ki(o,...e){if(!sm(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 Ti(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 Ca(o,e){ki(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var yr=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),It=(o,e)=>o<<32-e|o>>>e;var Yg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function am(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Ii(o){return typeof o=="string"&&(o=am(o)),ki(o),o}var fr=class{clone(){return this._cloneInto()}},Qg={}.toString;function Ra(o){let e=n=>o().update(Ii(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function um(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var La=(o,e,t)=>o&e^~o&t,Oa=(o,e,t)=>o&e^o&t^e&t,br=class extends fr{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=yr(this.buffer)}update(e){Ti(this);let{view:t,buffer:n,blockLen:r}=this;e=Ii(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=yr(e);for(;r<=i-s;s+=r)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ti(this),Ca(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;um(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=yr(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var cm=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]),Jt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),en=new Uint32Array(64),Bi=class extends br{constructor(){super(64,32,8,!1),this.A=Jt[0]|0,this.B=Jt[1]|0,this.C=Jt[2]|0,this.D=Jt[3]|0,this.E=Jt[4]|0,this.F=Jt[5]|0,this.G=Jt[6]|0,this.H=Jt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:c}=this;return[e,t,n,r,i,s,a,c]}set(e,t,n,r,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|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)en[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=en[m-15],p=en[m-2],y=It(d,7)^It(d,18)^d>>>3,f=It(p,17)^It(p,19)^p>>>10;en[m]=f+en[m-7]+y+en[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=It(a,6)^It(a,11)^It(a,25),p=l+d+La(a,c,u)+cm[m]+en[m]|0,f=(It(n,2)^It(n,13)^It(n,22))+Oa(n,r,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+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,r,i,s,a,c,u,l)}roundClean(){en.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Na=Ra(()=>new Bi);var mA=ue("Raydium_Util");function _a({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=$t.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:be(o,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ma.default,amount:new dm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ye({fromPublicKey:o,programId:e=mm}){let t=lm.generate().publicKey.toBase58().slice(0,32);return{publicKey:pm(o,t,e),seed:t}}function pm(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=Na(n);return new Ma(r)}function xi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Cn}=o;return fm(t,e,n,r)}function Ot(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Cn}=o;return ym(e,t,r,n,i)}async function Dt(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption($t.span,n),c=Z(t).add(new wm(a)),u=Ye({fromPublicKey:r,programId:Cn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Am.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:$t.span,programId:Cn}),xi({mint:new gm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Cn})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:r,owner:i})]}}function to({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Cn}){return bm(o,e,t,BigInt(String(n)),r,i)}var no=class extends xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}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 be(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:tn},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pm},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=_a({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,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=tn,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!r||r&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new gr(t.tokenProgram||tn),m=this.getAssociatedTokenAccount(n,new gr(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,P)=>h.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=Si(s,m,s,n,l);if(u){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(P.owner.equals(l)&&Rn.decode(P.data).mint.equals(n)&&Rn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(v.CreateATA);if(n.equals($)&&r.amount){let P=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...P.instructions||[]),p.endInstructions.push(...P.endInstructions||[]),p.instructionTypes.push(...P.instructionTypes||[]),p.endInstructionTypes.push(...P.endInstructionTypes||[]),r.amount&&(p.instructions.push(to({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:tn})),p.instructionTypes.push(v.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ye({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),k=hm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:P+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(k,xi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=tn,autoUnwrapWSOLToSOL:r}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Si(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=u}return r&&$.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=tn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new gr($).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=Si(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(tn)&&Rn.decode(f.data).mint.equals(i)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[v.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=tn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new gr($))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Be(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Be(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as qm}from"@solana/spl-token";import{PublicKey as he,SystemProgram as Um}from"@solana/web3.js";import{PublicKey as qa}from"@solana/web3.js";var Ki=_([E("instruction")]),Ci=_([E("instruction")]),km=_([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Q("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Tm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Q("perShareReward"),w("lastSlot"),w("perSlotReward")]),Im=_([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Q("perShareRewardA"),w("perSlotRewardA"),E("option"),K("rewardVaultB"),fe(7),w("totalRewardB"),Q("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),Bm=_([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Q("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(km,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Va=new Proxy(Tm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),va=new Proxy(Im,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),oo=new Proxy(Bm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(nn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),xm=_([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ri=_([E("instruction"),w("nonce"),X(xm,5,"rewardTimeInfo")]),Li=_([E("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Oi=_([E("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),UA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),ro=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),GA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),Fa=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),2,"rewardDebts"),X(w(),17)]),Ea=_([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Q(),5,"rewardDebts"),X(w(),16)]),Je=_([E("instruction"),w("amount")]),Sm=_([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Sa("digitShift"),X(E(),7,"reserved1"),X(w(),7,"reserved2")]),Da=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(Sm,4,"votingMints"),pr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(w(),11,"reserved3")]),Km=_([pr("startTime"),pr("endTime"),E("kind"),X(E(),15,"reserved")]),Cm=_([X(Km,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Ue("isUsed"),Ue("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),Wa=_([fe(8),K("voterAuthority"),K("registrar"),X(Cm,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var Ua=new qa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ga=new qa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Xa={3:Va,5:va,6:oo},za={3:ro,5:Fa,6:Ea},Ni=o=>[3,5,6].indexOf(o)!==-1,Mi=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},nn={"Standard SPL":0,"Option tokens":1},ft={[da.toString()]:3,[pa.toString()]:5,[Zn.toString()]:6,[ir.FarmV3.toString()]:3,[ir.FarmV5.toString()]:5,[ir.FarmV6.toString()]:6};import{PublicKey as ie,SystemProgram as cn,SYSVAR_RENT_PUBKEY as Om,SYSVAR_CLOCK_PUBKEY as ao,TransactionInstruction as ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Nm,TOKEN_PROGRAM_ID as ct,ASSOCIATED_TOKEN_PROGRAM_ID as Mm}from"@solana/spl-token";import Ar from"bn.js";function _i(o,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function Vi(o,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function vi(o,e){return ae([e.toBuffer()],o)}function Fi(o,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function Ei(o,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function Di(o,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import st from"bn.js";var io=ue("Raydium.farm.util");function so({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function Qe({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var Ya=({programId:o,poolId:e})=>ae([e.toBuffer()],o);function Qa(o){return{isSet:new st(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(nn[o.rewardType])}}function Wi(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function Ln(o){let e=za[o];return e||io.logWithError("invalid version",o),e}function Rm(o){let e=Xa[o];return e||io.logWithError("invalid version",o),e}function Lm(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new st(t)))return o;let r=new st(t).sub(o.lastSlot);o.lastSlot=new st(t);for(let i of o.rewardInfos){if(e.amount.eq(new st(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new st(10).pow(new st(o.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(o.version===6)for(let r of o.rewardInfos){if(r.rewardState.eq(new st(0)))continue;let i=st.min(new st(n),r.rewardEndTime);if(r.rewardOpenTime.gte(i))continue;let a=i.sub(r.rewardLastUpdateTime).mul(r.rewardPerSecond),c=r.totalReward.sub(r.totalRewardEmissioned);c.lt(a)?(a=c,r.rewardLastUpdateTime=r.rewardLastUpdateTime.add(c.div(r.rewardPerSecond))):r.rewardLastUpdateTime=i,!e.amount.eq(new st(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function pw({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new st(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!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:Qe({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await _e(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let h=Rm(p);(!b||!b.data||b.data.length!==h.span)&&io.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==$t.span)&&io.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=$t.decode(b.data);else if(y==="ledger"){let h=Ln(p);b&&b.data&&(b.data.length!==h.span&&io.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Lm(u[d].state,u[d].lpVault,m,r));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 st(9)):a.pow(new st(15)),b=p.rewardInfos.map((g,h)=>{let P=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=F(C({},u[d].wrapped),{pendingRewards:b})}return u}function fw(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>la(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ma(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 qi(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=Da.decode(r.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=Wa.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var _m=ue("Raydium_farm_instruction"),uo={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 wr(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||_m.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ki.span);Ki.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:Om,isWritable:!1})];return{instruction:new ve({programId:r,keys:c,data:a}),instructionType:v.FarmV3CreateLedger}}function ja(o){var n;let e=Buffer.alloc(Ri.span);Ri.encode({instruction:0,nonce:new Ar(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...ei,A({pubkey:o.farmId}),A({pubkey:o.farmAuthority,isWritable:!1}),A({pubkey:o.lpVault}),A({pubkey:o.lpMint,isWritable:!1}),A({pubkey:o.lockVault}),A({pubkey:o.lockMint,isWritable:!1}),A({pubkey:(n=o.lockUserAccount)!=null?n:Ne}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(A({pubkey:r.rewardMint,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}));return{instruction:new ve({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function Ha(o){let e=Buffer.alloc(Ci.span);Ci.encode({instruction:5},e);let t=[A({pubkey:ct,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.lpVault,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new ve({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Vm(o,e,t,n,r,i,s,a,c,u,l,m,d){let p=_([E("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ct,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:zo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...uo.voterStakeRegistryDeposit,...f]);return new ve({keys:y,programId:o,data:b})}function vm(o,e,t,n){let r=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([...uo.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new ve({keys:i,programId:o,data:a})}function Fm(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([E("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ct,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:zo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...uo.voterStakeRegistryWithdraw,...g]);return new ve({keys:b,programId:o,data:h})}function Em(o,e,t,n,r,i){let s=_([E("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new ve({keys:a,programId:o,data:c})}function Dm(o,e,t,n,r,i,s,a){let c=_([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...uo.voterStakeRegistryCreateVoter,...l]);return new ve({keys:u,programId:o,data:m})}function Wm(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([E("depositEntryIndex"),E("kind"),E("option"),w("startTs"),ze("periods"),Ue("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Mm,isSigner:!1,isWritable:!1},{pubkey:ot,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([...uo.voterStakeRegistryCreateDepositEntry,...y]);return new ve({keys:p,programId:o,data:f})}async function Lw({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=_i(n,r,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=ro.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Ar(0)))throw Error("user do not has new stake amount");let y=Vi(e,a).publicKey,f=vi(e,a).publicKey,{publicKey:b,nonce:g}=Fi(n,u,s),h=be(b,y,c).publicKey,{publicKey:P,nonce:k}=Ei(n,u,s),B=Di(t,r,i,s).publicKey,T=[],S=be(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Nm(s,S,s,y)),await o.getAccountInfo(b)===null){let q=Em(t,r,s,i,s,B);T.push(q,Dm(n,u,b,P,s,s,g,k))}let{index:I,isInit:L}=await qi(o,u,b,y);return L||T.push(Wm(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(Vm(n,u,b,h,S,s,l,a,y,f,e,I,p),vm(n,u,b,P)),T}async function Ow({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=_i(n,r,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=ro.decode(m.data);if(d.voteLockedBalance.eq(new Ar(0)))throw Error("user has vote locked balance = 0");let p=Vi(e,a).publicKey,y=vi(e,a).publicKey,{publicKey:f}=Fi(n,u,s),b=be(f,p,c).publicKey,{publicKey:g}=Ei(n,u,s),h=Di(t,r,i,s).publicKey,P=[],{index:k,isInit:B}=await qi(o,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(Fm(n,u,f,s,h,g,b,be(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),P}function Ui({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Li.span);Li.encode({instruction:3,rewardReopenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardPerSecond:Z(r.perSecond)},i);let s=[A({pubkey:ct,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new ve({programId:n.programId,keys:s,data:i})}function Gi({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Oi.span);Oi.encode({instruction:4,isSet:new Ar(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(nn[r.rewardType])},i);let s=[...ei,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:r.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new ve({programId:t.programId,keys:s,data:i})}function Nw(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new ie(e.programId),new ie(e.id)],d=Qe({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(Je.span);Je.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:ct,isWritable:!1}),...u?[A({pubkey:cn.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r})]:[A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r}),A({pubkey:new ie(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:ao,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(A({pubkey:i[f]})),y.push(A({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new ve({programId:l,keys:y,data:p})}function co(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ie(e.programId),new ie(e.id)],u=Qe({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:2,amount:Z(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new ve({programId:a,keys:m,data:l})}function lo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:12,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:ao,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function mo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:ao,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function Za(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:10,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:ao,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function $a(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:ao,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function Ja(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ie(e.programId),new ie(e.id)],u=Qe({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:1,amount:Z(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new ve({programId:a,keys:m,data:l})}var po=class extends xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Wi(F(C({},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:r=Zn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new he(e.lpMint.address),lockInfo:{lockMint:Ua,lockVault:Ga},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Ye({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(oo.span);c.addInstruction({instructions:[Um.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:oo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ya({programId:new he(a.programId),poolId:l.publicKey}),y=so({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(nn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(Qa(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Ne)?new he(Me.address):B.mint;b.push({rewardMint:x,rewardVault:so({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new he(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:k}=ja({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:[P],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((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(Ne)?new he(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new he(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:Ne,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:[Ui({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((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(Ne)?new he(Me.address):m.mint,p=a.rewardInfos.findIndex(P=>new he(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ne,{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 h=Ui({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=r.mint.equals(Ne)?new he(Me.address):r.mint,m=so({programId:new he(n.programId),poolId:new he(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[Gi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Ne)?new he(Me.address):l.mint,d=so({programId:new he(n.programId),poolId:new he(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=Gi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,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=ft[d];Ni(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new he(n.programId),new he(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Qe({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let P={};for(let D of this.scope.account.tokenAccounts)if(a){let J=be(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&J.equals(D.publicKey)&&(P[D.mint.toString()]=D.publicKey)}else P[D.mint.toString()]=D.publicKey;let k=b.lpMint,B=P[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let D of m){let J=s&&D.mint.address===$.toString(),G=P[D.mint.address];if(!G){let{account:W,instructionParams:Ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new he(D.mint.address),notUseTokenAccount:J,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!J,associatedOnly:J?!1:a,checkCreateATAOwner:c});G=W,Ze&&h.addInstruction(Ze)}P[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==Zn.toString()&&!S){let{instruction:D,instructionType:J}=wr({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[J]})}let R=Mi({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new he(D))},L=p===6?Ja(I):p===5?$a(I):Za(I),q={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[q[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,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=ft[n.programId];Ni(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 R of this.scope.account.tokenAccounts)if(c){let I=be(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Qe({programId:new he(n.programId),poolId:new he(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);I||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I}),Ln(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===$.toString(),P=b[g.toString()];if(!P){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new he(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});P=R,I&&f.addInstruction(I)}b[g.toString()]=P;let k=[];for(let R of d){let I=s&&R.mint.address===$.toString(),L=b[R.mint.address];if(!L){let{account:q,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new he(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:c,checkCreateATAOwner:u});L=q,D&&f.addInstruction(D)}b[R.mint.address]=L,k.push(L)}let B=Mi({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new he(R))},S=p===6?co(T):p===5?lo(T):mo(T),x={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new he(Me.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ne,u=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Wi(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new V(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:[qm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ha({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=be(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(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,P=ft[f],k=b.address,B=n&&k===$.toString(),T=m[k];if(!T){let{account:q,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new he(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=q,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let q of g){let D=n&&q.mint.address===$.toString(),J=m[q.mint.address];if(!J){let{account:G,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:q.mint.programId,mint:new he(q.mint.address),notUseTokenAccount:D,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:i,checkCreateATAOwner:s});J=G,W&&l.addInstruction(W)}m[q.mint.address]=J,S.push(J)}let x=p[h],R={amount:pt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(q=>new he(q))},I=P===6?co(R):P===5?lo(R):mo(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as Le}from"@solana/web3.js";import{AccountLayout as Rd,NATIVE_MINT as vu,TOKEN_PROGRAM_ID as Lr}from"@solana/spl-token";var oP=_([ze("mintAuthorityOption"),K("mintAuthority"),w("supply"),E("decimals"),E("isInitialized"),ze("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Gm}from"@solana/web3.js";import{MintLayout as eu,TOKEN_PROGRAM_ID as Xm}from"@solana/spl-token";var pP=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new Gm(e));return!t||t.data.length!==eu.span?void 0:eu.decode(t.data)},fP=({mint:o,decimals:e,programId:t=Xm,logoURI:n="",priority:r=3})=>{let i=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:r}},Pr=o=>new Ie({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),fo=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Be(i,["amount","isRaw","name"]);return new ye(new Ie({mint:ut(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function yP(o){return o.address===Ct.address?Me:o}function bP(o){return o.address===Me.address?Ct:o}var et=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Be(i,["address","programId","decimals"]);return C({chainId:101,address:ut(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},on=o=>o?F(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as ge,TransactionInstruction as Wt,SystemProgram as uu,SYSVAR_RENT_PUBKEY as sd}from"@solana/web3.js";var Xi=_([E("instruction"),w("amountIn"),w("minAmountOut")]),zi=_([E("instruction"),w("maxAmountIn"),w("amountOut")]),KP=_([E("instruction"),E("nonce")]),Yi=_([E("instruction"),E("nonce"),w("startTime")]),yo=_([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("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"),w("lpReserve"),X(w(),3,"padding")]),zm=_([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Qi=_([E("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),ji=_([E("instruction"),w("amountIn")]),CP={4:yo,5:zm},tu=_([w("fee")]);import{PublicKey as Ym}from"@solana/web3.js";var Nn=new Ym("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),mn=5e4,Qm=_([w("x"),w("y"),w("price")]),jm=_([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(Qm,mn,"DataElement")]);function Hm(o,e){return[0,mn-2]}function Zm(o){return[0,mn-2]}function $m(o){return[0,mn-2]}function Jm(o,e,t){let[n,r]=Hm(e,t),i=n,s=r,a=0,c=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=mn-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];i=a+1}}return[a,a,!1]}function Hi(o,e,t){let[n,r,i]=Jm(o,e,t);if(!i)return 0;if(n===r){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[r].x,u=o.DataElement[r].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 ln(o,e,t){return e*o.multiplier/t}function nu(o,e,t){return e*t/o.multiplier}function ed(o,e){let[t,n]=Zm(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>mn-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)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 td(o,e){let[t,n]=$m(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=mn-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)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 ou(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=ed(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].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-(r-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function nd(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=td(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].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-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function od(o,e){let t=ou(o,e,0,!1);return t[3]?t[0]:0}function ru(o,e,t,n){let r=Hi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!0,[u,l,m,d]=ou(o,i,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return nu(o,p,r)}}function iu(o,e,t,n){let r=Hi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!1,[u,l,m,d]=nd(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=i-l;return nu(o,p,r)}}function rd(o){let e=jm.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 su(o,e,t,n){let r=od(o,ln(o,e,Hi(o,e,t)))/o.multiplier;return n?r:1/r}var On=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(Nn);e&&(this._layoutData=rd(e==null?void 0:e.data))}}};var au=ue("Raydium_liquidity_instruction");function cu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Qi.span);Qi.encode({instruction:3,baseAmountIn:Z(r),quoteAmountIn:Z(i),fixedSide:s==="base"?pt:Zs},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:new ge(e.id)}),A({pubkey:new ge(t.authority),isWritable:!1}),A({pubkey:new ge(t.openOrders),isWritable:!1}),A({pubkey:new ge(t.targetOrders)}),A({pubkey:new ge(e.lpMint.address)}),A({pubkey:new ge(t.vault.A)}),A({pubkey:new ge(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Nn})),c.push(A({pubkey:new ge(e.marketId),isWritable:!1}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:new ge(t.marketEventQueue),isWritable:!1})),new Wt({programId:new ge(e.programId),keys:c,data:a})}function Zi(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(ji.span);ji.encode({instruction:4,amountIn:Z(r)},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.mintLp.address}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return s===5?c.push(A({pubkey:Nn})):(c.push(A({pubkey:i.id})),c.push(A({pubkey:i.id}))),c.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function lu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,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:h,openTime:P,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=_([E("instruction"),E("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:id,isSigner:!1,isWritable:!1},{pubkey:uu.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:P,coinAmount:k,pcAmount:B},I),{instruction:new Wt({keys:R,programId:o,data:I}),instructionType:v.AmmV4CreatePool}}function XP(o){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new ge(o.id),isWritable:!1}),A({pubkey:new ge(o.authority),isWritable:!1}),A({pubkey:new ge(o.openOrders),isWritable:!1}),A({pubkey:new ge(o.vault.A),isWritable:!1}),A({pubkey:new ge(o.vault.B),isWritable:!1}),A({pubkey:new ge(o.mintLp.address),isWritable:!1}),A({pubkey:new ge(o.marketId),isWritable:!1}),A({pubkey:new ge(o.marketEventQueue),isWritable:!1})];return new Wt({programId:new ge(o.programId),keys:n,data:t})}function ad({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=ke(o),s=Buffer.alloc(Xi.span);Xi.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return r===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),r===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function ud({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=ke(o),s=Buffer.alloc(zi.span);zi.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return r===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return ad(F(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return ud(F(C({},a),{maxAmountIn:r,amountOut:i}),t);au.logWithError("invalid params","params",o)}throw au.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function zP({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Yi.span);Yi.encode({instruction:0,nonce:5,startTime:Z(t)},n);let r=ke(o),i=[A({pubkey:Mn,isWritable:!1}),A({pubkey:uu.programId,isWritable:!1}),A({pubkey:sd,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.openOrders}),A({pubkey:r.mintLp.address}),A({pubkey:r.mintA.address,isWritable:!1}),A({pubkey:r.mintB.address,isWritable:!1}),A({pubkey:r.vault.A,isWritable:!1}),A({pubkey:r.vault.B,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:r.id,isWritable:!1}),A({pubkey:r.marketProgramId,isWritable:!1}),A({pubkey:r.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Wt({programId:r.programId,keys:i,data:n})}function mu({poolKeys:o}){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new ge(o.id),isWritable:!1}),A({pubkey:new ge(o.authority),isWritable:!1}),A({pubkey:new ge(o.openOrders),isWritable:!1}),A({pubkey:new ge(o.vault.A),isWritable:!1}),A({pubkey:new ge(o.vault.B),isWritable:!1}),A({pubkey:new ge(o.mintLp.address),isWritable:!1}),A({pubkey:new ge(o.marketId),isWritable:!1}),A({pubkey:new ge(o.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new ge(o.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ge,TOKEN_2022_PROGRAM_ID as rn,ASSOCIATED_TOKEN_PROGRAM_ID as Cu}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as xt,SystemProgram as _n,Keypair as ss}from"@solana/web3.js";import Ru from"bn.js";import wd from"bn.js";function du(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function QP(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function jP(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function kr(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function $i(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Ji(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function bo(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function pu(o,e){return bo(o,e)?null:$i(o,e)}function fu(o,e){return bo(o,e)?null:Ji(o,e)}var cd=Buffer.from("amm_config","utf8"),ld=Buffer.from("pool","utf8"),md=Buffer.from("pool_vault","utf8"),dd=Buffer.from("pool_reward_vault","utf8"),yu=Buffer.from("position","utf8"),pd=Buffer.from("tick_array","utf8"),fd=Buffer.from("operation","utf8"),yd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function JP(o,e){return ae([cd,du(e)],o)}function bu(o,e,t,n){return ae([ld,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function es(o,e,t){return ae([md,e.toBuffer(),t.toBuffer()],o)}function gu(o,e,t){return ae([dd,e.toBuffer(),t.toBuffer()],o)}function Ae(o,e,t){return ae([pd,e.toBuffer(),kr(t)],o)}function dn(o,e,t,n){return ae([yu,e.toBuffer(),kr(t),kr(n)],o)}function yt(o,e){return ae([yu,e.toBuffer()],o)}function Tr(o){return ae([Buffer.from("metadata","utf8"),xn.toBuffer(),o.toBuffer()],xn)}function go(o){return ae([fd],o)}function lt(o,e){return ae([yd,e.toBuffer()],o)}import bt from"bn.js";var de=new bt(0),mt=new bt(1),qt=new bt(-1),dt=new bt(1).shln(64),Ir=new bt(1).shln(128),ts=dt.sub(mt),Ao=64,Au=Ir.subn(1),je=-443636,tt=-je,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),Br=new bt("4295048017"),xr=new bt("79226673521066979257578248090"),wu=16,Pu="59543866431248",hu="184467440737095516",ku="15793534762490258745",Sr=new bt(10).pow(new bt(6)),bd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(bd||{}),nh={[500]:10,[3e3]:60,[1e4]:200},oh={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,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},Tu={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:[]},rh=new bt("18446744073700000000");var gd=15,le=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(r,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(gd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=Ae(t,n,l[p]);c.push(y)}let m=(await ht(e,c)).map(p=>p!==null?wo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,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,r,i){let s=Math.floor(e/le.tickCount(t)),a=n?j.searchLowBitFromStart(r,i,s-1,1,t):j.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=Ve-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<Ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=Ae(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=j.getTickArrayStartIndexByTick(r,i),c=Math.floor((r-a)/i),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<Ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Ae(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(j.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=j.getTickArrayStartIndexByTick(je,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ve*e}};import re from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ke from"bn.js";var ns=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*Ve*pn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(r){let l=e.shln(1024-u-1),m=pu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=fu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},Po=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=je)throw Error(`extensionTickBoundary check error: ${n}, ${je}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let c=j.mergeTickArrayBitmap(e).shln(pn-1-a),u=bo(512,c)?null:$i(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=bo(512,c)?null:Ji(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),r=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(r=pn-r),r}};import _t from"bn.js";var ho=class{static getfeeGrowthInside(e,t,n){let r=new _t(0),i=new _t(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new _t(0),a=new _t(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=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,h,P;let a=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Pe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Pe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Pe(new _t(new V(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),Pe(new _t(new V(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Iu}from"@solana/spl-token";var Ce=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,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}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){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}=Ae(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Po.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Ae(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Ae(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/le.tickCount(e.tickSpacing)),r=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=Po.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<je||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||r.eq(de)){s.push(p);continue}let y=new Ke(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,dt),P=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<je&&(n=le.getArrayStartIndex(je,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await _e(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=xu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Ae(c.programId,c.id,m);i.push({pubkey:d}),r[d.toString()]=c.id}}let s=await _e(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=r[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=wo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!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(yt(p,d).publicKey);let l=await ht(t,u,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:P,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ke(0)})),leverage:B,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.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(i){let d=Object.values(m),p=await ht(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=wo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[P].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await ho.GetPositionFees(f,g,T,S),I=await ho.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ke(0))?x:new Ke(0),g.tokenFeeAmountB=R.gte(new Ke(0))?R:new Ke(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Ke(0))?I[L]:new Ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new V(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 V(0))?u=l?Nt.add(new Ke(1)):Mt.sub(new Ke(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Pe(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((q=p.fee)!=null?q:de),u,c),P=Pe(f,d,r,!1),k=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new V(1).div(k),T=f.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=Pe(T,d,r,!1),x=l?e.currentPrice:new V(1).div(e.currentPrice),R=new V(B).sub(x).abs(),I=x,L=new $e(new V(R).mul(10**15).toFixed(0),new V(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Rt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=r.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(C({},u),{mint:u.address,isToken2022:u.programId===Iu.toBase58()})),new Ie(F(C({},l),{mint:l.address,isToken2022:l.programId===Iu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=F(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=F(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),L=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:h.mul(new V(10**(20+d.decimals))).toFixed(0)}),q=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:P.mul(new V(10**(20+d.decimals))).toFixed(0)}),D=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:q,priceImpact:k,fee:D,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[ut(e.mintA.address).toString()],d=r[ut(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 V(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:P}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new V(h.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(P.toString()).div(new V(10).pow(y)).mul(d.value)),S=new V(k.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(B.toString()).div(new V(10).pow(y)).mul(d.value)),x=new V(1).div(T.add(S)),I=new V(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,q=e.rewardDefaultInfos.map(D=>{var W,Ze;let J=D.mint.decimals,G=r[D.mint.address];return c<((W=D.startTime)!=null?W:0)||c>((Ze=D.endTime)!=null?Ze:0)||!D.perSecond||!G||J===void 0?0:new V(G.value).mul(new V(D.perSecond).mul(L)).div(new V(10).pow(J)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:q,apr:I+q.reduce((D,J)=>D+J,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,h;let l=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=Pe(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ke(new V(y.amount.sub((h=y.fee)!=null?h:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ke(0);else if(l.lte(d)){let P=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?P:k}else b=t?new Ke(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ce.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,h,P;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new V(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Pe(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Pe(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Pe(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),Pe(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new Bt(c.id));(await ht(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=yn.decode(c.data))});let s=t.map(c=>lt(new Bt(c.programId),new Bt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new Bt(u.id),version:6,programId:new Bt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new Bt(u.config.id),fundOwner:""}),currentPrice:new V(u.price),exBitmapInfo:a[lt(new Bt(u.programId),new Bt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}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 Uh({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var P,k,B,T;let[u,l,m,d]=e<t?[e,t,n,r]:[t,e,r,n],p=te.priceToSqrtPriceX64(new V(o.price),o.mintA.decimals,o.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[Pe(m,(P=o.mintA.extensions)==null?void 0:P.feeConfig,a,!c),Pe(d,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var os={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Bu(o){return F(C({},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,config:F(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(de)||(i=i.add(mt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(mt)).div(n)}static x64ToDecimal(e,t){return new V(e.toString()).div(V.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(V.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Fe(o,e){return rs(o.mul(e),64,256)}function Ad(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function rs(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 ne.x64ToDecimal(e).pow(2).mul(V.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(V.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(de))return e;let i=t.shln(Ao);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,mt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(Ao);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,mt,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<je||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Fe(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Fe(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Fe(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Fe(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Fe(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Fe(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Fe(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Fe(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Fe(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Fe(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Fe(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Fe(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Fe(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Fe(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Fe(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Fe(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Fe(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Fe(n,new re("37481735321082"))),e>0&&(n=Au.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Nt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),r=Ad(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<wu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=r.add(u).mul(new re(Pu)),d=rs(m.sub(new re(hu)),64,128).toNumber(),p=rs(m.add(new re(ku)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},bn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=bn.getTickWithPriceAndTickspacing(e,t,n,r),s=te.getSqrtPriceX64FromTick(i);return te.sqrtPriceX64ToPrice(s,n,r)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ao),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),mt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),dt):ne.mulDivFloor(n,t.sub(e),dt)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?ne.mulDivRoundingUp(a,mt,ts):a.shrn(Ao)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,ts,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,r,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,r,i),a=ce.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new re(new V(c.toString()).mul(l).toFixed(0)),d=new re(new V(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,P,k,B;let u=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,r,s),[y,f]=[Pe(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),Pe(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[Pe(new re(new V(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),Pe(new re(new V(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Rt(y.expirationTime,f.expirationTime)}}},fn=class{static swapCompute(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(mt):Mt.sub(mt)),s){if(y.lt(Nt))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(Mt))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(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new re(0)},h=p,P=n[p],k=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ce.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,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")}h=L.nextStartIndex;let{publicKey:q}=Ae(e,t,h);R=q,P=n[h];try{x=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<je?T.tickNext=je:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,I,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=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&P.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(Ae(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),c=r.gte(de);if(c){let l=ne.mulDivFloor(r,Sr.sub(new re(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,r.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(r.mul(qt))&&(s.amountOut=r.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new re(i),Sr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ve=60,pn=512,j=class{static getTickArrayAddressByTick(e,t,n,r){let i=j.getTickArrayStartIndexByTick(n,r),{publicKey:s}=Ae(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Ve)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ve,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Ve,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ve:e+t*Ve}static mergeTickArrayBitmap(e){let t=new wd(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*Ve));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=Ae(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,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.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===r)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.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===r)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<je||e>tt}static nextInitTick(e,t,n,r,i){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ve;){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 r=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}};var Su=_([fe(8),E("bump"),Lt("index"),K(""),ze("protocolFeeRate"),ze("tradeFeeRate"),Lt("tickSpacing"),X(w(),8,"")]),Pd=_([ze("blockTimestamp"),Q("sqrtPriceX64"),Q("cumulativeTimePriceX64"),X(Q(),1,"")]),is=_([fe(8),Ue("initialized"),K("poolId"),X(Pd,1e3,"observations"),X(Q(),5,"")]),hd=_([E("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Q("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Q("rewardGrowthGlobalX64")]),yn=_([fe(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Lt("tickSpacing"),Q("liquidity"),Q("sqrtPriceX64"),qe("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Q("feeGrowthGlobalX64A"),Q("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Q("swapInAmountTokenA"),Q("swapOutAmountTokenB"),Q("swapInAmountTokenB"),Q("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(hd,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),kd=_([Q("growthInsideLastX64"),w("rewardAmountOwed")]),Kr=_([fe(8),E("bump"),K("nftMint"),K("poolId"),qe("tickLower"),qe("tickUpper"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(kd,3,"rewardInfos"),X(w(),8,"")]),pk=_([fe(8),E("bump"),K("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Q(),3,"rewardGrowthInside"),X(w(),8,"")]),Td=_([qe("tick"),Ka("liquidityNet"),Q("liquidityGross"),Q("feeGrowthOutsideX64A"),Q("feeGrowthOutsideX64B"),X(Q(),3,"rewardGrowthsOutsideX64"),X(ze(),13,"")]),wo=_([fe(8),K("poolId"),qe("startTickIndex"),X(Td,Ve,"ticks"),E("initializedTickCount"),X(E(),115,"")]),Ku=_([fe(329),X(K(),100,"whitelistMints")]),xu=_([fe(8),K("poolId"),X(X(w(),8),ns,"positiveTickArrayBitmap"),X(X(w(),8),ns,"negativeTickArrayBitmap")]);var Lu=ue("Raydium_Clmm"),St={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]},Se=class{static createPoolInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([Q("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,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:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=Ye({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[_n.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(is.span),space:is.span,programId:n})],{publicKey:f}=bu(n,a,d,p),{publicKey:b}=es(n,f,d),{publicKey:g}=es(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||Ge),p,g,new U(s.programId||Ge),lt(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),Ue("withMetadata"),E("optionBaseFlag"),Ue("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,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:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],J=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,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 x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Ae(d,p,f),{publicKey:h}=Ae(d,p,b),{publicKey:P}=be(n.wallet,y,Ge),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,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 x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Ae(d,p,f),{publicKey:h}=Ae(d,p,b),{publicKey:P}=be(n.wallet,y,Ge),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),Ue("withMetadata"),E("optionBaseFlag"),Ue("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,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:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],J=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Ru(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=ss.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Ae(p,y,f),{publicKey:h}=Ae(p,y,b),{publicKey:P}=be(n.wallet,m,Ge),{publicKey:k}=Tr(m),{publicKey:B}=yt(p,m),{publicKey:T}=dn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...St.closePosition,...c]);return new xt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=be(n.wallet,r.nftMint,Ge),{publicKey:a}=yt(i,r.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),Ue("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Ae(c,u,l),{publicKey:p}=Ae(c,u,m),{publicKey:y}=be(r.wallet,n.nftMint,Ge),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Ae(c,u,l),{publicKey:p}=Ae(c,u,m),{publicKey:y}=be(r.wallet,n.nftMint,Ge),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),Ue("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:new Ru(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([Q("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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:Ge,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ae(u,l,m),{publicKey:y}=Ae(u,l,d),{publicKey:f}=be(r.wallet,n.nftMint,c),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=dn(u,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let P=[];return P.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:P,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=_([w("amount"),w("otherAmountThreshold"),Q("sqrtPriceLimitX64"),Ue("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,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:Ge,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...St.swap,...B]);return new xt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,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===i.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([w("openTime"),w("endTime"),Q("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=gu(i,s,r.mint).publicKey,c=go(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([E("rewardIndex"),Q("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:rn,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:Z(l),endTime:Z(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,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===r.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)&&Lu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=go(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=_([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:Go,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,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===r.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Lu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,r,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:c}){let[u,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(u,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,c,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Sd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kd}from"@solana/spl-token";import{PublicKey as Bd}from"@solana/web3.js";import Ou from"bn.js";var Nu=new Ou(25),Mu=new Ou(1e4),Id={4:3,5:3};var xd=ue("Raydium_liquidity_serum");function _u({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Bd.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw xd.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import ko from"bn.js";function Cr({programId:o}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function gn({name:o,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Cd({programId:o,marketId:e}){let{publicKey:t}=ae([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function cs({programId:o}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Vu({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=gn({name:"amm_associated_seed",programId:a,marketId:t}),l=gn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=cs({programId:a}),p=gn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=gn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=gn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Cd({programId:a,marketId:t}),g=gn({name:"target_associated_seed",programId:a,marketId:t}),h=gn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=_u({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:Sd.default,configId:Cr({programId:a})}}var as;async function Xk({connection:o,poolKeysList:e,config:t}){as||(as=new On({connection:o}),await as.initStableModelLayout());let n=e.map(s=>mu({poolKeys:s}));return(await ia(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=sa(s,"GetPoolData"),c=new ko(Et(a,"status")),u=Number(Et(a,"coin_decimals")),l=Number(Et(a,"pc_decimals")),m=Number(Et(a,"lp_decimals")),d=new ko(Et(a,"pool_coin_amount")),p=new ko(Et(a,"pool_pc_amount")),y=new ko(Et(a,"pool_lp_supply")),f="0";try{f=Et(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new ko(f)}})}var us={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Rr=o=>{let e={},t=Kd.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:et({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:et({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new V(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new V(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new V(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:us,week:us,month:us,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Cr({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import at from"bn.js";var To=class extends xe{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new at(new V(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new at(new V(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new at(new V(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new at(new V(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=pt;s.isZero()||(d=m==="base"?Zo(s.mul(u),c):Zo(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Zo(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new $e(new at(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Le(n.lpMint.address)}),P=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(P.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=P,[I,L]=k,[q,D]=B,J=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Vt=await m.handleTokenAccount({side:"in",amount:q,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:W}=Vt,Ze=Be(Vt,["tokenAccount"]);G.addInstruction(Ze);let Tn=await m.handleTokenAccount({side:"in",amount:D,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:hn}=Tn,sn=Be(Tn,["tokenAccount"]);G.addInstruction(sn);let _o=await m.handleTokenAccount({side:"out",amount:0,mint:new Le(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:zt}=_o,kn=Be(_o,["tokenAccount"]);return G.addInstruction(kn),G.addInstruction({instructions:[cu({poolInfo:n,poolKeys:J,userKeys:{baseTokenAccount:W,quoteTokenAccount:hn,lpTokenAccount:zt,owner:this.scope.ownerPubKey},baseAmountIn:q,quoteAmountIn:D,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Le(n.mintA.address),new Le(n.mintB.address),new Le(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:P}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:k}=x,B=Be(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:T}=R,S=Be(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Zi({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Lr,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||be(this.scope.ownerPubKey,W.accountInfo.mint,Lr).publicKey.equals(W.pubkey))&&(g[W.accountInfo.mint.toString()]=W.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let P=r.add(a!=null?a:new at(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Lr,mint:new Le(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Lr,mint:new Le(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let W=ft[s.programId],Ze=Qe({programId:new Le(s.programId),poolId:new Le(s.id),owner:this.scope.ownerPubKey,version:W}),hn,sn=await this.scope.connection.getAccountInfo(Ze);if(sn&&(hn=Ln(W).decode(sn.data)),W!==6&&!hn){let{instruction:Yt,instructionType:zr}=wr({id:new Le(s.id),programId:new Le(s.programId),version:W,ledger:Ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Yt],instructionTypes:[zr]})}let zt=[];for(let Yt of s.rewardInfos){let zr=Yt.mint.address===Ie.WSOL.mint.toString();if(g[Yt.mint.address])zt.push(g[Yt.mint.address]);else{let{account:Bs,instructionParams:xs}=await this.scope.account.getOrCreateTokenAccount({mint:new Le(Yt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!zr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Bs||this.logAndCreateError("farm reward account not found:",Yt.mint.address),xs&&b.addInstruction(xs),zt.push(Bs)}}let kn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Vt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:kn,lpAccount:h,rewardAccounts:zt},Tn=ft[s.programId],_o=Tn===6?co(Vt):Tn===5?lo(Vt):mo(Vt),cc={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[_o],instructionTypes:[cc[Tn]]})}let I=await this.getAmmPoolKeys(t.id),L=Zi({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:P});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[q,D]=t.mintA.address===n.mintA.address?[T,x]:[x,T],J=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Se.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:J,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:q,tokenAccountB:D},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,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&&r.mint.equals(vu),h=u.useSOLBalance&&i.mint.equals(vu),P=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Vu({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=lu(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:be(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[I],instructionTypes:[L]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Cr({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return tu.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,c]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new V(y.toString()).div(p.toString());else{let I=su(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);d==="quote"?b=new V(1e6).div(I*1e6):b=new V(I*1e6).div(1e6)}let g=n,h=new at(0),P=new at(0);if(!g.isZero())if(f){P=eo(g.mul(Nu),Mu);let I=g.sub(P),L=p.add(I);h=y.mul(I).div(L)}else{P=g.mul(new at(2)).div(new at(1e4));let I=g.sub(P);d==="quote"?h=new at(ru(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new at(iu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new at(new V(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new V(h.toString()).div(new V(g.sub(P).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new V(h.toString()).div(g.sub(P).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:P}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,computeBudgetConfig:u}){let l=this.createTxBuilder(),[m,d]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],p=await this.scope.account.getCreatedTokenAccount({mint:new Le(m.address),programId:new Le(m.programId),associatedOnly:!1}),y=await this.scope.account.getCreatedTokenAccount({mint:new Le(d.address),programId:new Le(d.programId),associatedOnly:!1}),B=await this.scope.account.handleTokenAccount({side:"in",amount:r,mint:new Le(m.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:f}=B,b=Be(B,["tokenAccount"]);l.addInstruction(b);let T=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new Le(d.address),tokenAccount:y,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:g}=T,h=Be(T,["tokenAccount"]);l.addInstruction(h);let P=n||await this.getAmmPoolKeys(t.id),k=4;return t.pooltype.includes("StablePool")&&(k=5),l.addInstruction({instructions:[hr({version:k,poolKeys:P,userKeys:{tokenAccountIn:f,tokenAccountOut:g,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[k===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),l.addCustomComputeBudget(u),l.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await _e(this.scope.connection,t.map(l=>({pubkey:new Le(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=yo.decode(m.accountInfo.data);i[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,s.map(l=>({pubkey:new Le(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 at(Rd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new V(p.toString()).div(new V(10).pow(m.quoteDecimal.toString())).div(new V(d.toString()).div(new V(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=Rr({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as se}from"@solana/web3.js";import gt from"bn.js";import{AccountLayout as Fu,TOKEN_PROGRAM_ID as Eu}from"@solana/spl-token";var Io=class extends xe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||se.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new gt(new se(r.address).toBuffer()).gt(new gt(new se(i.address).toBuffer()))?[i,r,new V(1).div(a)]:[r,i,a],b=te.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:c,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(u),d.versionBuild({txVersion:m,extInfo:{address:F(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:c.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:f.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:[]}},Tu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,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,h=n.useSOLBalance&&e.mintA.address===$.toString(),P=n.useSOLBalance&&e.mintB.address===$.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!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 I=t||await this.getClmmPoolKeys(e.id),L=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===$.toBase58(),h=n.useSOLBalance&&e.mintB.address===$.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:u,checkCreateATAOwner:l});P&&(f=P),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,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===$.toString(),g=c.useSOLBalance&&t.mintB.address===$.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(P||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(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});k&&(f=k),p.addInstruction(B||{}),!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=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,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:r,baseAmount:i,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===$.toString(),b=a.useSOLBalance&&t.mintB.address===$.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(h||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,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:r,ownerInfo:i,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=i.useSOLBalance&&t.mintA.address===$.toString(),f=i.useSOLBalance&&t.mintB.address===$.toString(),b,g,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(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=h,P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(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=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===$.toString(),q;if(I.mint.address===t.mintA.address)q=b;else if(I.mint.address===t.mintB.address)q=g;else{let{account:D,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(I.mint.programId),mint:new se(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});q=D,J&&p.addInstruction(J)}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),x=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Se.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!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()===$.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(n.mint.address),mint:new se(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Se.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new se(n.mint.programId),mint:new se(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===$.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,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=Se.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new se(m.mint.programId),mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},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:r=!0,checkCreateATAOwner:i=!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($),{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 gt(new V(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:r,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Se.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===$.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(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:i,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=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:i=!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($),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(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:r,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Se.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:r=!0,checkCreateATAOwner:i=!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($),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(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:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Se.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===$.toBase58(),b=c.useSOLBalance&&e.mintB.address===$.toBase58(),g;!s||s.equals(new V(0))?g=y?Nt.add(new gt(1)):Mt.sub(new gt(1)):g=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let P;if(!P){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=B,T&&p.addInstruction(T)}(!h||!P)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},inputMint:new se(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)r?be(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(P=>!P.liquidity.isZero()||P.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===$.toString(),y=n.useSOLBalance&&d.mintB.address===$.toString(),f=u[d.mintA.address];if(!f){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new se(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=P,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new se(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=P,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let P of d.rewardDefaultInfos){let k=n.useSOLBalance&&P.mint.address===$.toString(),B=u[P.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(P.mint.programId),mint:new se(P.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}u[P.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let P of t[m.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new gt(0),amountMinA:new gt(0),amountMinB:new gt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(go(e).publicKey);return t?Ku.decode(t.data).whitelistMints.filter(r=>!r.equals(se.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new gt(1))).map(s=>yt(new se(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await _e(this.scope.connection,e.map(i=>({pubkey:new se(i)})),t),r={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=yn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),r=await _e(this.scope.connection,Array.from(n).map(c=>({pubkey:new se(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Su.decode(c.accountInfo.data))});let s=await Ce.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:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?on((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?on((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ce.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()]),r=await Kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new se(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Bu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Fu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Fu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as Y}from"@solana/web3.js";import{NATIVE_MINT as Dr,TOKEN_PROGRAM_ID as Gt,AccountLayout as Xd}from"@solana/spl-token";import Wu from"bn.js";var ls=new Wu(1e6);function Ld(o,e,t){return o.mul(e).add(t).sub(new Wu(1)).div(t)}function Du(o,e,t){return o.mul(e).div(t)}var Or=class{static tradingFee(e,t){return Ld(e,t,ls)}static protocolFee(e,t){return Du(e,t,ls)}static fundFee(e,t){return Du(e,t,ls)}};import Bo from"bn.js";function Nr(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Od(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=Nr(o,e);return n.gt(Vn)&&(t=t.add(new Bo(1)),e=o.div(t),n=Nr(o,t),n.gt(Vn)&&(e=e.add(new Bo(1)))),[t,e]}var Vn=new Bo(0),Mr=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Od(r,i),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,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Nr(e.mul(n),t).gt(Vn)&&s.gt(Vn)&&(s=s.add(new Bo(1))),Nr(e.mul(r),t).gt(Vn)&&a.gt(Vn)&&(a=a.add(new Bo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var qu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(qu||{}),_r=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,r){let i=Or.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Mr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Nd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Md=Buffer.from("amm_config","utf8"),_d=Buffer.from("pool","utf8"),Vd=Buffer.from("pool_lp_mint","utf8"),vd=Buffer.from("pool_vault","utf8"),Fd=Buffer.from("observation","utf8");function vn(o){return ae([Nd],o)}function Ed(o,e){return ae([Md,qd(e)],o)}function Dd(o,e,t,n){return ae([_d,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Wd(o,e){return ae([Vd,e.toBuffer()],o)}function Uu(o,e,t){return ae([vd,e.toBuffer(),t.toBuffer()],o)}function Vr(o,e){return ae([Fd,e.toBuffer()],o)}function qd(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Gu({programId:o,mintA:e,mintB:t}){let n=Ed(o,0).publicKey,r=vn(o).publicKey,i=Dd(o,n,e,t).publicKey,s=Wd(o,i).publicKey,a=Uu(o,i,e).publicKey,c=Uu(o,i,t).publicKey,u=Vr(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as xo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as Xu,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";var Gd=ue("Raydium_cpmm"),So={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]};function zu(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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:ms,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ud,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:P},T),new xo({keys:B,programId:o,data:Buffer.from([...So.initialize,...T])})}function Yu(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:Xu,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 Gd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new xo({keys:b,programId:o,data:Buffer.from([...So.deposit,...g])})}function Qu(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:Xu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Xo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new xo({keys:b,programId:o,data:Buffer.from([...So.withdraw,...g])})}function vr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new xo({keys:g,programId:o,data:Buffer.from([...So.swapBaseInput,...h])})}function Fr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new xo({keys:g,programId:o,data:Buffer.from([...So.swapBaseOutput,...h])})}import Ee from"bn.js";var ju=_([fe(8),E("bump"),Ue("disableCreatePool"),Lt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Er=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var Ko=class extends xe{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await _e(this.scope.connection,e.map(m=>({pubkey:new Y(m)}))),r={},i=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=Er.decode(d.accountInfo.data);r[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await _e(this.scope.connection,m.map(p=>({pubkey:new Y(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]]=ju.decode(y.data)}}let c={},u=await _e(this.scope.connection,s.map(m=>({pubkey:new Y(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 Ee(Xd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){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(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new V(y.toString()).div(new V(10).pow(d.mintDecimalB)).div(new V(p.toString()).div(new V(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var c,u,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[r]:F(C({},i),{id:new Y(r),configInfo:i.configInfo,version:7,authority:vn(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?on((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?on((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?on(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?on(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.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:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new V(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new V(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:vn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Be(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var q,D,J;let d=r.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),p=new Ee(new Y(u.mintA.address).toBuffer()).lte(new Ee(new Y(u.mintB.address).toBuffer())),[y,f]=p?[u.mintA,u.mintB]:[u.mintB,u.mintA],[b,g]=p?[u.mintAAmount,u.mintBAmount]:[u.mintBAmount,u.mintAAmount],h=r.useSOLBalance&&y.address===Dr.toBase58(),P=r.useSOLBalance&&f.address===Dr.toBase58(),[k,B]=[new Y(y.address),new Y(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new Y(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:g}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=Gu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[zu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,be(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new Y((D=y.programId)!=null?D:Gt),new Y((J=f.programId)!=null?J:Gt),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(c),T.versionBuild({txVersion:a,extInfo:{address:F(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,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"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({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(C({},t),{lpAmount:new V(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new $e(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new V(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,P=t.mintA.address===Dr.toString(),k=t.mintB.address===Dr.toString(),B=this.createTxBuilder(),[T,S]=[new Y(t.mintA.address),new Y(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let q=await m.getCreatedTokenAccount({mint:new Y(t.lpMint.address)}),Ze=await m.handleTokenAccount({side:"out",amount:0,mint:new Y(t.lpMint.address),tokenAccount:q,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=Ze,J=Be(Ze,["tokenAccount"]);B.addInstruction(J);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new $e(new Ee(1)).sub(s);return B.addInstruction({instructions:[Yu(new Y(t.programId),this.scope.ownerPubKey,new Y(G.authority),new Y(t.id),D,x,I,new Y(G.vault.A),new Y(G.vault.B),T,S,new Y(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[v.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var D,J;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new $e(new Ee(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(r.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(r.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[Pe(l,t.mintA.extensions.feeConfig,d,!0),Pe(m,t.mintB.extensions.feeConfig,d,!0)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new Y(t.mintA.address),new Y(t.mintB.address)],P=g.equals($),k=h.equals($),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new Y(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:[Qu(new Y(t.programId),this.scope.ownerPubKey,new Y(q.authority),new Y(t.id),L,B,T,new Y(q.vault.A),new Y(q.vault.B),g,h,new Y(t.lpMint.address),r,l.sub((D=p.fee)!=null?D:new Ee(0)),m.sub((J=y.fee)!=null?J:new Ee(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:q.lookupTableAccount?[q.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,q;let{poolInfo:t,poolKeys:n,baseIn:r,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:c,txVersion:u}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new Y(t.mintA.address),new Y(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Ee((1-s)*1e4)).div(new Ee(1e4));let b=t.mintA.address===$.toBase58(),g=t.mintB.address===$.toBase58(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new Y((S=t.mintA.programId)!=null?S:Gt),owner:this.scope.ownerPubKey,createInfo:b||!r?{payer:this.scope.ownerPubKey,amount:r?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new Y((x=t.mintB.programId)!=null?x:Gt),owner:this.scope.ownerPubKey,createInfo:g||r?{payer:this.scope.ownerPubKey,amount:r?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),!h&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[r?vr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),h,k,new Y(T.vault.A),new Y(T.vault.B),new Y((R=t.mintA.programId)!=null?R:Gt),new Y((I=t.mintB.programId)!=null?I:Gt),y,f,Vr(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Fr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),k,h,new Y(T.vault.B),new Y(T.vault.A),new Y((L=t.mintB.programId)!=null?L:Gt),new Y((q=t.mintA.programId)!=null?q:Gt),f,y,Vr(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[r?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(c),p.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=_r.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new V(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-r)*1e4)).div(new Ee(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:r,slippage:i,epochInfo:s,baseIn:a}){var h,P,k,B,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Ee(new V(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Pe(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new V(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(P=l.fee)==null?void 0:P.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:pt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=zd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=Pe(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new $e(new Ee(1)).add(i),g=Pe(b.mul(f.amount.sub((B=f.fee)!=null?B:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function zd(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new Ee(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new Ee(1))),{amountA:r,amountB:i}}import{PublicKey as wn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as bs,createTransferInstruction as tc}from"@solana/spl-token";import Ur from"bn.js";import{TOKEN_PROGRAM_ID as ds,TOKEN_2022_PROGRAM_ID as Yd,ASSOCIATED_TOKEN_PROGRAM_ID as Qd}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as ps,SystemProgram as fs}from"@solana/web3.js";import An from"bn.js";function AB(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([E("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:fs.programId,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:new z(t.programId),isSigner:!1,isWritable:!1},{pubkey:new z(t.id),isSigner:!1,isWritable:!0},{pubkey:new z(n.id),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(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=ke(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 z("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=ke(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 ps({keys:p,programId:o,data:y})}function wB(o,e,t,n,r,i,s,a,c,u){let l=_([E("instruction")]),m=[{pubkey:fs.programId,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:new z(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new z(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new z(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(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=ke(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 z("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=ke(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 ps({keys:m,programId:o,data:d})}function jd(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:ds,isWritable:!1}),A({pubkey:Yd,isWritable:!1}),A({pubkey:Qd,isWritable:!1}),A({pubkey:fs.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:r}));let g=[c,u],h=[l,m],P=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=P[S]===x.mintA.address;if(b.push(A({pubkey:new z(x.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:r})):b.push(A({pubkey:n})),b.push(A({pubkey:new z(P[S])})),b.push(A({pubkey:new z(P[S+1])})),x.version===6){let I=h[S];b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)})),b.push(A({pubkey:Xo})),b.push(A({pubkey:lt(new z(x.programId),new z(x.id)).publicKey})),f.push(Hd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(A({pubkey:new z(L)}))}else if(x.version===5){let I=h[S];b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(I.marketProgramId)})),b.push(A({pubkey:new z(I.marketAuthority)})),b.push(A({pubkey:ya,isWritable:!1})),b.push(A({pubkey:new z(I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.marketId)})),b.push(A({pubkey:new z(I.marketBids)})),b.push(A({pubkey:new z(I.marketAsks)})),b.push(A({pubkey:new z(I.marketEventQueue)})),b.push(A({pubkey:new z(I.marketBaseVault)})),b.push(A({pubkey:new z(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(L?I.id:I.marketProgramId)})),b.push(A({pubkey:new z(L?I.id:I.marketAuthority)})),b.push(A({pubkey:new z(L?I.id:I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(L?I.id:I.marketId)})),b.push(A({pubkey:new z(L?I.id:I.marketBids)})),b.push(A({pubkey:new z(L?I.id:I.marketAsks)})),b.push(A({pubkey:new z(L?I.id:I.marketEventQueue)})),b.push(A({pubkey:new z(L?I.id:I.marketBaseVault)})),b.push(A({pubkey:new z(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(A({pubkey:new z(I.authority)})),b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)}))}else throw Error("pool type error")}let k=_([E("insId"),w("amountIn"),w("amountOut"),X(Q(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ps({keys:b,programId:o,data:B})}function Hd(o,e){if(o)if(e){let t=new An(o).div(new An(25));return t.gt(Br)?t:Br}else{let t=new An(o).mul(new An(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Hu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?Nt.add(mt):Mt.sub(mt);return Se.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((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new An(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:[d?vr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new z(m.mintA.address),new z(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):Fr(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new z(m.mintB.address),new z(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[hr({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 An(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?v.AmmV5SwapBaseIn:v.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:[jd(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 An(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Zu={[fi.toBase58()]:3},$u={3:fi};var ys=_([fe(5),fe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),Ju={3:ys};import{PublicKey as ec}from"@solana/web3.js";var Wr=ue("Serum"),qr=class{static getProgramId(e){let t=$u[e];return t||Wr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Zu[t];return n||Wr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ju[e];return t||Wr.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()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=ec.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Wr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:ec.default,nonce:r}}};var Xt=new Ur(0),Co=class extends xe{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($));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:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),to({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[to({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ot({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals($),m=u.amount.token.mint.equals($),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?bs:Re,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=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?bs:Re);m&&a.addInstruction({endInstructions:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?bs:Re)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=Hu({routeProgram:i,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[tc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(P);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[tc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=fa,clmm:n=ba,cpmm:r=ga}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:yo.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=i.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:yn.span}],dataSlice:{offset:yn.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(r,{dataSlice:{offset:Er.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:r,cpmmPools:i}){e=e.toString()===wn.default.toString()?$:e,t=t.toString()===wn.default.toString()?$: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:Re,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:Re,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:Re,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:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(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:Re,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:Re,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:Re,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:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,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:Re,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:Re,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:Re,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&&i[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&&i[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 r=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 i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Rr(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new wn(f.mintA.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new wn(f.mintB.address),programId:Re,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(Re)?(r.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}):r.add(b),f.mintProgramB.equals(Re)?(r.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}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let u=await Kn({connection:this.scope.connection,mints:Array.from(r).map(f=>new wn(f))});a=C(C({},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(C({},f),{[b]:F(C({},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:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,h,P,k,B,T,S,x,R;let m=l===void 0?new Ur(0):e.raw.mul(new Ur(l.feeBps.toNumber())).div(new Ur(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:ut(t.address).toString()}),b=[];for(let I of n)try{b.push(F(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(r)){let q={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},D=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:q,amountIn:p})}}catch(W){this.logDebug("route in error",G.version,G.id.toString(),W.message);return}}).sort((G,W)=>{var sn,zt,kn,Vt;let Ze=G===void 0?Xt:G.data.amountOut.amount.raw.sub((zt=(sn=G.data.amountOut.fee)==null?void 0:sn.raw)!=null?zt:Xt),hn=W===void 0?Xt:W.data.amountOut.amount.raw.sub((Vt=(kn=W.data.amountOut.fee)==null?void 0:kn.raw)!=null?Vt:Xt);return Ze.lt(hn)?1:-1})[0];if(D===void 0)continue;let J=new ye(Pr(q),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Xt));for(let G of L.out)try{let W=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:J});b.push(F(C({},W),{allTrade:!!(D.data.allTrade&&W.allTrade),amountIn:D.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new V(new rt({baseToken:D.data.amountIn.amount.token,denominator:D.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(P=W.amountOut.fee)==null?void 0:P.raw)!=null?k:Xt)}).toFixed()),priceImpact:new V(D.data.priceImpact.add(W.priceImpact).toFixed()),fee:[D.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[D.pool,G],remainingAccounts:[D.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new ye(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Xt).add((R=(x=W.amountOut.fee)==null?void 0:x.raw)!=null?R:Xt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&W.poolReady,poolType:[D.data.poolType,W.poolType],feeConfig:y,expirationTime:Rt(D.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",G.version,G.id.toString(),W.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,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:h,executionPriceX64:P}=Ce.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new V(y.toFixed()),executionPrice:new V(f.toFixed()),priceImpact:new V(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Rt(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:fo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:fo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,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:fo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:fo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,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 r=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});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=this.scope.liquidity.getRpcPoolInfos(Array.from(r));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 _e(this.scope.connection,Array.from(s).map(l=>({pubkey:new wn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=ys.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:qr.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(C({},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=C({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:cs({programId:new wn(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:vn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:F(C({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{TOKEN_PROGRAM_ID as Zd}from"@solana/spl-token";import{PublicKey as $d,Transaction as gs,TransactionInstruction as Jd}from"@solana/web3.js";import nc from"bn.js";var He=class extends xe{static getPdaPoolId(e,t){return ae([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ae([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new nc(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>He.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<He.VERSION_PROJECT.length;l++)a.push(...s.map(m=>He.getPdaOwnerId(t,m,r,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==He.POOL_LAYOUT.span||b.data.length!==He.OWNER_LAYOUT.span)continue;let g=He.POOL_LAYOUT.decode(f.data),h=He.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new nc(0))).filter(x=>!x).length!==3,T=i>P&&i<k&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[m],openTime:P,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];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(Ie.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!c.mintAddress.equals(Ie.WSOL.mint),associatedOnly:c.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[He.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i={};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(Ie.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[He.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:r,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return tr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new gs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new gs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new gs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Zd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Jd({keys:i,programId:e,data:a})}},At=He;At.CLAIMED_NUM=3,At.POOL_LAYOUT=_([fe(8),E("bump"),E("status"),w("openTime"),w("endTime"),K("ammId"),X(_([E("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),At.OWNER_LAYOUT=_([fe(8),E("bump"),E("version"),K("poolId"),K("owner"),w("lpAmount"),X(_([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),At.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new $d(e)),At.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},At.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ro}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ac}from"@solana/spl-token";import Lo from"bn.js";import{TransactionInstruction as tp,SYSVAR_RENT_PUBKEY as np}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as oc}from"@solana/spl-token";import{createInitializeAccountInstruction as rc}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as ic}from"@solana/web3.js";function ep(o="accountFlags"){let e=new mr(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 As=_([fe(5),ep("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function op({programId:o,marketInfo:e}){let t=_([E("version"),ze("instruction"),w("baseLotSize"),w("quoteLotSize"),Lt("feeRateBps"),w("vaultSignerNonce"),w("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:np,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}:[]),r=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},r),new tp({keys:n,programId:o,data:r})}async function sc({connection:o,wallet:e,marketInfo:t}){let n=new ic,r=await o.getMinimumBalanceForRentExemption(165);n.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:oc}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:oc}),rc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),rc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new ic;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(As.span),space:As.span,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),op({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:[v.CreateAccount,v.CreateAccount,v.InitAccount,v.InitAccount]},{transaction:i,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.InitMarket]}]}var Fn=class extends xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let c=this.scope.ownerPubKey,u=Ye({fromPublicKey:c,programId:i}),l=Ye({fromPublicKey:c,programId:i}),m=Ye({fromPublicKey:c,programId:i}),d=Ye({fromPublicKey:c,programId:i}),p=Ye({fromPublicKey:c,programId:i}),y=Ye({fromPublicKey:c,programId:ac}),f=Ye({fromPublicKey:c,programId:ac}),b=0,g=new Lo(100);function h(){let R=new Lo(0);for(;;)try{return{vaultOwner:Ro.createProgramAddressSync([u.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new Lo(25555)))throw Error("find vault owner error")}}let{vaultOwner:P,vaultSignerNonce:k}=h(),B=new Lo(Math.round(10**e.decimals*n)),T=new Lo(Math.round(n*10**t.decimals*r));if(B.eq(pt))throw Error("lot size is too small");if(T.eq(pt))throw Error("tick size or lot size is too small");let S=await sc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:u,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:P,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Ro(e.mint),quoteMin:new Ro(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Ro(e.mint),quoteMin:new Ro(t.mint)}})}};import{PublicKey as No}from"@solana/web3.js";import{TransactionInstruction as Ps,SYSVAR_CLOCK_PUBKEY as rp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hs}from"@solana/spl-token";var ws=_([E("instruction"),Ta("amount")]),Oo=_([E("instruction")]);function nS({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:Yo,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:oi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],r=Buffer.alloc(ws.span);return ws.encode({instruction:1,amount:Number(e)},r),new Ps({keys:n,programId:o,data:r})}function Gr({programId:o},e){let t=[{pubkey:hs,isSigner:!1,isWritable:!1},{pubkey:oi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Oo.span);return Oo.encode({instruction:2},n),new Ps({keys:t,programId:o,data:n})}function ks(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Oo.span);Oo.encode({instruction:2},s);let a=[{pubkey:hs,isWritable:!1,isSigner:!1},{pubkey:rp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Ps({programId:e.programId,keys:a,data:s})}import uc from"bn.js";var ip={[$n.IDO_PROGRAM_ID_V1.toString()]:1,[$n.IDO_PROGRAM_ID_V2.toString()]:2,[$n.IDO_PROGRAM_ID_V3.toString()]:3,[$n.IDO_PROGRAM_ID_V4.toString()]:4},En=class extends xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=ip[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new uc(e.coin).isZero(),!new uc(e.pc).isZero()],m=c.projectInfo.mint.address.equals($),{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:r});!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($),{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:r});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?[Gr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new No(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Gr({programId:new No(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new No(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Gr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new No(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});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 No(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ks(F(C({},g),{side:"base"}))]:[],...l?[ks(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as sp}from"@solana/web3.js";import{MintLayout as ap,TOKEN_2022_PROGRAM_ID as Ts,TOKEN_PROGRAM_ID as Is}from"@solana/spl-token";var Mo=class extends xe{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:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(r,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(Ct.address,Ct),this._mintGroup.official.add(Ct.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ts.toBase58():Is.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(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ts.toBase58():Is.toBase58()})),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(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ts.toBase58():Is.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(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Ct;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new sp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=ap.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 Xr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new kt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new po({scope:this,moduleName:"Raydium_Farm"}),this.account=new no({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new To({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Mo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Co({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Io({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ko({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new At({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Fn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new En({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=up({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new ur({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new Xr(F(C({},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(cr);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Pa);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(cr),new Error(cr)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var i;let n=(i=this.apiData.jupTokenList)==null?void 0:i[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let r=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=F(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:r}}),this.apiData.jupTokenList[e].data}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 rK=o=>o;export{cd as AMM_CONFIG_SEED,wu as BIT_PRECISION,Io as Clmm,Su as ClmmConfigLayout,Se as ClmmInstrument,Mr as ConstantProductCurve,ju as CpmmConfigInfoLayout,Or as CpmmFee,Er as CpmmPoolInfoLayout,_r as CurveCalculator,Qm as DataElement,ns as EXTENSION_TICKARRAY_BITMAP_SIZE,Ua as FARM_LOCK_MINT,Ga as FARM_LOCK_VAULT,ft as FARM_PROGRAM_TO_VERSION,za as FARM_VERSION_TO_LEDGER_LAYOUT,Xa as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,ls as FEE_RATE_DENOMINATOR_VALUE,gd as FETCH_TICKARRAY_COUNT,bd as Fee,Mu as LIQUIDITY_FEES_DENOMINATOR,Nu as LIQUIDITY_FEES_NUMERATOR,Id as LIQUIDITY_VERSION_TO_SERUM_VERSION,CP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Pu as LOG_B_2_X32,hu as LOG_B_P_ERR_MARGIN_LOWER_X64,ku as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,As as MARKET_STATE_LAYOUT_V2,ys as MARKET_STATE_LAYOUT_V3,Ju as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,je as MIN_TICK,Nn as MODEL_DATA_PUBKEY,qr as Market,ne as MathUtil,ts as MaxU64,Au as MaxUint128,qt as NEGATIVE_ONE,mt as ONE,fd as OPERATION_SEED,is as ObservationInfoLayout,Pd as ObservationLayout,Ku as OperationLayout,dd as POOL_REWARD_VAULT_SEED,ld as POOL_SEED,yd as POOL_TICK_ARRAY_BITMAP_SEED,md as POOL_VAULT_SEED,yu as POSITION_SEED,yn as PoolInfoLayout,Ce as PoolUtils,Kr as PositionInfoLayout,kd as PositionRewardInfoLayout,ho as PositionUtils,pk as ProtocolPositionLayout,Ir as Q128,dt as Q64,Xr as Raydium,hd as RewardInfo,qu as RoundDirection,Zu as SERUM_PROGRAMID_TO_VERSION,$u as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,oP as SPL_MINT_LAYOUT,te as SqrtPriceMath,On as StableLayout,fn as SwapMath,pn as TICK_ARRAY_BITMAP_SIZE,pd as TICK_ARRAY_SEED,Ve as TICK_ARRAY_SIZE,nh as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,xu as TickArrayBitmapExtensionLayout,Po as TickArrayBitmapExtensionUtils,wo as TickArrayLayout,Td as TickLayout,bn as TickMath,le as TickQuery,j as TickUtils,Ao as U64Resolution,rh as U64_IGNORE_RANGE,Wa as Voter,Cm as VoterDepositEntry,Km as VoterLockup,Da as VoterRegistrar,Sm as VoterVotingMintConfig,de as ZERO,Qi as addLiquidityLayout,Ki as associatedLedgerAccountLayout,Wi as calFarmRewardAmount,Ld as ceilDiv,Oo as claimLayout,Bu as clmmComputeInfoToApiInfo,Ot as closeAccountInstruction,wr as createAssociatedLedgerAccountInstruction,tu as createPoolFeeLayout,lu as createPoolV4InstructionV2,KP as createPoolV4Layout,Dt as createWSolAccountInstructions,Je as dwLayout,Oi as farmAddRewardLayout,UA as farmLedgerLayoutV3_1,ro as farmLedgerLayoutV3_2,GA as farmLedgerLayoutV5_1,Fa as farmLedgerLayoutV5_2,Ea as farmLedgerLayoutV6_1,Qa as farmRewardInfoToConfig,Ri as farmRewardLayout,Li as farmRewardRestartLayout,xm as farmRewardTimeInfoLayout,Va as farmStateV3Layout,va as farmStateV5Layout,oo as farmStateV6Layout,pw as fetchMultipleFarmInfoAndUpdate,Xk as fetchMultipleInfo,Xi as fixedSwapInLayout,zi as fixedSwapOutLayout,Du as floorDiv,rd as formatLayout,Ye as generatePubKey,Ya as getAssociatedAuthority,Cr as getAssociatedConfigId,Qe as getAssociatedLedgerAccount,so as getAssociatedLedgerPoolAccount,Cd as getAssociatedOpenOrders,Vu as getAssociatedPoolKeys,Ed as getCpmmPdaAmmConfigId,Dd as getCpmmPdaPoolId,Gu as getCreatePoolKeys,qi as getDepositEntryIndex,iu as getDxByDyBaseIn,ru as getDyByDxBaseIn,Ln as getFarmLedgerLayout,Rm as getFarmStateLayout,cs as getLiquidityAssociatedAuthority,gn as getLiquidityAssociatedId,Uh as getLiquidityFromAmounts,JP as getPdaAmmConfigId,lt as getPdaExBitmapAccount,Wd as getPdaLpMint,Tr as getPdaMetadataKey,Vr as getPdaObservationId,go as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,vn as getPdaPoolAuthority,bu as getPdaPoolId,gu as getPdaPoolRewardVaulId,es as getPdaPoolVaultId,dn as getPdaProtocolPositionAddress,Ae as getPdaTickArrayAddress,Uu as getPdaVault,_i as getRegistrarAddress,su as getStablePrice,Di as getTokenOwnerRecordAddress,Fi as getVoterAddress,Ei as getVoterWeightRecordAddress,vi as getVotingMintAuthority,Vi as getVotingTokenMint,Em as governanceCreateTokenOwnerRecord,QP as i16ToBytes,kr as i32ToBytes,Yi as initPoolLayout,xi as initTokenAccountInstruction,op as initializeMarket,Ni as isValidFarmVersion,bo as isZero,fw as judgeFarmType,$i as leadingZeros,fu as leastSignificantBit,yo as liquidityStateV4Layout,zm as liquidityStateV5Layout,hr as makeAMMSwapInstruction,cu as makeAddLiquidityInstruction,Gi as makeAddNewRewardInstruction,Gr as makeClaimInstruction,ks as makeClaimInstructionV4,zu as makeCreateCpmmPoolInInstruction,ja as makeCreateFarmInstruction,sc as makeCreateMarketInstruction,Ha as makeCreatorWithdrawFarmRewardInstruction,Yu as makeDepositCpmmInInstruction,Za as makeDepositInstructionV3,$a as makeDepositInstructionV5,Ja as makeDepositInstructionV6,Lw as makeDepositTokenInstruction,Nw as makeDepositWithdrawInstruction,zP as makeInitPoolInstructionV4,nS as makePurchaseInstruction,Ui as makeRestartRewardInstruction,mu as makeSimulatePoolInfoInstruction,vr as makeSwapCpmmBaseInInInstruction,Fr as makeSwapCpmmBaseOutInInstruction,ad as makeSwapFixedInInstruction,ud as makeSwapFixedOutInstruction,Hu as makeSwapInstruction,to as makeTransferInstruction,Qu as makeWithdrawCpmmInInstruction,mo as makeWithdrawInstructionV3,lo as makeWithdrawInstructionV5,co as makeWithdrawInstructionV6,Ow as makeWithdrawTokenInstruction,oh as mockCreatePoolInfo,Tu as mockV3CreatePoolInfo,jm as modelDataInfoLayout,pu as mostSignificantBit,_a as parseTokenAccountResp,pP as parseTokenInfo,nn as poolTypeV6,ws as purchaseLayout,Tm as realFarmStateV3Layout,Im as realFarmStateV5Layout,Bm as realFarmV6Layout,Zi as removeLiquidityInstruction,ji as removeLiquidityLayout,AB as route1Instruction,wB as route2Instruction,jd as routeInstruction,XP as simulatePoolInfoInstruction,yP as solToWSolToken,$t as splAccountLayout,Rr as toAmmComputePoolInfo,et as toApiV3Token,on as toFeeConfig,Pr as toToken,fo as toTokenAmount,fP as toTokenInfo,Ji as trailingZeros,du as u16ToBytes,jP as u32ToBytes,rK as unionArr,Lm as updateFarmPoolInfo,Mi as validateFarmRewards,Wm as voterStakeRegistryCreateDepositEntry,Dm as voterStakeRegistryCreateVoter,Vm as voterStakeRegistryDeposit,vm as voterStakeRegistryUpdateVoterWeightRecord,Fm as voterStakeRegistryWithdraw,bP as wSolToSolToken,Ci as withdrawRewardLayout};
|
|
1
|
+
var lc=Object.defineProperty,mc=Object.defineProperties;var dc=Object.getOwnPropertyDescriptors;var vo=Object.getOwnPropertySymbols;var Ks=Object.prototype.hasOwnProperty,Cs=Object.prototype.propertyIsEnumerable;var Ss=(o,e,t)=>e in o?lc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))Ks.call(e,t)&&Ss(o,t,e[t]);if(vo)for(var t of vo(e))Cs.call(e,t)&&Ss(o,t,e[t]);return o},F=(o,e)=>mc(o,dc(e));var Se=(o,e)=>{var t={};for(var n in o)Ks.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&vo)for(var n of vo(o))e.indexOf(n)<0&&Cs.call(o,n)&&(t[n]=o[n]);return t};import{merge as up}from"lodash";import wa from"axios";import{get as Rs,set as pc}from"lodash";import Os from"dayjs";import fc from"dayjs/plugin/utc";Os.extend(fc);var Yr=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 Os().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},Ls={},yc={};function ue(o){let e=Rs(Ls,o);if(!e){let t=Rs(yc,o);e=new Yr({name:o,logLevel:t}),pc(Ls,o,e)}return e}import{PublicKey as Il}from"@solana/web3.js";import Bl from"bn.js";import hl from"big.js";import Jo from"bn.js";import it from"bn.js";var In=9e15,Zt=1e9,Qr="0123456789abcdef",Eo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Do="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",jr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-In,maxE:In,crypto:!1},Vs,vt,oe=!0,qo="[DecimalError] ",Ht=qo+"Invalid argument: ",vs=qo+"Precision limit exceeded",Fs=qo+"crypto unavailable",Es="[object Decimal]",Ge=Math.floor,Le=Math.pow,bc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,gc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Ac=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ds=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,ee=7,wc=9007199254740991,Pc=Eo.length-1,Hr=Do.length-1,M={toStringTag:Es};M.absoluteValue=M.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),H(o)};M.ceil=function(){return H(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(Ht+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};M.comparedTo=M.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,c=i.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(i.e!==o.e)return i.e>o.e^c<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===r?0:n>r^c<0?1:-1};M.cosine=M.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())+ee,n.rounding=1,t=hc(n,Xs(n,t)),n.precision=o,n.rounding=e,H(vt==2||vt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var o,e,t,n,r,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Le(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=Ee(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Le(t,1/3),o=Ge((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=we(u.plus(l).times(a),u.plus(c),s+2,1),Ee(a.d).slice(0,s)===(t=Ee(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,H(n,o,m.rounding,e)};M.decimalPlaces=M.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-Ge(this.e/ee))*ee,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(o){return we(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return H(we(e,new t(o),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(o){return this.cmp(o)===0};M.floor=function(){return H(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(o){return this.cmp(o)>0};M.greaterThanOrEqualTo=M.gte=function(o){var e=this.cmp(o);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var o,e,t,n,r,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/Go(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=Bn(s,1,i.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return H(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=Bn(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Go(5,o)),r=Bn(i,2,r,r,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,H(r,e,t,!0)};M.hyperbolicTangent=M.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,we(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?wt(t,r,i):new t(0):new t(NaN):e.isZero()?wt(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=wt(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};M.inverseHyperbolicCosine=M.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,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.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,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?H(new i(r),o,e,!0):(i.precision=t=n-r.e,r=we(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=wt(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};M.inverseTangent=M.atan=function(){var o,e,t,n,r,i,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<=Hr)return s=wt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Hr)return s=wt(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/ee+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),r=u;o!==-1;)if(r=r.times(c),i=s.minus(r.div(n+=2)),r=r.times(c),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,H(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Ge(this.e/ee)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(o){return this.cmp(o)<0};M.lessThanOrEqualTo=M.lte=function(o){return this.cmp(o)<1};M.logarithm=M.log=function(o){var e,t,n,r,i,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)i=!0;else{for(r=t[0];r%10===0;)r/=10;i=r!==1}if(oe=!1,a=m+p,s=jt(u,a),n=e?Wo(l,a+10):jt(o,a),c=we(s,n,a,1),Wn(c.d,r=m,d))do if(a+=10,s=jt(u,a),n=e?Wo(l,a+10):jt(o,a),c=we(s,n,a,1),!i){+Ee(c.d).slice(r+1,r+15)+1==1e14&&(c=H(c,m+1,0));break}while(Wn(c.d,r+=10,d));return oe=!0,H(c,m,d)};M.minus=M.sub=function(o){var e,t,n,r,i,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 oe?H(o,a,c):o}if(t=Ge(o.e/ee),l=Ge(p.e/ee),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;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}i=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>i;){if(u[--n]<d[n]){for(r=n;r&&u[--r]===0;)u[r]=Pt-1;--u[r],u[n]+=Pt}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=Uo(u,t),oe?H(o,a,c):o):new y(c===3?-0:0)};M.modulo=M.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]?H(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=we(t,o.abs(),0,3,1),e.s*=o.s):e=we(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Zr(this)};M.naturalLogarithm=M.ln=function(){return jt(this)};M.negated=M.neg=function(){var o=new this.constructor(this);return o.s=-o.s,H(o)};M.plus=M.add=function(o){var e,t,n,r,i,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)),oe?H(o,a,c):o;if(i=Ge(m.e/ee),n=Ge(o.e/ee),u=u.slice(),r=i-n,r){for(r<0?(t=u,r=-r,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/ee),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=u.length,r=l.length,s-r<0&&(r=s,t=l,l=u,u=t),e=0;r;)e=(u[--r]=u[r]+l[r]+e)/Pt|0,u[r]%=Pt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=Uo(u,n),oe?H(o,a,c):o};M.precision=M.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Ht+o);return t.d?(e=Ws(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var o=this,e=o.constructor;return H(new e(o),o.e+1,e.rounding)};M.sine=M.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())+ee,n.rounding=1,t=Tc(n,Xs(n,t)),n.precision=o,n.rounding=e,H(vt>2?t.neg():t,o,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var o,e,t,n,r,i,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(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=Ee(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Ge((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(we(s,i,t+2,1)).times(.5),Ee(i.d).slice(0,t)===(e=Ee(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(H(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,c+1,1),o=!n.times(n).eq(s));break}return oe=!0,H(n,c,l.rounding,o)};M.tangent=M.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=we(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,H(vt==2||vt==4?t.neg():t,o,e,!0)):new n(NaN)};M.times=M.mul=function(o){var e,t,n,r,i,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=Ge(l.e/ee)+Ge(o.e/ee),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,r=c+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%Pt|0,e=a/Pt|0;i[r]=(i[r]+e)%Pt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=Uo(i,t),oe?H(o,m.precision,m.rounding):o};M.toBinary=function(o,e){return Jr(this,2,o,e)};M.toDecimalPlaces=M.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(nt(o,0,Zt),e===void 0?e=n.rounding:nt(e,0,8),H(t,o+t.e+1,e))};M.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Kt(n,!0):(nt(o,0,Zt),e===void 0?e=r.rounding:nt(e,0,8),n=H(new r(n),o+1,e),t=Kt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Kt(r):(nt(o,0,Zt),e===void 0?e=i.rounding:nt(e,0,8),n=H(new i(r),o+r.e+1,e),t=Kt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};M.toFraction=function(o){var e,t,n,r,i,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),i=e.e=Ws(y)-p.e-1,s=i%ee,e.d[0]=Le(10,s<0?ee+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(Ht+a);o=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(Ee(y)),l=f.precision,f.precision=i=y.length*ee*2;m=we(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(m.times(r)),c=r,r=e,e=a.minus(m.times(r)),a=r;return r=we(o.minus(t),n,0,1,1),c=c.plus(r.times(u)),t=t.plus(r.times(n)),c.s=u.s=p.s,d=we(u,n,i,1).minus(p).abs().cmp(we(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};M.toHexadecimal=M.toHex=function(o,e){return Jr(this,16,o,e)};M.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:nt(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]?(oe=!1,t=we(t,o,0,e,1).times(o),oe=!0,H(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Jr(this,8,o,e)};M.toPower=M.pow=function(o){var e,t,n,r,i,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(Le(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,o.eq(1))return H(a,n,i);if(e=Ge(o.e/ee),e>=o.d.length-1&&(t=u<0?-u:u)<=wc)return r=qs(c,a,t,n),o.s<0?new c(1).div(r):H(r,n,i);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=Le(+a,u),e=t==0||!isFinite(t)?Ge(u*(Math.log("0."+Ee(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):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Zr(o.times(jt(a,n+t)),n),r.d&&(r=H(r,n+5,1),Wn(r.d,n,i)&&(e=n+10,r=H(Zr(o.times(jt(a,e+t)),e),e+5,1),+Ee(r.d).slice(n+1,n+15)+1==1e14&&(r=H(r,n+1,0)))),r.s=s,oe=!0,c.rounding=i,H(r,n,i))};M.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Kt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(nt(o,1,Zt),e===void 0?e=r.rounding:nt(e,0,8),n=H(new r(n),o,e),t=Kt(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(nt(o,1,Zt),e===void 0?e=n.rounding:nt(e,0,8)),H(new n(t),o,e)};M.toString=function(){var o=this,e=o.constructor,t=Kt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return H(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var o=this,e=o.constructor,t=Kt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function Ee(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=ee-n.length,t&&(i+=Qt(t)),i+=n;s=o[e],n=s+"",t=ee-n.length,t&&(i+=Qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Ht+o)}function Wn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=ee,r=0):(r=Math.ceil((e+1)/ee),e%=ee),i=Le(10,ee-e),a=o[r]%i|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==i||t>3&&a+1==i/2)&&(o[r+1]/i/100|0)==Le(10,e-2)-1||(a==i/2||a==0)&&(o[r+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(o[r+1]/i/1e3|0)==Le(10,e-3)-1,s}function Fo(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=Qr.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function hc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Go(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=Bn(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var we=function(){function o(n,r,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*r+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=r[a]){c=n[a]>r[a]?1:-1;break}return c}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,c){var u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I,L,q,D=n.constructor,J=n.s==r.s?1:-1,G=n.d,W=r.d;if(!G||!G[0]||!W||!W[0])return new D(!n.s||!r.s||(G?W&&G[0]==W[0]:!W)?NaN:G&&G[0]==0||!W?J*0:J/0);for(c?(p=1,l=n.e-r.e):(c=Pt,p=ee,l=Ge(n.e/p)-Ge(r.e/p)),L=W.length,R=G.length,g=new D(J),h=g.d=[],m=0;W[m]==(G[m]||0);m++);if(W[m]>(G[m]||0)&&l--,i==null?(T=i=D.precision,s=D.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),h[m]=S/W|0,d=S%W|0;y=d||m<R}else{for(d=c/(W[0]+1)|0,d>1&&(W=o(W,d,c),G=o(G,d,c),L=W.length,R=G.length),x=L,P=G.slice(0,L),k=P.length;k<L;)P[k++]=0;q=W.slice(),q.unshift(0),I=W[0],W[1]>=c/2&&++I;do d=0,u=e(W,P,L,k),u<0?(B=P[0],L!=k&&(B=B*c+(P[1]||0)),d=B/I|0,d>1?(d>=c&&(d=c-1),f=o(W,d,c),b=f.length,k=P.length,u=e(f,P,b,k),u==1&&(d--,t(f,L<b?q:W,b,c))):(d==0&&(u=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(P,f,k,c),u==-1&&(k=P.length,u=e(W,P,L,k),u<1&&(d++,t(P,L<k?q:W,k,c))),k=P.length):u===0&&(d++,P=[0]),h[m++]=d,u&&P[0]?P[k++]=G[x]||0:(P=[G[x]],k=1);while((x++<R||P[0]!==void 0)&&T--);y=P[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Vs=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?i+g.e+1:i,s,y)}return g}}();function H(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=ee,s=e,l=m[d=0],c=l/Le(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,r=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=ee,s=i-ee+r,c=s<0?0:l/Le(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Le(10,r-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Le(10,r-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]=Le(10,(ee-e%ee)%ee),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Le(10,ee-i),m[d]=s>0?(l/Le(10,r-s)%Le(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,m[0]==Pt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Pt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Kt(o,e,t){if(!o.isFinite())return Gs(o);var n,r=o.e,i=Ee(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Qt(-r-1)+i,t&&(n=t-s)>0&&(i+=Qt(n))):r>=s?(i+=Qt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Qt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Qt(n))),i}function Uo(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function Wo(o,e,t){if(e>Pc)throw oe=!0,t&&(o.precision=t),Error(vs);return H(new o(Eo),e,1,!0)}function wt(o,e,t){if(e>Hr)throw Error(vs);return H(new o(Do),e,t,!0)}function Ws(o){var e=o.length-1,t=e*ee+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 Qt(o){for(var e="";o--;)e+="0";return e}function qs(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/ee+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Ms(i.d,s)&&(r=!0)),t=Ge(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Ms(e.d,s)}return oe=!0,i}function Ns(o){return o.d[o.d.length-1]&1}function Us(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function Zr(o,e){var t,n,r,i,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?(oe=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Le(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=H(i.times(o),c,1),t=t.times(++l),a=s.plus(we(i,t,c,1)),Ee(a.d).slice(0,c)===Ee(s.d).slice(0,c)){for(r=m;r--;)s=H(s.times(s),c,1);if(e==null)if(u<3&&Wn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return H(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function jt(o,e){var t,n,r,i,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,h=g.rounding,P=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?(oe=!1,l=P):l=e,g.precision=l+=y,t=Ee(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=Ee(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=Wo(g,l+2,P).times(i+""),f=jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?H(f,P,h,oe=!0):f;for(m=f,c=s=f=we(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),r=3;;){if(s=H(s.times(d),l,1),u=c.plus(we(s,new g(r),l,1)),Ee(u.d).slice(0,l)===Ee(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Wo(g,l+2,P).times(i+""))),c=we(c,new g(p),l,1),e==null)if(Wn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=we(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),r=a=1;else return H(c,g.precision=P,h,oe=!0);else return g.precision=P,c;c=u,r+=2}}function Gs(o){return String(o.s*o.s/0)}function $r(o,e){var t,n,r;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(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=ee;n<r;)o.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),oe&&(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 kc(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ds.test(e))return $r(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(gc.test(e))t=16,e=e.toLowerCase();else if(bc.test(e))t=2;else if(Ac.test(e))t=8;else throw Error(Ht+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=qs(n,new n(t),i,i*2)),u=Fo(e,t,Pt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(o.s*0):(o.e=Uo(u,l),o.d=u,oe=!1,s&&(o=we(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?Le(2,c):qn.pow(2,c))),oe=!0,o)}function Tc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Go(5,t)),e=Bn(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function Bn(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,m=Math.ceil(l/ee);for(oe=!1,c=t.times(t),a=new o(n);;){if(s=we(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=we(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function Go(o,e){for(var t=o;--e;)t*=o;return t}function Xs(o,e){var t,n=e.s<0,r=wt(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return vt=n?4:1,e;if(t=e.divToInt(r),t.isZero())vt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return vt=Ns(t)?n?2:3:n?4:1,e;vt=Ns(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Jr(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(nt(t,1,Zt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=Gs(o);else{for(l=Kt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Fo(Kt(d),10,r),d.e=d.d.length),m=Fo(l,10,r),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=we(o,d,t,n,0,r),m=o.d,i=o.e,u=Vs),s=m[t],a=r/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]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Qr.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=Fo(l,r,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Qr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function Ms(o,e){if(o.length>e)return o.length=e,!0}function Ic(o){return new this(o).abs()}function Bc(o){return new this(o).acos()}function xc(o){return new this(o).acosh()}function Sc(o,e){return new this(o).plus(e)}function Kc(o){return new this(o).asin()}function Cc(o){return new this(o).asinh()}function Rc(o){return new this(o).atan()}function Lc(o){return new this(o).atanh()}function Oc(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=wt(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?wt(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=wt(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(we(o,e,i,1)),e=wt(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(we(o,e,i,1)),t}function Nc(o){return new this(o).cbrt()}function Mc(o){return H(o=new this(o),o.e+1,2)}function _c(o,e,t){return new this(o).clamp(e,t)}function Vc(o){if(!o||typeof o!="object")throw Error(qo+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Zt,"rounding",0,8,"toExpNeg",-In,0,"toExpPos",0,In,"maxE",0,In,"minE",-In,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=jr[t]),(n=o[t])!==void 0)if(Ge(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ht+t+": "+n);if(t="crypto",r&&(this[t]=jr[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(Fs);else this[t]=!1;else throw Error(Ht+t+": "+n);return this}function vc(o){return new this(o).cos()}function Fc(o){return new this(o).cosh()}function zs(o){var e,t,n;function r(i){var s,a,c,u=this;if(!(u instanceof r))return new r(i);if(u.constructor=r,_s(i)){u.s=i.s,oe?!i.d||i.e>r.maxE?(u.e=NaN,u.d=null):i.e<r.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>r.maxE?(u.e=NaN,u.d=null):s<r.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return $r(u,i.toString())}else if(c!=="string")throw Error(Ht+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Ds.test(i)?$r(u,i):kc(u,i)}if(r.prototype=M,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=Vc,r.clone=zs,r.isDecimal=_s,r.abs=Ic,r.acos=Bc,r.acosh=xc,r.add=Sc,r.asin=Kc,r.asinh=Cc,r.atan=Rc,r.atanh=Lc,r.atan2=Oc,r.cbrt=Nc,r.ceil=Mc,r.clamp=_c,r.cos=vc,r.cosh=Fc,r.div=Ec,r.exp=Dc,r.floor=Wc,r.hypot=qc,r.ln=Uc,r.log=Gc,r.log10=zc,r.log2=Xc,r.max=Yc,r.min=Qc,r.mod=jc,r.mul=Hc,r.pow=Zc,r.random=$c,r.round=Jc,r.sign=el,r.sin=tl,r.sinh=nl,r.sqrt=ol,r.sub=rl,r.sum=il,r.tan=sl,r.tanh=al,r.trunc=ul,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 r.config(o),r}function Ec(o,e){return new this(o).div(e)}function Dc(o){return new this(o).exp()}function Wc(o){return H(o=new this(o),o.e+1,3)}function qc(){var o,e,t=new this(0);for(oe=!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 oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function _s(o){return o instanceof qn||o&&o.toStringTag===Es||!1}function Uc(o){return new this(o).ln()}function Gc(o,e){return new this(o).log(e)}function Xc(o){return new this(o).log(2)}function zc(o){return new this(o).log(10)}function Yc(){return Us(this,arguments,"lt")}function Qc(){return Us(this,arguments,"gt")}function jc(o,e){return new this(o).mod(e)}function Hc(o,e){return new this(o).mul(e)}function Zc(o,e){return new this(o).pow(e)}function $c(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:nt(o,1,Zt),n=Math.ceil(o/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(Fs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=ee,n&&o&&(r=Le(10,ee-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function Jc(o){return H(o=new this(o),o.e+1,this.rounding)}function el(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function tl(o){return new this(o).sin()}function nl(o){return new this(o).sinh()}function ol(o){return new this(o).sqrt()}function rl(o,e){return new this(o).sub(e)}function il(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,H(t,this.precision,this.rounding)}function sl(o){return new this(o).tan()}function al(o){return new this(o).tanh()}function ul(o){return H(o=new this(o),o.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var qn=M.constructor=zs(jr);Eo=new qn(Eo);Do=new qn(Do);var V=qn;import{PublicKey as ri}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as cl}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Ys,SYSVAR_RENT_PUBKEY as ll}from"@solana/web3.js";function A({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var ei=[A({pubkey:cl,isWritable:!1}),A({pubkey:Ys.programId,isWritable:!1}),A({pubkey:ll,isWritable:!1})];function ti({publicKey:o,transformSol:e}){let t=ni(o.toString());if(t instanceof Te)return e&&t.equals(Oe)?Z:t;if(e&&t.toString()===Oe.toBase58())return Z;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ni(o){try{return new Te(o)}catch{return o}}var Xo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),zo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Te("SysvarRent111111111111111111111111111111111"),oi=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Yo=new Te("Sysvar1nstructions1111111111111111111111111"),Qo=Ys.programId,Ap=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),wp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Pp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),hp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),kp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Tp=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ip=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Bp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),xp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Sp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Kp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Te("So11111111111111111111111111111111111111112"),Oe=Te.default;function ut(o){return ti({publicKey:o,transformSol:!0})}import{PublicKey as ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qs}from"@solana/spl-token";var Ct={chainId:101,address:ml.default.toBase58(),programId:Qs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ne={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Qs.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var ii=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Oe.toBase58()||e instanceof ri&&Oe.equals(e)){this.decimals=Ne.decimals,this.symbol=Ne.symbol,this.name=Ne.name,this.mint=new ri(Ne.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?ri.default:ti({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=ii;Ie.WSOL=new ii(F(C({},Ne),{mint:Ne.address}));import Ho from"big.js";import fl from"bn.js";import yl from"decimal.js-light";import dl from"toformat";var pl=dl,Un=pl;var jo=ue("module/fraction"),si=Un(Ho),Gn=Un(yl),bl={[0]:Gn.ROUND_DOWN,[1]:Gn.ROUND_HALF_UP,[2]:Gn.ROUND_UP},gl={[0]:Ho.roundDown,[1]:Ho.roundHalfUp,[2]:Ho.roundUp},pe=class{constructor(e,t=new fl(1)){this.numerator=$(e),this.denominator=$(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe($(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe($(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe($(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe($(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||jo.logWithError(`${e} is not an integer.`),e<=0&&jo.logWithError(`${e} is not positive.`),Gn.set({precision:e+1,rounding:bl[n]});let r=new Gn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||jo.logWithError(`${e} is not an integer.`),e<0&&jo.logWithError(`${e} is negative.`),si.DP=e,si.RM=gl[n]||1,new si(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var wl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new pe(ai(n.decimals),ai(r.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&wl.logWithError("mul token not equals");let n=super.mul(t);return new rt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var ui=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Zo=ui;Zo.SOL=new ui(Ct);import Pl from"bn.js";var js=new pe(new Pl(100)),$e=class extends pe{toSignificant(e=5,t,n){return this.mul(js).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(js).toFixed(e,t,n)}};var pt=new it(0),Zs=new it(1),Bf=new it(2),xf=new it(3),Sf=new it(5),ci=new it(10),Kf=new it(100),Cf=new it(1e3),Rf=new it(1e4),Hs=9007199254740991;function $(o){let e=ue("Raydium_parseBigNumberish");if(o instanceof it)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new it(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Hs||o<=-Hs)&&e.logWithError(`BigNumberish number overflow: ${o}`),new it(String(o))):typeof o=="bigint"?new it(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new it(0))}function ai(o){return ci.pow($(o))}function $o(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var kl=ue("Raydium_amount"),Js=Un(hl);function Tl(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):kl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ye=class extends pe{constructor(t,n,r=!0,i){let s=new Jo(0),a=ci.pow(new Jo(t.decimals));if(r)s=$(n);else{let c=new Jo(0),u=new Jo(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Tl(n.toString(),t.decimals);c=$(l),u=$(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return Js.DP=this.token.decimals,new Js(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function $s(o){return typeof o=="object"&&o!==null&&![Ie,ye,Il,pe,Bl,rt,$e].some(e=>typeof e=="object"&&o instanceof e)}function ke(o){return typeof o=="string"?ni(o):Array.isArray(o)?o.map(e=>ke(e)):$s(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,ke(t)])):o}import{PublicKey as Yn,sendAndConfirmTransaction as pi,Transaction as Qn,TransactionMessage as jn,VersionedTransaction as Hn}from"@solana/web3.js";import Ml from"axios";var v={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",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"};import{PublicKey as ta,ComputeBudgetProgram as ea,Transaction as er,TransactionMessage as xl,Keypair as na,VersionedTransaction as oa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sl}from"@solana/spl-token";var Ft=ue("Raydium_txUtil"),ra=1644;function tr(o){let e=[],t=[];return o.microLamports&&(e.push(ea.setComputeUnitPrice({microLamports:o.microLamports})),t.push(v.SetComputeUnitPrice)),o.units&&(e.push(ea.setComputeUnitLimit({units:o.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Sn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function nr(o,e){o.length<1&&Ft.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Ft.logWithError(`no signers provided:, ${e.toString()}`);let t=new er;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ra}catch{return!1}}async function ia(o,e,t,n=!0){let r=new ta("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new er;s.feePayer=r;for(let u of e)nr([...s.instructions,u],[r])||(i.push(s),s=new er,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Kl(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ft.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ft.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ft.debug("filteredLog:",c),l.length||Ft.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function sa(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Ft.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Et(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Ft.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(o,e){let[t,n]=ta.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function Kl(o,e,t){let n=[];if(t){let r=await o.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=r.blockhash,u.lastValidBlockHeight=r.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.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 r=>await(await o.simulateTransaction(r)).value))}catch(r){r instanceof Error&&Ft.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function Xn({instructions:o,payer:e,signers:t}){return nr(o,[e,...t])}function zn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=na.generate().publicKey.toString()}){let i=new xl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new oa(i).serialize()).toString("base64").length<ra}catch{return!1}}var Cl=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function an(o){let e=[];return o.forEach(t=>{t instanceof er&&(t.recentBlockhash||(t.recentBlockhash=Sl.toBase58()),t.feePayer||(t.feePayer=na.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof oa&&(n=Cl(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as ua,AddressLookupTableAccount as or}from"@solana/web3.js";import{PublicKey as aa}from"@solana/web3.js";import{MINT_SIZE as Rl,TOKEN_PROGRAM_ID as Ll,getTransferFeeConfig as Ol,unpackMint as Nl}from"@solana/spl-token";var li=ue("Raydium_accountInfo_util");async function ht(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=mi(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=mi(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&li.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"&&li.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new aa(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&li.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Me(o,e,t){let n=await ht(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>F(C({},r),{accountInfo:n[i]}))}async function Kn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Me(o,e.map(c=>({pubkey:ut(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Rl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Nl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Ll,feeConfig:(a=Ol(u))!=null?a:void 0})}return r[aa.default.toBase58()]=r[Z.toBase58()],r}async function di({connection:o,address:e}){let t=await ht(o,[...new Set(e.map(r=>r.toString()))].map(r=>new ua(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new or({key:s,state:or.deserialize(i.data)});n[s.toString()]=a,rr[s.toString()]=a}return n}var rr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new or({key:new ua("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:or.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"))})};var ir=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}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 Ml.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=tr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}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:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Yn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new Qn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.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 r=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},c=i!=null?i:await Sn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),an([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await pi(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:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions: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 Sn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let P=await pi(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async(g,h)=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((P,k)=>(P.recentBlockhash=f,a[k].length&&P.sign(...a[k]),P));an(g);let h=await this.signAllTransactions(g);if(m){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[P]}),d==null||d([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=d,i=Se(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:rr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new Yn(y));let u=await di({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new jn({payerKey:this.feePayer,recentBlockhash:r?Yn.default.toBase58():await Sn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Hn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),an([m]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:P},"confirmed")}return{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:b}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),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),an(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:P,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:P,signature:h},"confirmed"),b.push(h)}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,h=[],P=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||P()},"processed"),this.connection.getSignatureStatus(k)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let P=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(P)}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=Se(u,["computeBudgetConfig"]),r=t?tr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...r.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 Yn(b));if(c.length<12&&Xn({instructions:p,payer:this.feePayer,signers:f})||Xn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");Xn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Qn().add(...r.instructions,...c)):s.push(new Qn().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=>i[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=>i[p]).filter(p=>p!==void 0);Xn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Qn().add(...r.instructions,...c)):s.push(new Qn().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))||this.signers.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 Sn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,P)=>{h.recentBlockhash=b,a[P].length&&h.sign(...a[P])}),an(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let P of s){let k=await pi(this.connection,P,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[P]}),p==null||p([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});P.push(B)}return{txIds:P,signedTxs:h}}}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:r=[]}=b,i=Se(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:rr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let h of a)s[h]===void 0&&c.push(new Yn(h));let u=await di({connection:this.connection,address:c});for(let[h,P]of Object.entries(u))s[h]=P;let l=t?tr(t):{instructions:[],instructionTypes:[]},m=await Sn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,P)=>F(C({},h),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let P=[...f,h],k=t?[...l.instructions,...P]:P;if(f.length<12&&zn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||zn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}else{let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(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=[h]}}),f.length>0){let P=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}else{let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}y.push(P)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(P=>P.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:P,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),an(p),(S=this.owner)!=null&&S.isKeyPair){if(P){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:q}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:q,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(P){let R=0,I=[],L=async()=>{if(!x[R])return;let q=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:q,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(q,D=>{let J=I.findIndex(G=>G.txId===q);J>-1&&(I[J].status=D.err?"error":"success"),k==null||k([...I]),D.err||L()},"processed"),this.connection.getSignatureStatus(q)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var kt=class{constructor(e){this._owner=e}get publicKey(){return kt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return kt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return kt.isKeyPair(this._owner)}get isPublicKey(){return kt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!kt.isKeyPair(e)}};function mi(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var ca=o=>typeof o=="number";function la(o,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function ma(o,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var da=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),pa=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),$n=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Dy=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Wy=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),fi=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),fa=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),qy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ya=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ba=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Uy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Gy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),_l=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),vl=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Fl=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),ga=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Xy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),zy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),El=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Dl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Wl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Jn={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:vl,IDO_PROGRAM_ID_V4:Fl};var sr={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:El,CREATE_CPMM_POOL_AUTH:Dl,CREATE_CPMM_POOL_FEE_ACC:Wl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";function be(o,e,t){return ae([o.toBuffer(),(t!=null?t:Ul).toBuffer(),e.toBuffer()],new ql("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var eo=1e4;function Pe(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new Tt(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===eo){let c=new Tt(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=to(o.mul(new Tt(eo)),new Tt(eo-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=to(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=to(o.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Rt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function to(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Tt(0))?t.add(new Tt(1)):t}var De={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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}",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"},Ab=C({},De);var Aa="ray_tab_hash",yi="ray_req_hash",Gl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Aa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Aa,o)),o},ar=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Se(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(yi)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Gl()}));try{localStorage.setItem(yi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(yi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ar(F(C({},t),{logCount:o,removeLastLog:!0}))}};var ur=ue("Raydium_Api"),bi=new Map;var cr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=wa.create({baseURL:this.urlConfigs.BASE_HOST||De.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ur.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ur.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&&ar({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ur.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&&ar({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ur.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||De.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||De.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await wa.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||De.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||De.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||De.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||De.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||De.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||De.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||De.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>bi.has(s)?(n.push(bi.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||De.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{bi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ut(t).toBase58(),n&&n!=="undefined"?ut(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||De.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||De.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||De.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||De.CHECK_AVAILABILITY)).data}};var lr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Pa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Si,TOKEN_PROGRAM_ID as tn,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as Pm}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as hm}from"@solana/web3.js";var gi=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new ir({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(gi(e))}logInfo(...e){this.logger.info(gi(e))}logAndCreateError(...e){let t=gi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as fm,createCloseAccountInstruction as ym,createTransferInstruction as bm,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as gm,SystemProgram as Am}from"@solana/web3.js";import wm from"bn.js";import{PublicKey as Ma,Keypair as lm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mm}from"@solana/spl-token";import dm from"bn.js";import{PublicKey as om}from"@solana/web3.js";import Ba,{isBN as xa}from"bn.js";import{bits as zl,BitStructure as $b,blob as Yl,Blob as Jb,cstr as eg,f32 as tg,f32be as ng,f64 as og,f64be as rg,greedy as ig,Layout as Ql,ns64 as sg,ns64be as ag,nu64 as jl,nu64be as ug,offset as cg,s16 as lg,s16be as mg,s24 as dg,s24be as pg,s32 as Hl,s32be as fg,s40 as yg,s40be as bg,s48 as gg,s48be as Ag,s8 as wg,seq as Zl,struct as Pg,Structure as $l,u16 as Jl,u16be as hg,u24 as kg,u24be as Tg,u32 as em,u32be as Ig,u40 as Bg,u40be as xg,u48 as Sg,u48be as Kg,u8 as tm,UInt as nm,union as Cg,Union as Rg,unionLayoutDiscriminator as Lg,utf8 as Og}from"@solana/buffer-layout";var mr=Ql,ha=$l;var Ai=nm;var ka=tm,Lt=Jl;var wi=em;var Ta=jl;var We=Hl;var Ia=Zl;var fe=Yl;var Pi=zl;var un=class extends mr{constructor(t,n,r){super(t,r);this.blob=fe(t),this.signed=n}decode(t,n=0){let r=new Ba(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new Ba(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},dr=class extends mr{constructor(t){super(8,t);this._lower=Pi(wi(),!1),this._upper=Pi(wi(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function E(o){return new Ai(1,o)}function Xe(o){return new Ai(4,o)}function w(o){return new un(8,!1,o)}function Q(o){return new un(16,!1,o)}function Sa(o){return new un(1,!0,o)}function fr(o){return new un(8,!0,o)}function Ka(o){return new un(16,!0,o)}var pr=class extends mr{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new pr(fe(32),e=>new om(e),e=>e.toBuffer(),o)}function qe(o){return new pr(ka(),rm,im,o)}function rm(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function im(o){return o?1:0}var hi=class extends ha{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new hi(o,e,t)}function X(o,e,t){let n,r=typeof e=="number"?e:xa(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=xa(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Ia(o,r,t)}var $t=_([K("mint"),K("owner"),w("amount"),Xe("delegateOption"),K("delegate"),E("state"),Xe("isNativeOption"),w("isNative"),w("delegatedAmount"),Xe("closeAuthorityOption"),K("closeAuthority")]);function sm(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function ki(o,...e){if(!sm(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 Ti(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 Ca(o,e){ki(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),It=(o,e)=>o<<32-e|o>>>e;var Yg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function am(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Ii(o){return typeof o=="string"&&(o=am(o)),ki(o),o}var yr=class{clone(){return this._cloneInto()}},Qg={}.toString;function Ra(o){let e=n=>o().update(Ii(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function um(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var La=(o,e,t)=>o&e^~o&t,Oa=(o,e,t)=>o&e^o&t^e&t,gr=class extends yr{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=br(this.buffer)}update(e){Ti(this);let{view:t,buffer:n,blockLen:r}=this;e=Ii(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=br(e);for(;r<=i-s;s+=r)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ti(this),Ca(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;um(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var cm=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]),Jt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),en=new Uint32Array(64),Bi=class extends gr{constructor(){super(64,32,8,!1),this.A=Jt[0]|0,this.B=Jt[1]|0,this.C=Jt[2]|0,this.D=Jt[3]|0,this.E=Jt[4]|0,this.F=Jt[5]|0,this.G=Jt[6]|0,this.H=Jt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:c}=this;return[e,t,n,r,i,s,a,c]}set(e,t,n,r,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|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)en[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=en[m-15],p=en[m-2],y=It(d,7)^It(d,18)^d>>>3,f=It(p,17)^It(p,19)^p>>>10;en[m]=f+en[m-7]+y+en[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=It(a,6)^It(a,11)^It(a,25),p=l+d+La(a,c,u)+cm[m]+en[m]|0,f=(It(n,2)^It(n,13)^It(n,22))+Oa(n,r,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+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,r,i,s,a,c,u,l)}roundClean(){en.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Na=Ra(()=>new Bi);var mA=ue("Raydium_Util");function _a({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=$t.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:be(o,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ma.default,amount:new dm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function ze({fromPublicKey:o,programId:e=mm}){let t=lm.generate().publicKey.toBase58().slice(0,32);return{publicKey:pm(o,t,e),seed:t}}function pm(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=Na(n);return new Ma(r)}function xi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Cn}=o;return fm(t,e,n,r)}function Ot(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Cn}=o;return ym(e,t,r,n,i)}async function Dt(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption($t.span,n),c=$(t).add(new wm(a)),u=ze({fromPublicKey:r,programId:Cn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Am.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:$t.span,programId:Cn}),xi({mint:new gm(Ne.address),tokenAccount:u.publicKey,owner:i,programId:Cn})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:r,owner:i})]}}function no({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Cn}){return bm(o,e,t,BigInt(String(n)),r,i)}var oo=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}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 be(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:tn},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pm},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=_a({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,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=tn,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!r||r&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||tn),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,P)=>h.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=Si(s,m,s,n,l);if(u){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(P.owner.equals(l)&&Rn.decode(P.data).mint.equals(n)&&Rn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(v.CreateATA);if(n.equals(Z)&&r.amount){let P=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...P.instructions||[]),p.endInstructions.push(...P.endInstructions||[]),p.instructionTypes.push(...P.instructionTypes||[]),p.endInstructionTypes.push(...P.endInstructionTypes||[]),r.amount&&(p.instructions.push(no({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:tn})),p.instructionTypes.push(v.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=ze({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),k=hm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:P+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(k,xi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=tn,autoUnwrapWSOLToSOL:r}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Si(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=u}return r&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=tn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(Z).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=Si(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(tn)&&Rn.decode(f.data).mint.equals(i)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[v.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=tn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(Z))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Se(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Se(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as qm}from"@solana/spl-token";import{PublicKey as he,SystemProgram as Um}from"@solana/web3.js";import{PublicKey as qa}from"@solana/web3.js";var Ki=_([E("instruction")]),Ci=_([E("instruction")]),km=_([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Q("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Tm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Q("perShareReward"),w("lastSlot"),w("perSlotReward")]),Im=_([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Q("perShareRewardA"),w("perSlotRewardA"),E("option"),K("rewardVaultB"),fe(7),w("totalRewardB"),Q("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),Bm=_([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Q("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(km,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Va=new Proxy(Tm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),va=new Proxy(Im,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),ro=new Proxy(Bm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(nn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),xm=_([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ri=_([E("instruction"),w("nonce"),X(xm,5,"rewardTimeInfo")]),Li=_([E("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Oi=_([E("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),UA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),io=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),GA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),Fa=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),2,"rewardDebts"),X(w(),17)]),Ea=_([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Q(),5,"rewardDebts"),X(w(),16)]),Je=_([E("instruction"),w("amount")]),Sm=_([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Sa("digitShift"),X(E(),7,"reserved1"),X(w(),7,"reserved2")]),Da=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(Sm,4,"votingMints"),fr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(w(),11,"reserved3")]),Km=_([fr("startTime"),fr("endTime"),E("kind"),X(E(),15,"reserved")]),Cm=_([X(Km,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),Wa=_([fe(8),K("voterAuthority"),K("registrar"),X(Cm,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var Ua=new qa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ga=new qa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Xa={3:Va,5:va,6:ro},za={3:io,5:Fa,6:Ea},Ni=o=>[3,5,6].indexOf(o)!==-1,Mi=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},nn={"Standard SPL":0,"Option tokens":1},ft={[da.toString()]:3,[pa.toString()]:5,[$n.toString()]:6,[sr.FarmV3.toString()]:3,[sr.FarmV5.toString()]:5,[sr.FarmV6.toString()]:6};import{PublicKey as ie,SystemProgram as cn,SYSVAR_RENT_PUBKEY as Om,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as Ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Nm,TOKEN_PROGRAM_ID as ct,ASSOCIATED_TOKEN_PROGRAM_ID as Mm}from"@solana/spl-token";import wr from"bn.js";function _i(o,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function Vi(o,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function vi(o,e){return ae([e.toBuffer()],o)}function Fi(o,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function Ei(o,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function Di(o,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import st from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function Ye({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var Ya=({programId:o,poolId:e})=>ae([e.toBuffer()],o);function Qa(o){return{isSet:new st(1),rewardPerSecond:$(o.perSecond),rewardOpenTime:$(o.openTime),rewardEndTime:$(o.endTime),rewardType:$(nn[o.rewardType])}}function Wi(o){return $(o.endTime).sub($(o.openTime)).mul($(o.perSecond))}function Ln(o){let e=za[o];return e||so.logWithError("invalid version",o),e}function Rm(o){let e=Xa[o];return e||so.logWithError("invalid version",o),e}function Lm(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new st(t)))return o;let r=new st(t).sub(o.lastSlot);o.lastSlot=new st(t);for(let i of o.rewardInfos){if(e.amount.eq(new st(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new st(10).pow(new st(o.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(o.version===6)for(let r of o.rewardInfos){if(r.rewardState.eq(new st(0)))continue;let i=st.min(new st(n),r.rewardEndTime);if(r.rewardOpenTime.gte(i))continue;let a=i.sub(r.rewardLastUpdateTime).mul(r.rewardPerSecond),c=r.totalReward.sub(r.totalRewardEmissioned);c.lt(a)?(a=c,r.rewardLastUpdateTime=r.rewardLastUpdateTime.add(c.div(r.rewardPerSecond))):r.rewardLastUpdateTime=i,!e.amount.eq(new st(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function pw({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new st(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!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:Ye({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await Me(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let h=Rm(p);(!b||!b.data||b.data.length!==h.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==$t.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=$t.decode(b.data);else if(y==="ledger"){let h=Ln(p);b&&b.data&&(b.data.length!==h.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Lm(u[d].state,u[d].lpVault,m,r));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 st(9)):a.pow(new st(15)),b=p.rewardInfos.map((g,h)=>{let P=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=F(C({},u[d].wrapped),{pendingRewards:b})}return u}function fw(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>la(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ma(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 qi(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=Da.decode(r.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=Wa.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var _m=ue("Raydium_farm_instruction"),co={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 Pr(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||_m.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ki.span);Ki.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:Om,isWritable:!1})];return{instruction:new Ve({programId:r,keys:c,data:a}),instructionType:v.FarmV3CreateLedger}}function ja(o){var n;let e=Buffer.alloc(Ri.span);Ri.encode({instruction:0,nonce:new wr(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...ei,A({pubkey:o.farmId}),A({pubkey:o.farmAuthority,isWritable:!1}),A({pubkey:o.lpVault}),A({pubkey:o.lpMint,isWritable:!1}),A({pubkey:o.lockVault}),A({pubkey:o.lockMint,isWritable:!1}),A({pubkey:(n=o.lockUserAccount)!=null?n:Oe}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(A({pubkey:r.rewardMint,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}));return{instruction:new Ve({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function Ha(o){let e=Buffer.alloc(Ci.span);Ci.encode({instruction:5},e);let t=[A({pubkey:ct,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.lpVault,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}),A({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ve({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Vm(o,e,t,n,r,i,s,a,c,u,l,m,d){let p=_([E("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ct,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:Yo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new Ve({keys:y,programId:o,data:b})}function vm(o,e,t,n){let r=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ve({keys:i,programId:o,data:a})}function Fm(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([E("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ct,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:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new Ve({keys:b,programId:o,data:h})}function Em(o,e,t,n,r,i){let s=_([E("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ve({keys:a,programId:o,data:c})}function Dm(o,e,t,n,r,i,s,a){let c=_([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new Ve({keys:u,programId:o,data:m})}function Wm(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([E("depositEntryIndex"),E("kind"),E("option"),w("startTs"),Xe("periods"),qe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Mm,isSigner:!1,isWritable:!1},{pubkey:ot,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([...co.voterStakeRegistryCreateDepositEntry,...y]);return new Ve({keys:p,programId:o,data:f})}async function Lw({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=_i(n,r,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=Vi(e,a).publicKey,f=vi(e,a).publicKey,{publicKey:b,nonce:g}=Fi(n,u,s),h=be(b,y,c).publicKey,{publicKey:P,nonce:k}=Ei(n,u,s),B=Di(t,r,i,s).publicKey,T=[],S=be(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Nm(s,S,s,y)),await o.getAccountInfo(b)===null){let q=Em(t,r,s,i,s,B);T.push(q,Dm(n,u,b,P,s,s,g,k))}let{index:I,isInit:L}=await qi(o,u,b,y);return L||T.push(Wm(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(Vm(n,u,b,h,S,s,l,a,y,f,e,I,p),vm(n,u,b,P)),T}async function Ow({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=_i(n,r,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=Vi(e,a).publicKey,y=vi(e,a).publicKey,{publicKey:f}=Fi(n,u,s),b=be(f,p,c).publicKey,{publicKey:g}=Ei(n,u,s),h=Di(t,r,i,s).publicKey,P=[],{index:k,isInit:B}=await qi(o,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(Fm(n,u,f,s,h,g,b,be(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),P}function Ui({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Li.span);Li.encode({instruction:3,rewardReopenTime:$(r.openTime),rewardEndTime:$(r.endTime),rewardPerSecond:$(r.perSecond)},i);let s=[A({pubkey:ct,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new Ve({programId:n.programId,keys:s,data:i})}function Gi({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Oi.span);Oi.encode({instruction:4,isSet:new wr(1),rewardPerSecond:$(r.perSecond),rewardOpenTime:$(r.openTime),rewardEndTime:$(r.endTime),rewardType:$(nn[r.rewardType])},i);let s=[...ei,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:r.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:o,isWritable:!1,isSigner:!0})];return new Ve({programId:t.programId,keys:s,data:i})}function Nw(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new ie(e.programId),new ie(e.id)],d=Ye({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(Je.span);Je.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:ct,isWritable:!1}),...u?[A({pubkey:cn.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r})]:[A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r}),A({pubkey:new ie(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(A({pubkey:i[f]})),y.push(A({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new Ve({programId:l,keys:y,data:p})}function lo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ie(e.programId),new ie(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:2,amount:$(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new Ve({programId:a,keys:m,data:l})}function mo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:12,amount:$(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function po(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:$(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function Za(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:10,amount:$(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function $a(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:$(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:r[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:r[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function Ja(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ie(e.programId),new ie(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:1,amount:$(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:r[d]}));return new Ve({programId:a,keys:m,data:l})}var fo=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Oe)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Wi(F(C({},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:r=$n,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new he(e.lpMint.address),lockInfo:{lockMint:Ua,lockVault:Ga},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ze({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Um.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ya({programId:new he(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(nn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(Qa(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Oe)?new he(Ne.address):B.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new he(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:k}=ja({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:[P],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((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(Oe)?new he(Ne.address):n.mint,l=a.rewardInfos.findIndex(g=>new he(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:Oe,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:[Ui({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((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(Oe)?new he(Ne.address):m.mint,p=a.rewardInfos.findIndex(P=>new he(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Oe,{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 h=Ui({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=r.mint.equals(Oe)?new he(Ne.address):r.mint,m=ao({programId:new he(n.programId),poolId:new he(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[Gi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Oe)?new he(Ne.address):l.mint,d=ao({programId:new he(n.programId),poolId:new he(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=Gi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,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=ft[d];Ni(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new he(n.programId),new he(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Ye({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let P={};for(let D of this.scope.account.tokenAccounts)if(a){let J=be(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&J.equals(D.publicKey)&&(P[D.mint.toString()]=D.publicKey)}else P[D.mint.toString()]=D.publicKey;let k=b.lpMint,B=P[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let D of m){let J=s&&D.mint.address===Z.toString(),G=P[D.mint.address];if(!G){let{account:W,instructionParams:Ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new he(D.mint.address),notUseTokenAccount:J,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!J,associatedOnly:J?!1:a,checkCreateATAOwner:c});G=W,Ze&&h.addInstruction(Ze)}P[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==$n.toString()&&!S){let{instruction:D,instructionType:J}=Pr({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[J]})}let R=Mi({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:$(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new he(D))},L=p===6?Ja(I):p===5?$a(I):Za(I),q={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[q[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,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=ft[n.programId];Ni(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 R of this.scope.account.tokenAccounts)if(c){let I=be(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Ye({programId:new he(n.programId),poolId:new he(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);I||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I}),Ln(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===Z.toString(),P=b[g.toString()];if(!P){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new he(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});P=R,I&&f.addInstruction(I)}b[g.toString()]=P;let k=[];for(let R of d){let I=s&&R.mint.address===Z.toString(),L=b[R.mint.address];if(!L){let{account:q,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new he(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:c,checkCreateATAOwner:u});L=q,D&&f.addInstruction(D)}b[R.mint.address]=L,k.push(L)}let B=Mi({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:$(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new he(R))},S=p===6?lo(T):p===5?mo(T):po(T),x={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Oe.toString()?new he(Ne.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Oe,u=this.createTxBuilder(),l;if(t.equals(Oe)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Wi(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new V(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:[qm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ha({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=be(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(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,P=ft[f],k=b.address,B=n&&k===Z.toString(),T=m[k];if(!T){let{account:q,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new he(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=q,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let q of g){let D=n&&q.mint.address===Z.toString(),J=m[q.mint.address];if(!J){let{account:G,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:q.mint.programId,mint:new he(q.mint.address),notUseTokenAccount:D,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:i,checkCreateATAOwner:s});J=G,W&&l.addInstruction(W)}m[q.mint.address]=J,S.push(J)}let x=p[h],R={amount:pt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(q=>new he(q))},I=P===6?lo(R):P===5?mo(R):po(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as je}from"@solana/web3.js";import{AccountLayout as Rd,NATIVE_MINT as vu,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var oP=_([Xe("mintAuthorityOption"),K("mintAuthority"),w("supply"),E("decimals"),E("isInitialized"),Xe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Gm}from"@solana/web3.js";import{MintLayout as eu,TOKEN_PROGRAM_ID as Xm}from"@solana/spl-token";var pP=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new Gm(e));return!t||t.data.length!==eu.span?void 0:eu.decode(t.data)},fP=({mint:o,decimals:e,programId:t=Xm,logoURI:n="",priority:r=3})=>{let i=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:r}},hr=o=>new Ie({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),yo=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Se(i,["amount","isRaw","name"]);return new ye(new Ie({mint:ut(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function yP(o){return o.address===Ct.address?Ne:o}function bP(o){return o.address===Ne.address?Ct:o}var et=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Se(i,["address","programId","decimals"]);return C({chainId:101,address:ut(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},on=o=>o?F(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as ge,TransactionInstruction as Wt,SystemProgram as uu,SYSVAR_RENT_PUBKEY as sd}from"@solana/web3.js";var Xi=_([E("instruction"),w("amountIn"),w("minAmountOut")]),zi=_([E("instruction"),w("maxAmountIn"),w("amountOut")]),KP=_([E("instruction"),E("nonce")]),Yi=_([E("instruction"),E("nonce"),w("startTime")]),bo=_([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("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"),w("lpReserve"),X(w(),3,"padding")]),zm=_([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Qi=_([E("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),ji=_([E("instruction"),w("amountIn")]),CP={4:bo,5:zm},tu=_([w("fee")]);import{PublicKey as Ym}from"@solana/web3.js";var Nn=new Ym("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),mn=5e4,Qm=_([w("x"),w("y"),w("price")]),jm=_([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(Qm,mn,"DataElement")]);function Hm(o,e){return[0,mn-2]}function Zm(o){return[0,mn-2]}function $m(o){return[0,mn-2]}function Jm(o,e,t){let[n,r]=Hm(e,t),i=n,s=r,a=0,c=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=mn-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];i=a+1}}return[a,a,!1]}function Hi(o,e,t){let[n,r,i]=Jm(o,e,t);if(!i)return 0;if(n===r){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[r].x,u=o.DataElement[r].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 ln(o,e,t){return e*o.multiplier/t}function nu(o,e,t){return e*t/o.multiplier}function ed(o,e){let[t,n]=Zm(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>mn-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)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 td(o,e){let[t,n]=$m(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=mn-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)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 ou(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=ed(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].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-(r-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function nd(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=td(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].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-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function od(o,e){let t=ou(o,e,0,!1);return t[3]?t[0]:0}function ru(o,e,t,n){let r=Hi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!0,[u,l,m,d]=ou(o,i,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return nu(o,p,r)}}function iu(o,e,t,n){let r=Hi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!1,[u,l,m,d]=nd(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=i-l;return nu(o,p,r)}}function rd(o){let e=jm.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 su(o,e,t,n){let r=od(o,ln(o,e,Hi(o,e,t)))/o.multiplier;return n?r:1/r}var On=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(Nn);e&&(this._layoutData=rd(e==null?void 0:e.data))}}};var au=ue("Raydium_liquidity_instruction");function cu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Qi.span);Qi.encode({instruction:3,baseAmountIn:$(r),quoteAmountIn:$(i),fixedSide:s==="base"?pt:Zs},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:new ge(e.id)}),A({pubkey:new ge(t.authority),isWritable:!1}),A({pubkey:new ge(t.openOrders),isWritable:!1}),A({pubkey:new ge(t.targetOrders)}),A({pubkey:new ge(e.lpMint.address)}),A({pubkey:new ge(t.vault.A)}),A({pubkey:new ge(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Nn})),c.push(A({pubkey:new ge(e.marketId),isWritable:!1}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:new ge(t.marketEventQueue),isWritable:!1})),new Wt({programId:new ge(e.programId),keys:c,data:a})}function Zi(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(ji.span);ji.encode({instruction:4,amountIn:$(r)},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.mintLp.address}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return s===5?c.push(A({pubkey:Nn})):(c.push(A({pubkey:i.id})),c.push(A({pubkey:i.id}))),c.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function lu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,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:h,openTime:P,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=_([E("instruction"),E("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:id,isSigner:!1,isWritable:!1},{pubkey:uu.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:P,coinAmount:k,pcAmount:B},I),{instruction:new Wt({keys:R,programId:o,data:I}),instructionType:v.AmmV4CreatePool}}function XP(o){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new ge(o.id),isWritable:!1}),A({pubkey:new ge(o.authority),isWritable:!1}),A({pubkey:new ge(o.openOrders),isWritable:!1}),A({pubkey:new ge(o.vault.A),isWritable:!1}),A({pubkey:new ge(o.vault.B),isWritable:!1}),A({pubkey:new ge(o.mintLp.address),isWritable:!1}),A({pubkey:new ge(o.marketId),isWritable:!1}),A({pubkey:new ge(o.marketEventQueue),isWritable:!1})];return new Wt({programId:new ge(o.programId),keys:n,data:t})}function ad({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=ke(o),s=Buffer.alloc(Xi.span);Xi.encode({instruction:9,amountIn:$(t),minAmountOut:$(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return r===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),r===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function ud({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=ke(o),s=Buffer.alloc(zi.span);zi.encode({instruction:11,maxAmountIn:$(t),amountOut:$(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return r===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function kr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return ad(F(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return ud(F(C({},a),{maxAmountIn:r,amountOut:i}),t);au.logWithError("invalid params","params",o)}throw au.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function zP({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Yi.span);Yi.encode({instruction:0,nonce:5,startTime:$(t)},n);let r=ke(o),i=[A({pubkey:Mn,isWritable:!1}),A({pubkey:uu.programId,isWritable:!1}),A({pubkey:sd,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.openOrders}),A({pubkey:r.mintLp.address}),A({pubkey:r.mintA.address,isWritable:!1}),A({pubkey:r.mintB.address,isWritable:!1}),A({pubkey:r.vault.A,isWritable:!1}),A({pubkey:r.vault.B,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:r.id,isWritable:!1}),A({pubkey:r.marketProgramId,isWritable:!1}),A({pubkey:r.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Wt({programId:r.programId,keys:i,data:n})}function mu({poolKeys:o}){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new ge(o.id),isWritable:!1}),A({pubkey:new ge(o.authority),isWritable:!1}),A({pubkey:new ge(o.openOrders),isWritable:!1}),A({pubkey:new ge(o.vault.A),isWritable:!1}),A({pubkey:new ge(o.vault.B),isWritable:!1}),A({pubkey:new ge(o.mintLp.address),isWritable:!1}),A({pubkey:new ge(o.marketId),isWritable:!1}),A({pubkey:new ge(o.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new ge(o.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as rn,ASSOCIATED_TOKEN_PROGRAM_ID as Cu}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as xt,SystemProgram as _n,Keypair as ss}from"@solana/web3.js";import Ru from"bn.js";import wd from"bn.js";function du(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function QP(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function jP(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Tr(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function $i(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Ji(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function go(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function pu(o,e){return go(o,e)?null:$i(o,e)}function fu(o,e){return go(o,e)?null:Ji(o,e)}var cd=Buffer.from("amm_config","utf8"),ld=Buffer.from("pool","utf8"),md=Buffer.from("pool_vault","utf8"),dd=Buffer.from("pool_reward_vault","utf8"),yu=Buffer.from("position","utf8"),pd=Buffer.from("tick_array","utf8"),fd=Buffer.from("operation","utf8"),yd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function JP(o,e){return ae([cd,du(e)],o)}function bu(o,e,t,n){return ae([ld,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function es(o,e,t){return ae([md,e.toBuffer(),t.toBuffer()],o)}function gu(o,e,t){return ae([dd,e.toBuffer(),t.toBuffer()],o)}function Ae(o,e,t){return ae([pd,e.toBuffer(),Tr(t)],o)}function dn(o,e,t,n){return ae([yu,e.toBuffer(),Tr(t),Tr(n)],o)}function yt(o,e){return ae([yu,e.toBuffer()],o)}function Ir(o){return ae([Buffer.from("metadata","utf8"),xn.toBuffer(),o.toBuffer()],xn)}function Ao(o){return ae([fd],o)}function lt(o,e){return ae([yd,e.toBuffer()],o)}import bt from"bn.js";var de=new bt(0),mt=new bt(1),qt=new bt(-1),dt=new bt(1).shln(64),Br=new bt(1).shln(128),ts=dt.sub(mt),wo=64,Au=Br.subn(1),Qe=-443636,tt=-Qe,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),xr=new bt("4295048017"),Sr=new bt("79226673521066979257578248090"),wu=16,Pu="59543866431248",hu="184467440737095516",ku="15793534762490258745",Kr=new bt(10).pow(new bt(6)),bd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(bd||{}),nh={[500]:10,[3e3]:60,[1e4]:200},oh={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,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},Tu={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:[]},rh=new bt("18446744073700000000");var gd=15,le=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(r,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(gd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=Ae(t,n,l[p]);c.push(y)}let m=(await ht(e,c)).map(p=>p!==null?Po.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,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,r,i){let s=Math.floor(e/le.tickCount(t)),a=n?j.searchLowBitFromStart(r,i,s-1,1,t):j.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=_e-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<_e;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=Ae(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=j.getTickArrayStartIndexByTick(r,i),c=Math.floor((r-a)/i),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<_e;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Ae(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(j.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=j.getTickArrayStartIndexByTick(Qe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return _e*e}};import re from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ke from"bn.js";var ns=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*_e*pn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*_e,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(r){let l=e.shln(1024-u-1),m=pu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=fu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ho=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=Qe)throw Error(`extensionTickBoundary check error: ${n}, ${Qe}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let c=j.mergeTickArrayBitmap(e).shln(pn-1-a),u=go(512,c)?null:$i(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=go(512,c)?null:Ji(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),r=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(r=pn-r),r}};import _t from"bn.js";var ko=class{static getfeeGrowthInside(e,t,n){let r=new _t(0),i=new _t(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new _t(0),a=new _t(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=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,h,P;let a=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Pe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Pe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Pe(new _t(new V(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),Pe(new _t(new V(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Iu}from"@solana/spl-token";var Ce=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,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}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){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}=Ae(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ho.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Ae(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Ae(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/le.tickCount(e.tickSpacing)),r=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ho.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Qe||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||r.eq(de)){s.push(p);continue}let y=new Ke(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,dt),P=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<Qe&&(n=le.getArrayStartIndex(Qe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Me(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=xu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Ae(c.programId,c.id,m);i.push({pubkey:d}),r[d.toString()]=c.id}}let s=await Me(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=r[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Po.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!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(yt(p,d).publicKey);let l=await ht(t,u,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=Cr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:P,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ke(0)})),leverage:B,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.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(i){let d=Object.values(m),p=await ht(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Po.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[P].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await ko.GetPositionFees(f,g,T,S),I=await ko.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ke(0))?x:new Ke(0),g.tokenFeeAmountB=R.gte(new Ke(0))?R:new Ke(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Ke(0))?I[L]:new Ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new V(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 V(0))?u=l?Nt.add(new Ke(1)):Mt.sub(new Ke(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Pe(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((q=p.fee)!=null?q:de),u,c),P=Pe(f,d,r,!1),k=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new V(1).div(k),T=f.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=Pe(T,d,r,!1),x=l?e.currentPrice:new V(1).div(e.currentPrice),R=new V(B).sub(x).abs(),I=x,L=new $e(new V(R).mul(10**15).toFixed(0),new V(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Rt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=r.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(C({},u),{mint:u.address,isToken2022:u.programId===Iu.toBase58()})),new Ie(F(C({},l),{mint:l.address,isToken2022:l.programId===Iu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=F(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=F(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),L=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:h.mul(new V(10**(20+d.decimals))).toFixed(0)}),q=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:P.mul(new V(10**(20+d.decimals))).toFixed(0)}),D=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:q,priceImpact:k,fee:D,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[ut(e.mintA.address).toString()],d=r[ut(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 V(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:P}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new V(h.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(P.toString()).div(new V(10).pow(y)).mul(d.value)),S=new V(k.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(B.toString()).div(new V(10).pow(y)).mul(d.value)),x=new V(1).div(T.add(S)),I=new V(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,q=e.rewardDefaultInfos.map(D=>{var W,Ze;let J=D.mint.decimals,G=r[D.mint.address];return c<((W=D.startTime)!=null?W:0)||c>((Ze=D.endTime)!=null?Ze:0)||!D.perSecond||!G||J===void 0?0:new V(G.value).mul(new V(D.perSecond).mul(L)).div(new V(10).pow(J)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:q,apr:I+q.reduce((D,J)=>D+J,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,h;let l=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=Pe(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ke(new V(y.amount.sub((h=y.fee)!=null?h:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ke(0);else if(l.lte(d)){let P=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?P:k}else b=t?new Ke(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ce.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,h,P;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new V(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Pe(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Pe(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Pe(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),Pe(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new Bt(c.id));(await ht(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=yn.decode(c.data))});let s=t.map(c=>lt(new Bt(c.programId),new Bt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new Bt(u.id),version:6,programId:new Bt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new Bt(u.config.id),fundOwner:""}),currentPrice:new V(u.price),exBitmapInfo:a[lt(new Bt(u.programId),new Bt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}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 Uh({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var P,k,B,T;let[u,l,m,d]=e<t?[e,t,n,r]:[t,e,r,n],p=te.priceToSqrtPriceX64(new V(o.price),o.mintA.decimals,o.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[Pe(m,(P=o.mintA.extensions)==null?void 0:P.feeConfig,a,!c),Pe(d,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var os={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Bu(o){return F(C({},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,config:F(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(de)||(i=i.add(mt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(mt)).div(n)}static x64ToDecimal(e,t){return new V(e.toString()).div(V.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(V.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Br).sub(t).mod(Br)}};function ve(o,e){return rs(o.mul(e),64,256)}function Ad(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function rs(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 ne.x64ToDecimal(e).pow(2).mul(V.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(V.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(de))return e;let i=t.shln(wo);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,mt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(wo);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,mt,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<Qe||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=ve(n,new re("18444899583751176192"))),(t&4)!=0&&(n=ve(n,new re("18443055278223355904"))),(t&8)!=0&&(n=ve(n,new re("18439367220385607680"))),(t&16)!=0&&(n=ve(n,new re("18431993317065453568"))),(t&32)!=0&&(n=ve(n,new re("18417254355718170624"))),(t&64)!=0&&(n=ve(n,new re("18387811781193609216"))),(t&128)!=0&&(n=ve(n,new re("18329067761203558400"))),(t&256)!=0&&(n=ve(n,new re("18212142134806163456"))),(t&512)!=0&&(n=ve(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=ve(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=ve(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=ve(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=ve(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=ve(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=ve(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=ve(n,new re("696457651848324352"))),(t&131072)!=0&&(n=ve(n,new re("26294789957507116"))),(t&262144)!=0&&(n=ve(n,new re("37481735321082"))),e>0&&(n=Au.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Nt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),r=Ad(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<wu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=r.add(u).mul(new re(Pu)),d=rs(m.sub(new re(hu)),64,128).toNumber(),p=rs(m.add(new re(ku)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},bn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=bn.getTickWithPriceAndTickspacing(e,t,n,r),s=te.getSqrtPriceX64FromTick(i);return te.sqrtPriceX64ToPrice(s,n,r)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(wo),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),mt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),dt):ne.mulDivFloor(n,t.sub(e),dt)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?ne.mulDivRoundingUp(a,mt,ts):a.shrn(wo)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,ts,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,r,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,r,i),a=ce.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new re(new V(c.toString()).mul(l).toFixed(0)),d=new re(new V(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,P,k,B;let u=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,r,s),[y,f]=[Pe(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),Pe(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[Pe(new re(new V(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),Pe(new re(new V(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Rt(y.expirationTime,f.expirationTime)}}},fn=class{static swapCompute(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(mt):Mt.sub(mt)),s){if(y.lt(Nt))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(Mt))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(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new re(0)},h=p,P=n[p],k=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ce.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,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")}h=L.nextStartIndex;let{publicKey:q}=Ae(e,t,h);R=q,P=n[h];try{x=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Qe?T.tickNext=Qe:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,I,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=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&P.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(Ae(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),c=r.gte(de);if(c){let l=ne.mulDivFloor(r,Kr.sub(new re(i.toString())),Kr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,r.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(r.mul(qt))&&(s.amountOut=r.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new re(i),Kr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var _e=60,pn=512,j=class{static getTickArrayAddressByTick(e,t,n,r){let i=j.getTickArrayStartIndexByTick(n,r),{publicKey:s}=Ae(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=_e)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*_e,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*_e,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*_e:e+t*_e}static mergeTickArrayBitmap(e){let t=new wd(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*_e));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=Ae(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,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.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===r)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.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===r)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Qe||e>tt}static nextInitTick(e,t,n,r,i){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<_e;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=_e-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<_e;){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 r=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}};var Su=_([fe(8),E("bump"),Lt("index"),K(""),Xe("protocolFeeRate"),Xe("tradeFeeRate"),Lt("tickSpacing"),X(w(),8,"")]),Pd=_([Xe("blockTimestamp"),Q("sqrtPriceX64"),Q("cumulativeTimePriceX64"),X(Q(),1,"")]),is=_([fe(8),qe("initialized"),K("poolId"),X(Pd,1e3,"observations"),X(Q(),5,"")]),hd=_([E("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Q("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Q("rewardGrowthGlobalX64")]),yn=_([fe(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Lt("tickSpacing"),Q("liquidity"),Q("sqrtPriceX64"),We("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Q("feeGrowthGlobalX64A"),Q("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Q("swapInAmountTokenA"),Q("swapOutAmountTokenB"),Q("swapInAmountTokenB"),Q("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(hd,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),kd=_([Q("growthInsideLastX64"),w("rewardAmountOwed")]),Cr=_([fe(8),E("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(kd,3,"rewardInfos"),X(w(),8,"")]),pk=_([fe(8),E("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Q(),3,"rewardGrowthInside"),X(w(),8,"")]),Td=_([We("tick"),Ka("liquidityNet"),Q("liquidityGross"),Q("feeGrowthOutsideX64A"),Q("feeGrowthOutsideX64B"),X(Q(),3,"rewardGrowthsOutsideX64"),X(Xe(),13,"")]),Po=_([fe(8),K("poolId"),We("startTickIndex"),X(Td,_e,"ticks"),E("initializedTickCount"),X(E(),115,"")]),Ku=_([fe(329),X(K(),100,"whitelistMints")]),xu=_([fe(8),K("poolId"),X(X(w(),8),ns,"positiveTickArrayBitmap"),X(X(w(),8),ns,"negativeTickArrayBitmap")]);var Lu=ue("Raydium_Clmm"),St={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]},xe=class{static createPoolInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([Q("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,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:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=ze({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[_n.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(is.span),space:is.span,programId:n})],{publicKey:f}=bu(n,a,d,p),{publicKey:b}=es(n,f,d),{publicKey:g}=es(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||Ue),p,g,new U(s.programId||Ue),lt(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,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:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],J=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,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 x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Ae(d,p,f),{publicKey:h}=Ae(d,p,b),{publicKey:P}=be(n.wallet,y,Ue),{publicKey:k}=Ir(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,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 x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Ae(d,p,f),{publicKey:h}=Ae(d,p,b),{publicKey:P}=be(n.wallet,y,Ue),{publicKey:k}=Ir(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,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:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],J=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Ru(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=ss.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Ae(p,y,f),{publicKey:h}=Ae(p,y,b),{publicKey:P}=be(n.wallet,m,Ue),{publicKey:k}=Ir(m),{publicKey:B}=yt(p,m),{publicKey:T}=dn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...St.closePosition,...c]);return new xt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=be(n.wallet,r.nftMint,Ue),{publicKey:a}=yt(i,r.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Ae(c,u,l),{publicKey:p}=Ae(c,u,m),{publicKey:y}=be(r.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Ae(c,u,l),{publicKey:p}=Ae(c,u,m),{publicKey:y}=be(r.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:new Ru(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([Q("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:Xo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ae(u,l,m),{publicKey:y}=Ae(u,l,d),{publicKey:f}=be(r.wallet,n.nftMint,c),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=dn(u,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let P=[];return P.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:P,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=_([w("amount"),w("otherAmountThreshold"),Q("sqrtPriceLimitX64"),qe("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,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:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:Xo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...St.swap,...B]);return new xt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,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===i.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([w("openTime"),w("endTime"),Q("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:$(l),endTime:$(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=gu(i,s,r.mint).publicKey,c=Ao(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([E("rewardIndex"),Q("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,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:$(l),endTime:$(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,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===r.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)&&Lu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Ao(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=_([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:Xo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,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===r.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Lu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,r,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:c}){let[u,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(u,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,c,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Sd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kd}from"@solana/spl-token";import{PublicKey as Bd}from"@solana/web3.js";import Ou from"bn.js";var Nu=new Ou(25),Mu=new Ou(1e4),Id={4:3,5:3};var xd=ue("Raydium_liquidity_serum");function _u({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Bd.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw xd.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import To from"bn.js";function Rr({programId:o}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function gn({name:o,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Cd({programId:o,marketId:e}){let{publicKey:t}=ae([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function cs({programId:o}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Vu({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=gn({name:"amm_associated_seed",programId:a,marketId:t}),l=gn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=cs({programId:a}),p=gn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=gn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=gn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Cd({programId:a,marketId:t}),g=gn({name:"target_associated_seed",programId:a,marketId:t}),h=gn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=_u({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:Sd.default,configId:Rr({programId:a})}}var as;async function Xk({connection:o,poolKeysList:e,config:t}){as||(as=new On({connection:o}),await as.initStableModelLayout());let n=e.map(s=>mu({poolKeys:s}));return(await ia(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=sa(s,"GetPoolData"),c=new To(Et(a,"status")),u=Number(Et(a,"coin_decimals")),l=Number(Et(a,"pc_decimals")),m=Number(Et(a,"lp_decimals")),d=new To(Et(a,"pool_coin_amount")),p=new To(Et(a,"pool_pc_amount")),y=new To(Et(a,"pool_lp_supply")),f="0";try{f=Et(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new To(f)}})}var us={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Lr=o=>{let e={},t=Kd.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:et({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:et({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new V(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new V(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new V(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:us,week:us,month:us,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Rr({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import at from"bn.js";var Io=class extends Be{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new at(new V(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=hr(t[i?"mintB":"mintA"]),[c,u]=[new at(new V(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new at(new V(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new at(new V(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=pt;s.isZero()||(d=m==="base"?$o(s.mul(u),c):$o(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=$o(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new $e(new at(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),P=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(P.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=P,[I,L]=k,[q,D]=B,J=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Vt=await m.handleTokenAccount({side:"in",amount:q,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:W}=Vt,Ze=Se(Vt,["tokenAccount"]);G.addInstruction(Ze);let Tn=await m.handleTokenAccount({side:"in",amount:D,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:hn}=Tn,sn=Se(Tn,["tokenAccount"]);G.addInstruction(sn);let Vo=await m.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:zt}=Vo,kn=Se(Vo,["tokenAccount"]);return G.addInstruction(kn),G.addInstruction({instructions:[cu({poolInfo:n,poolKeys:J,userKeys:{baseTokenAccount:W,quoteTokenAccount:hn,lpTokenAccount:zt,owner:this.scope.ownerPubKey},baseAmountIn:q,quoteAmountIn:D,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:P}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:k}=x,B=Se(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:T}=R,S=Se(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Zi({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,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||be(this.scope.ownerPubKey,W.accountInfo.mint,Vn).publicKey.equals(W.pubkey))&&(g[W.accountInfo.mint.toString()]=W.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let P=r.add(a!=null?a:new at(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let W=ft[s.programId],Ze=Ye({programId:new je(s.programId),poolId:new je(s.id),owner:this.scope.ownerPubKey,version:W}),hn,sn=await this.scope.connection.getAccountInfo(Ze);if(sn&&(hn=Ln(W).decode(sn.data)),W!==6&&!hn){let{instruction:Yt,instructionType:zr}=Pr({id:new je(s.id),programId:new je(s.programId),version:W,ledger:Ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Yt],instructionTypes:[zr]})}let zt=[];for(let Yt of s.rewardInfos){let zr=Yt.mint.address===Ie.WSOL.mint.toString();if(g[Yt.mint.address])zt.push(g[Yt.mint.address]);else{let{account:Bs,instructionParams:xs}=await this.scope.account.getOrCreateTokenAccount({mint:new je(Yt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!zr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Bs||this.logAndCreateError("farm reward account not found:",Yt.mint.address),xs&&b.addInstruction(xs),zt.push(Bs)}}let kn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Vt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:kn,lpAccount:h,rewardAccounts:zt},Tn=ft[s.programId],Vo=Tn===6?lo(Vt):Tn===5?mo(Vt):po(Vt),cc={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[Vo],instructionTypes:[cc[Tn]]})}let I=await this.getAmmPoolKeys(t.id),L=Zi({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:P});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[q,D]=t.mintA.address===n.mintA.address?[T,x]:[x,T],J=await this.scope.clmm.getClmmPoolKeys(t.id),G=await xe.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:J,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:q,tokenAccountB:D},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,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&&r.mint.equals(vu),h=u.useSOLBalance&&i.mint.equals(vu),P=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Vu({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=lu(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:be(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[I],instructionTypes:[L]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Rr({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return tu.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,c]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new V(y.toString()).div(p.toString());else{let I=su(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);d==="quote"?b=new V(1e6).div(I*1e6):b=new V(I*1e6).div(1e6)}let g=n,h=new at(0),P=new at(0);if(!g.isZero())if(f){P=to(g.mul(Nu),Mu);let I=g.sub(P),L=p.add(I);h=y.mul(I).div(L)}else{P=g.mul(new at(2)).div(new at(1e4));let I=g.sub(P);d==="quote"?h=new at(ru(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new at(iu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new at(new V(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new V(h.toString()).div(new V(g.sub(P).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new V(h.toString()).div(g.sub(P).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:P}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!1,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===Z.toBase58(),h=y&&b.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),P||this.logAndCreateError("input token account not found",f.address);let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(b.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:d});if(m.addInstruction(T||{}),B===void 0)throw new Error("output token account not found");let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[kr({version:x,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Me(this.scope.connection,t.map(l=>({pubkey:new je(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=bo.decode(m.accountInfo.data);i[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await Me(this.scope.connection,s.map(l=>({pubkey:new je(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new at(Rd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new V(p.toString()).div(new V(10).pow(m.quoteDecimal.toString())).div(new V(d.toString()).div(new V(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=Lr({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as se}from"@solana/web3.js";import gt from"bn.js";import{AccountLayout as Fu,TOKEN_PROGRAM_ID as Eu}from"@solana/spl-token";var Bo=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||se.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new gt(new se(r.address).toBuffer()).gt(new gt(new se(i.address).toBuffer()))?[i,r,new V(1).div(a)]:[r,i,a],b=te.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:c,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(u),d.versionBuild({txVersion:m,extInfo:{address:F(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:c.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:f.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:[]}},Tu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,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,h=n.useSOLBalance&&e.mintA.address===Z.toString(),P=n.useSOLBalance&&e.mintB.address===Z.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!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 I=t||await this.getClmmPoolKeys(e.id),L=await xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===Z.toBase58(),h=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:u,checkCreateATAOwner:l});P&&(f=P),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,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===Z.toString(),g=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(P||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(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});k&&(f=k),p.addInstruction(B||{}),!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=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,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:r,baseAmount:i,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===Z.toString(),b=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(h||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,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:r,ownerInfo:i,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=i.useSOLBalance&&t.mintA.address===Z.toString(),f=i.useSOLBalance&&t.mintB.address===Z.toString(),b,g,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(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=h,P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(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=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===Z.toString(),q;if(I.mint.address===t.mintA.address)q=b;else if(I.mint.address===t.mintB.address)q=g;else{let{account:D,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(I.mint.programId),mint:new se(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});q=D,J&&p.addInstruction(J)}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),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!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()===Z.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(n.mint.address),mint:new se(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new se(n.mint.programId),mint:new se(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===Z.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,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=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new se(m.mint.programId),mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},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:r=!0,checkCreateATAOwner:i=!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(Z),{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 gt(new V(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:r,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.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:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Z.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(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:i,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=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:i=!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(Z),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(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:r,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.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:r=!0,checkCreateATAOwner:i=!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(Z),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(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:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===Z.toBase58(),b=c.useSOLBalance&&e.mintB.address===Z.toBase58(),g;!s||s.equals(new V(0))?g=y?Nt.add(new gt(1)):Mt.sub(new gt(1)):g=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let P;if(!P){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=B,T&&p.addInstruction(T)}(!h||!P)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},inputMint:new se(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)r?be(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(P=>!P.liquidity.isZero()||P.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Z.toString(),y=n.useSOLBalance&&d.mintB.address===Z.toString(),f=u[d.mintA.address];if(!f){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new se(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=P,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new se(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=P,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let P of d.rewardDefaultInfos){let k=n.useSOLBalance&&P.mint.address===Z.toString(),B=u[P.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(P.mint.programId),mint:new se(P.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}u[P.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let P of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new gt(0),amountMinA:new gt(0),amountMinB:new gt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ao(e).publicKey);return t?Ku.decode(t.data).whitelistMints.filter(r=>!r.equals(se.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new gt(1))).map(s=>yt(new se(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=Cr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Me(this.scope.connection,e.map(i=>({pubkey:new se(i)})),t),r={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=yn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),r=await Me(this.scope.connection,Array.from(n).map(c=>({pubkey:new se(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Su.decode(c.accountInfo.data))});let s=await Ce.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:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?on((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?on((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ce.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()]),r=await Kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new se(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Me(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Bu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Fu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Fu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as Y}from"@solana/web3.js";import{NATIVE_MINT as Dr,TOKEN_PROGRAM_ID as Gt,AccountLayout as Xd}from"@solana/spl-token";import Wu from"bn.js";var ls=new Wu(1e6);function Ld(o,e,t){return o.mul(e).add(t).sub(new Wu(1)).div(t)}function Du(o,e,t){return o.mul(e).div(t)}var Or=class{static tradingFee(e,t){return Ld(e,t,ls)}static protocolFee(e,t){return Du(e,t,ls)}static fundFee(e,t){return Du(e,t,ls)}};import xo from"bn.js";function Nr(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Od(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=Nr(o,e);return n.gt(vn)&&(t=t.add(new xo(1)),e=o.div(t),n=Nr(o,t),n.gt(vn)&&(e=e.add(new xo(1)))),[t,e]}var vn=new xo(0),Mr=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Od(r,i),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,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Nr(e.mul(n),t).gt(vn)&&s.gt(vn)&&(s=s.add(new xo(1))),Nr(e.mul(r),t).gt(vn)&&a.gt(vn)&&(a=a.add(new xo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var qu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(qu||{}),_r=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,r){let i=Or.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Mr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Nd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Md=Buffer.from("amm_config","utf8"),_d=Buffer.from("pool","utf8"),Vd=Buffer.from("pool_lp_mint","utf8"),vd=Buffer.from("pool_vault","utf8"),Fd=Buffer.from("observation","utf8");function Fn(o){return ae([Nd],o)}function Ed(o,e){return ae([Md,qd(e)],o)}function Dd(o,e,t,n){return ae([_d,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Wd(o,e){return ae([Vd,e.toBuffer()],o)}function Uu(o,e,t){return ae([vd,e.toBuffer(),t.toBuffer()],o)}function Vr(o,e){return ae([Fd,e.toBuffer()],o)}function qd(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Gu({programId:o,mintA:e,mintB:t}){let n=Ed(o,0).publicKey,r=Fn(o).publicKey,i=Dd(o,n,e,t).publicKey,s=Wd(o,i).publicKey,a=Uu(o,i,e).publicKey,c=Uu(o,i,t).publicKey,u=Vr(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as So}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as Xu,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";var Gd=ue("Raydium_cpmm"),Ko={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]};function zu(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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:ms,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ud,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:P},T),new So({keys:B,programId:o,data:Buffer.from([...Ko.initialize,...T])})}function Yu(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:Xu,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 Gd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new So({keys:b,programId:o,data:Buffer.from([...Ko.deposit,...g])})}function Qu(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:Xu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:zo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new So({keys:b,programId:o,data:Buffer.from([...Ko.withdraw,...g])})}function vr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new So({keys:g,programId:o,data:Buffer.from([...Ko.swapBaseInput,...h])})}function Fr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,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}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new So({keys:g,programId:o,data:Buffer.from([...Ko.swapBaseOutput,...h])})}import Fe from"bn.js";var ju=_([fe(8),E("bump"),qe("disableCreatePool"),Lt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Er=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var Co=class extends Be{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 Me(this.scope.connection,e.map(m=>({pubkey:new Y(m)}))),r={},i=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=Er.decode(d.accountInfo.data);r[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Me(this.scope.connection,m.map(p=>({pubkey:new Y(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]]=ju.decode(y.data)}}let c={},u=await Me(this.scope.connection,s.map(m=>({pubkey:new Y(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 Fe(Xd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){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(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new V(y.toString()).div(new V(10).pow(d.mintDecimalB)).div(new V(p.toString()).div(new V(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var c,u,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[r]:F(C({},i),{id:new Y(r),configInfo:i.configInfo,version:7,authority:Fn(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?on((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?on((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?on(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?on(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.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:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new V(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new V(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Se(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var q,D,J;let d=r.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),p=new Fe(new Y(u.mintA.address).toBuffer()).lte(new Fe(new Y(u.mintB.address).toBuffer())),[y,f]=p?[u.mintA,u.mintB]:[u.mintB,u.mintA],[b,g]=p?[u.mintAAmount,u.mintBAmount]:[u.mintBAmount,u.mintAAmount],h=r.useSOLBalance&&y.address===Dr.toBase58(),P=r.useSOLBalance&&f.address===Dr.toBase58(),[k,B]=[new Y(y.address),new Y(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new Y(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:g}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=Gu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[zu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,be(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new Y((D=y.programId)!=null?D:Gt),new Y((J=f.programId)!=null?J:Gt),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(c),T.versionBuild({txVersion:a,extInfo:{address:F(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,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"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({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(C({},t),{lpAmount:new V(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new $e(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new V(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,P=t.mintA.address===Dr.toString(),k=t.mintB.address===Dr.toString(),B=this.createTxBuilder(),[T,S]=[new Y(t.mintA.address),new Y(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let q=await m.getCreatedTokenAccount({mint:new Y(t.lpMint.address)}),Ze=await m.handleTokenAccount({side:"out",amount:0,mint:new Y(t.lpMint.address),tokenAccount:q,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=Ze,J=Se(Ze,["tokenAccount"]);B.addInstruction(J);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new $e(new Fe(1)).sub(s);return B.addInstruction({instructions:[Yu(new Y(t.programId),this.scope.ownerPubKey,new Y(G.authority),new Y(t.id),D,x,I,new Y(G.vault.A),new Y(G.vault.B),T,S,new Y(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[v.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var D,J;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new $e(new Fe(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(r.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(r.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[Pe(l,t.mintA.extensions.feeConfig,d,!0),Pe(m,t.mintB.extensions.feeConfig,d,!0)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new Y(t.mintA.address),new Y(t.mintB.address)],P=g.equals(Z),k=h.equals(Z),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new Y(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:[Qu(new Y(t.programId),this.scope.ownerPubKey,new Y(q.authority),new Y(t.id),L,B,T,new Y(q.vault.A),new Y(q.vault.B),g,h,new Y(t.lpMint.address),r,l.sub((D=p.fee)!=null?D:new Fe(0)),m.sub((J=y.fee)!=null?J:new Fe(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:q.lookupTableAccount?[q.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,q;let{poolInfo:t,poolKeys:n,baseIn:r,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:c,txVersion:u}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new Y(t.mintA.address),new Y(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Fe((1-s)*1e4)).div(new Fe(1e4));let b=t.mintA.address===Z.toBase58(),g=t.mintB.address===Z.toBase58(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new Y((S=t.mintA.programId)!=null?S:Gt),owner:this.scope.ownerPubKey,createInfo:b||!r?{payer:this.scope.ownerPubKey,amount:r?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new Y((x=t.mintB.programId)!=null?x:Gt),owner:this.scope.ownerPubKey,createInfo:g||r?{payer:this.scope.ownerPubKey,amount:r?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),!h&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[r?vr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),h,k,new Y(T.vault.A),new Y(T.vault.B),new Y((R=t.mintA.programId)!=null?R:Gt),new Y((I=t.mintB.programId)!=null?I:Gt),y,f,Vr(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Fr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),k,h,new Y(T.vault.B),new Y(T.vault.A),new Y((L=t.mintB.programId)!=null?L:Gt),new Y((q=t.mintA.programId)!=null?q:Gt),f,y,Vr(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[r?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(c),p.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=_r.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new V(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Fe((1-r)*1e4)).div(new Fe(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:r,slippage:i,epochInfo:s,baseIn:a}){var h,P,k,B,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Fe(new V(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Pe(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Fe(0)),d=new Fe(new V(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(P=l.fee)==null?void 0:P.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:pt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=zd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=Pe(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new $e(new Fe(1)).add(i),g=Pe(b.mul(f.amount.sub((B=f.fee)!=null?B:new Fe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function zd(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new Fe(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new Fe(1))),{amountA:r,amountB:i}}import{PublicKey as wn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as bs,createTransferInstruction as tc}from"@solana/spl-token";import Ur from"bn.js";import{TOKEN_PROGRAM_ID as ds,TOKEN_2022_PROGRAM_ID as Yd,ASSOCIATED_TOKEN_PROGRAM_ID as Qd}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as ps,SystemProgram as fs}from"@solana/web3.js";import An from"bn.js";function wB(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([E("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:fs.programId,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:new z(t.programId),isSigner:!1,isWritable:!1},{pubkey:new z(t.id),isSigner:!1,isWritable:!0},{pubkey:new z(n.id),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(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=ke(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 z("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=ke(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 ps({keys:p,programId:o,data:y})}function PB(o,e,t,n,r,i,s,a,c,u){let l=_([E("instruction")]),m=[{pubkey:fs.programId,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:new z(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new z(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new z(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(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=ke(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 z("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=ke(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 ps({keys:m,programId:o,data:d})}function jd(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:ds,isWritable:!1}),A({pubkey:Yd,isWritable:!1}),A({pubkey:Qd,isWritable:!1}),A({pubkey:fs.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:r}));let g=[c,u],h=[l,m],P=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=P[S]===x.mintA.address;if(b.push(A({pubkey:new z(x.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:r})):b.push(A({pubkey:n})),b.push(A({pubkey:new z(P[S])})),b.push(A({pubkey:new z(P[S+1])})),x.version===6){let I=h[S];b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)})),b.push(A({pubkey:zo})),b.push(A({pubkey:lt(new z(x.programId),new z(x.id)).publicKey})),f.push(Hd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(A({pubkey:new z(L)}))}else if(x.version===5){let I=h[S];b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(I.marketProgramId)})),b.push(A({pubkey:new z(I.marketAuthority)})),b.push(A({pubkey:ya,isWritable:!1})),b.push(A({pubkey:new z(I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.marketId)})),b.push(A({pubkey:new z(I.marketBids)})),b.push(A({pubkey:new z(I.marketAsks)})),b.push(A({pubkey:new z(I.marketEventQueue)})),b.push(A({pubkey:new z(I.marketBaseVault)})),b.push(A({pubkey:new z(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(L?I.id:I.marketProgramId)})),b.push(A({pubkey:new z(L?I.id:I.marketAuthority)})),b.push(A({pubkey:new z(L?I.id:I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(L?I.id:I.marketId)})),b.push(A({pubkey:new z(L?I.id:I.marketBids)})),b.push(A({pubkey:new z(L?I.id:I.marketAsks)})),b.push(A({pubkey:new z(L?I.id:I.marketEventQueue)})),b.push(A({pubkey:new z(L?I.id:I.marketBaseVault)})),b.push(A({pubkey:new z(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(A({pubkey:new z(I.authority)})),b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)}))}else throw Error("pool type error")}let k=_([E("insId"),w("amountIn"),w("amountOut"),X(Q(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ps({keys:b,programId:o,data:B})}function Hd(o,e){if(o)if(e){let t=new An(o).div(new An(25));return t.gt(xr)?t:xr}else{let t=new An(o).mul(new An(25));return t.lt(Sr)?t:Sr}else return e?xr:Sr}function Hu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?Nt.add(mt):Mt.sub(mt);return xe.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((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new An(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:[d?vr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new z(m.mintA.address),new z(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):Fr(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new z(m.mintB.address),new z(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[kr({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 An(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?v.AmmV5SwapBaseIn:v.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:[jd(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 An(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Zu={[fi.toBase58()]:3},$u={3:fi};var ys=_([fe(5),fe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),Ju={3:ys};import{PublicKey as ec}from"@solana/web3.js";var Wr=ue("Serum"),qr=class{static getProgramId(e){let t=$u[e];return t||Wr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Zu[t];return n||Wr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ju[e];return t||Wr.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()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=ec.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Wr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:ec.default,nonce:r}}};var Xt=new Ur(0),Ro=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=$(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[no({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ot({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Z),m=u.amount.token.mint.equals(Z),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?bs:Re,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=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?bs:Re);m&&a.addInstruction({endInstructions:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?bs:Re)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=Hu({routeProgram:i,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[tc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(P);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[tc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=fa,clmm:n=ba,cpmm:r=ga}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:bo.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=i.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:yn.span}],dataSlice:{offset:yn.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(r,{dataSlice:{offset:Er.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:r,cpmmPools:i}){e=e.toString()===wn.default.toString()?Z:e,t=t.toString()===wn.default.toString()?Z:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,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:Re,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:Re,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:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(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:Re,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:Re,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:Re,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:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,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:Re,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:Re,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:Re,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&&i[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&&i[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 r=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 i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Lr(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new wn(f.mintA.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new wn(f.mintB.address),programId:Re,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(Re)?(r.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}):r.add(b),f.mintProgramB.equals(Re)?(r.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}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let u=await Kn({connection:this.scope.connection,mints:Array.from(r).map(f=>new wn(f))});a=C(C({},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(C({},f),{[b]:F(C({},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:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,h,P,k,B,T,S,x,R;let m=l===void 0?new Ur(0):e.raw.mul(new Ur(l.feeBps.toNumber())).div(new Ur(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:ut(t.address).toString()}),b=[];for(let I of n)try{b.push(F(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(r)){let q={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},D=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:q,amountIn:p})}}catch(W){this.logDebug("route in error",G.version,G.id.toString(),W.message);return}}).sort((G,W)=>{var sn,zt,kn,Vt;let Ze=G===void 0?Xt:G.data.amountOut.amount.raw.sub((zt=(sn=G.data.amountOut.fee)==null?void 0:sn.raw)!=null?zt:Xt),hn=W===void 0?Xt:W.data.amountOut.amount.raw.sub((Vt=(kn=W.data.amountOut.fee)==null?void 0:kn.raw)!=null?Vt:Xt);return Ze.lt(hn)?1:-1})[0];if(D===void 0)continue;let J=new ye(hr(q),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Xt));for(let G of L.out)try{let W=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:J});b.push(F(C({},W),{allTrade:!!(D.data.allTrade&&W.allTrade),amountIn:D.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new V(new rt({baseToken:D.data.amountIn.amount.token,denominator:D.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(P=W.amountOut.fee)==null?void 0:P.raw)!=null?k:Xt)}).toFixed()),priceImpact:new V(D.data.priceImpact.add(W.priceImpact).toFixed()),fee:[D.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[D.pool,G],remainingAccounts:[D.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new ye(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Xt).add((R=(x=W.amountOut.fee)==null?void 0:x.raw)!=null?R:Xt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&W.poolReady,poolType:[D.data.poolType,W.poolType],feeConfig:y,expirationTime:Rt(D.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",G.version,G.id.toString(),W.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,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:h,executionPriceX64:P}=Ce.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new V(y.toFixed()),executionPrice:new V(f.toFixed()),priceImpact:new V(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Rt(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:yo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:yo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,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:yo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:yo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,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 r=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});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=this.scope.liquidity.getRpcPoolInfos(Array.from(r));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 Me(this.scope.connection,Array.from(s).map(l=>({pubkey:new wn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=ys.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:qr.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(C({},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=C({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:cs({programId:new wn(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:Fn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:F(C({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{TOKEN_PROGRAM_ID as Zd}from"@solana/spl-token";import{PublicKey as $d,Transaction as gs,TransactionInstruction as Jd}from"@solana/web3.js";import nc from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return ae([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ae([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new nc(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>He.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<He.VERSION_PROJECT.length;l++)a.push(...s.map(m=>He.getPdaOwnerId(t,m,r,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==He.POOL_LAYOUT.span||b.data.length!==He.OWNER_LAYOUT.span)continue;let g=He.POOL_LAYOUT.decode(f.data),h=He.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new nc(0))).filter(x=>!x).length!==3,T=i>P&&i<k&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[m],openTime:P,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];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(Ie.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!c.mintAddress.equals(Ie.WSOL.mint),associatedOnly:c.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[He.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i={};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(Ie.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[He.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:r,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return nr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new gs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new gs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new gs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Zd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Jd({keys:i,programId:e,data:a})}},At=He;At.CLAIMED_NUM=3,At.POOL_LAYOUT=_([fe(8),E("bump"),E("status"),w("openTime"),w("endTime"),K("ammId"),X(_([E("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),At.OWNER_LAYOUT=_([fe(8),E("bump"),E("version"),K("poolId"),K("owner"),w("lpAmount"),X(_([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),At.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new $d(e)),At.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},At.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Lo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ac}from"@solana/spl-token";import Oo from"bn.js";import{TransactionInstruction as tp,SYSVAR_RENT_PUBKEY as np}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as oc}from"@solana/spl-token";import{createInitializeAccountInstruction as rc}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as ic}from"@solana/web3.js";function ep(o="accountFlags"){let e=new dr(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 As=_([fe(5),ep("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function op({programId:o,marketInfo:e}){let t=_([E("version"),Xe("instruction"),w("baseLotSize"),w("quoteLotSize"),Lt("feeRateBps"),w("vaultSignerNonce"),w("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:np,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}:[]),r=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},r),new tp({keys:n,programId:o,data:r})}async function sc({connection:o,wallet:e,marketInfo:t}){let n=new ic,r=await o.getMinimumBalanceForRentExemption(165);n.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:oc}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:oc}),rc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),rc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new ic;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(As.span),space:As.span,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),op({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:[v.CreateAccount,v.CreateAccount,v.InitAccount,v.InitAccount]},{transaction:i,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.InitMarket]}]}var En=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let c=this.scope.ownerPubKey,u=ze({fromPublicKey:c,programId:i}),l=ze({fromPublicKey:c,programId:i}),m=ze({fromPublicKey:c,programId:i}),d=ze({fromPublicKey:c,programId:i}),p=ze({fromPublicKey:c,programId:i}),y=ze({fromPublicKey:c,programId:ac}),f=ze({fromPublicKey:c,programId:ac}),b=0,g=new Oo(100);function h(){let R=new Oo(0);for(;;)try{return{vaultOwner:Lo.createProgramAddressSync([u.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new Oo(25555)))throw Error("find vault owner error")}}let{vaultOwner:P,vaultSignerNonce:k}=h(),B=new Oo(Math.round(10**e.decimals*n)),T=new Oo(Math.round(n*10**t.decimals*r));if(B.eq(pt))throw Error("lot size is too small");if(T.eq(pt))throw Error("tick size or lot size is too small");let S=await sc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:u,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:P,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Lo(e.mint),quoteMin:new Lo(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Lo(e.mint),quoteMin:new Lo(t.mint)}})}};import{PublicKey as Mo}from"@solana/web3.js";import{TransactionInstruction as Ps,SYSVAR_CLOCK_PUBKEY as rp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hs}from"@solana/spl-token";var ws=_([E("instruction"),Ta("amount")]),No=_([E("instruction")]);function oS({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:oi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],r=Buffer.alloc(ws.span);return ws.encode({instruction:1,amount:Number(e)},r),new Ps({keys:n,programId:o,data:r})}function Gr({programId:o},e){let t=[{pubkey:hs,isSigner:!1,isWritable:!1},{pubkey:oi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(No.span);return No.encode({instruction:2},n),new Ps({keys:t,programId:o,data:n})}function ks(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(No.span);No.encode({instruction:2},s);let a=[{pubkey:hs,isWritable:!1,isSigner:!1},{pubkey:rp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Ps({programId:e.programId,keys:a,data:s})}import uc from"bn.js";var ip={[Jn.IDO_PROGRAM_ID_V1.toString()]:1,[Jn.IDO_PROGRAM_ID_V2.toString()]:2,[Jn.IDO_PROGRAM_ID_V3.toString()]:3,[Jn.IDO_PROGRAM_ID_V4.toString()]:4},Dn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=ip[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new uc(e.coin).isZero(),!new uc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Z),{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:r});!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(Z),{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:r});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?[Gr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Mo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Gr({programId:new Mo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Mo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Gr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Mo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});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 Mo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ks(F(C({},g),{side:"base"}))]:[],...l?[ks(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as sp}from"@solana/web3.js";import{MintLayout as ap,TOKEN_2022_PROGRAM_ID as Ts,TOKEN_PROGRAM_ID as Is}from"@solana/spl-token";var _o=class extends Be{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:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(r,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(Ct.address,Ct),this._mintGroup.official.add(Ct.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ts.toBase58():Is.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(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ts.toBase58():Is.toBase58()})),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(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ts.toBase58():Is.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(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Ct;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new sp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=ap.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 Xr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new kt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new fo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Io({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new _o({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ro({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Bo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Co({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new At({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new En({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Dn({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=up({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new cr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new Xr(F(C({},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(lr);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Pa);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(lr),new Error(lr)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var i;let n=(i=this.apiData.jupTokenList)==null?void 0:i[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let r=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=F(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:r}}),this.apiData.jupTokenList[e].data}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 iK=o=>o;export{cd as AMM_CONFIG_SEED,wu as BIT_PRECISION,Bo as Clmm,Su as ClmmConfigLayout,xe as ClmmInstrument,Mr as ConstantProductCurve,ju as CpmmConfigInfoLayout,Or as CpmmFee,Er as CpmmPoolInfoLayout,_r as CurveCalculator,Qm as DataElement,ns as EXTENSION_TICKARRAY_BITMAP_SIZE,Ua as FARM_LOCK_MINT,Ga as FARM_LOCK_VAULT,ft as FARM_PROGRAM_TO_VERSION,za as FARM_VERSION_TO_LEDGER_LAYOUT,Xa as FARM_VERSION_TO_STATE_LAYOUT,Kr as FEE_RATE_DENOMINATOR,ls as FEE_RATE_DENOMINATOR_VALUE,gd as FETCH_TICKARRAY_COUNT,bd as Fee,Mu as LIQUIDITY_FEES_DENOMINATOR,Nu as LIQUIDITY_FEES_NUMERATOR,Id as LIQUIDITY_VERSION_TO_SERUM_VERSION,CP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Pu as LOG_B_2_X32,hu as LOG_B_P_ERR_MARGIN_LOWER_X64,ku as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,As as MARKET_STATE_LAYOUT_V2,ys as MARKET_STATE_LAYOUT_V3,Ju as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,Sr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,xr as MIN_SQRT_PRICE_X64_ADD_ONE,Qe as MIN_TICK,Nn as MODEL_DATA_PUBKEY,qr as Market,ne as MathUtil,ts as MaxU64,Au as MaxUint128,qt as NEGATIVE_ONE,mt as ONE,fd as OPERATION_SEED,is as ObservationInfoLayout,Pd as ObservationLayout,Ku as OperationLayout,dd as POOL_REWARD_VAULT_SEED,ld as POOL_SEED,yd as POOL_TICK_ARRAY_BITMAP_SEED,md as POOL_VAULT_SEED,yu as POSITION_SEED,yn as PoolInfoLayout,Ce as PoolUtils,Cr as PositionInfoLayout,kd as PositionRewardInfoLayout,ko as PositionUtils,pk as ProtocolPositionLayout,Br as Q128,dt as Q64,Xr as Raydium,hd as RewardInfo,qu as RoundDirection,Zu as SERUM_PROGRAMID_TO_VERSION,$u as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,oP as SPL_MINT_LAYOUT,te as SqrtPriceMath,On as StableLayout,fn as SwapMath,pn as TICK_ARRAY_BITMAP_SIZE,pd as TICK_ARRAY_SEED,_e as TICK_ARRAY_SIZE,nh as TICK_SPACINGS,Ne as TOKEN_WSOL,Ut as TickArrayBitmap,xu as TickArrayBitmapExtensionLayout,ho as TickArrayBitmapExtensionUtils,Po as TickArrayLayout,Td as TickLayout,bn as TickMath,le as TickQuery,j as TickUtils,wo as U64Resolution,rh as U64_IGNORE_RANGE,Wa as Voter,Cm as VoterDepositEntry,Km as VoterLockup,Da as VoterRegistrar,Sm as VoterVotingMintConfig,de as ZERO,Qi as addLiquidityLayout,Ki as associatedLedgerAccountLayout,Wi as calFarmRewardAmount,Ld as ceilDiv,No as claimLayout,Bu as clmmComputeInfoToApiInfo,Ot as closeAccountInstruction,Pr as createAssociatedLedgerAccountInstruction,tu as createPoolFeeLayout,lu as createPoolV4InstructionV2,KP as createPoolV4Layout,Dt as createWSolAccountInstructions,Je as dwLayout,Oi as farmAddRewardLayout,UA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,GA as farmLedgerLayoutV5_1,Fa as farmLedgerLayoutV5_2,Ea as farmLedgerLayoutV6_1,Qa as farmRewardInfoToConfig,Ri as farmRewardLayout,Li as farmRewardRestartLayout,xm as farmRewardTimeInfoLayout,Va as farmStateV3Layout,va as farmStateV5Layout,ro as farmStateV6Layout,pw as fetchMultipleFarmInfoAndUpdate,Xk as fetchMultipleInfo,Xi as fixedSwapInLayout,zi as fixedSwapOutLayout,Du as floorDiv,rd as formatLayout,ze as generatePubKey,Ya as getAssociatedAuthority,Rr as getAssociatedConfigId,Ye as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,Cd as getAssociatedOpenOrders,Vu as getAssociatedPoolKeys,Ed as getCpmmPdaAmmConfigId,Dd as getCpmmPdaPoolId,Gu as getCreatePoolKeys,qi as getDepositEntryIndex,iu as getDxByDyBaseIn,ru as getDyByDxBaseIn,Ln as getFarmLedgerLayout,Rm as getFarmStateLayout,cs as getLiquidityAssociatedAuthority,gn as getLiquidityAssociatedId,Uh as getLiquidityFromAmounts,JP as getPdaAmmConfigId,lt as getPdaExBitmapAccount,Wd as getPdaLpMint,Ir as getPdaMetadataKey,Vr as getPdaObservationId,Ao as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Fn as getPdaPoolAuthority,bu as getPdaPoolId,gu as getPdaPoolRewardVaulId,es as getPdaPoolVaultId,dn as getPdaProtocolPositionAddress,Ae as getPdaTickArrayAddress,Uu as getPdaVault,_i as getRegistrarAddress,su as getStablePrice,Di as getTokenOwnerRecordAddress,Fi as getVoterAddress,Ei as getVoterWeightRecordAddress,vi as getVotingMintAuthority,Vi as getVotingTokenMint,Em as governanceCreateTokenOwnerRecord,QP as i16ToBytes,Tr as i32ToBytes,Yi as initPoolLayout,xi as initTokenAccountInstruction,op as initializeMarket,Ni as isValidFarmVersion,go as isZero,fw as judgeFarmType,$i as leadingZeros,fu as leastSignificantBit,bo as liquidityStateV4Layout,zm as liquidityStateV5Layout,kr as makeAMMSwapInstruction,cu as makeAddLiquidityInstruction,Gi as makeAddNewRewardInstruction,Gr as makeClaimInstruction,ks as makeClaimInstructionV4,zu as makeCreateCpmmPoolInInstruction,ja as makeCreateFarmInstruction,sc as makeCreateMarketInstruction,Ha as makeCreatorWithdrawFarmRewardInstruction,Yu as makeDepositCpmmInInstruction,Za as makeDepositInstructionV3,$a as makeDepositInstructionV5,Ja as makeDepositInstructionV6,Lw as makeDepositTokenInstruction,Nw as makeDepositWithdrawInstruction,zP as makeInitPoolInstructionV4,oS as makePurchaseInstruction,Ui as makeRestartRewardInstruction,mu as makeSimulatePoolInfoInstruction,vr as makeSwapCpmmBaseInInInstruction,Fr as makeSwapCpmmBaseOutInInstruction,ad as makeSwapFixedInInstruction,ud as makeSwapFixedOutInstruction,Hu as makeSwapInstruction,no as makeTransferInstruction,Qu as makeWithdrawCpmmInInstruction,po as makeWithdrawInstructionV3,mo as makeWithdrawInstructionV5,lo as makeWithdrawInstructionV6,Ow as makeWithdrawTokenInstruction,oh as mockCreatePoolInfo,Tu as mockV3CreatePoolInfo,jm as modelDataInfoLayout,pu as mostSignificantBit,_a as parseTokenAccountResp,pP as parseTokenInfo,nn as poolTypeV6,ws as purchaseLayout,Tm as realFarmStateV3Layout,Im as realFarmStateV5Layout,Bm as realFarmV6Layout,Zi as removeLiquidityInstruction,ji as removeLiquidityLayout,wB as route1Instruction,PB as route2Instruction,jd as routeInstruction,XP as simulatePoolInfoInstruction,yP as solToWSolToken,$t as splAccountLayout,Lr as toAmmComputePoolInfo,et as toApiV3Token,on as toFeeConfig,hr as toToken,yo as toTokenAmount,fP as toTokenInfo,Ji as trailingZeros,du as u16ToBytes,jP as u32ToBytes,iK as unionArr,Lm as updateFarmPoolInfo,Mi as validateFarmRewards,Wm as voterStakeRegistryCreateDepositEntry,Dm as voterStakeRegistryCreateVoter,Vm as voterStakeRegistryDeposit,vm as voterStakeRegistryUpdateVoterWeightRecord,Fm as voterStakeRegistryWithdraw,bP as wSolToSolToken,Ci as withdrawRewardLayout};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|