@raydium-io/raydium-sdk-v2 0.1.20-alpha → 0.1.22-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/lib/index.d.ts +1 -1
  2. package/lib/index.js +1 -1
  3. package/lib/index.js.map +1 -1
  4. package/lib/index.mjs +1 -1
  5. package/lib/index.mjs.map +1 -1
  6. package/lib/raydium/account/account.d.ts +1 -1
  7. package/lib/raydium/clmm/clmm.d.ts +1 -1
  8. package/lib/raydium/clmm/index.d.ts +1 -1
  9. package/lib/raydium/cpmm/cpmm.d.ts +1 -1
  10. package/lib/raydium/farm/farm.d.ts +1 -1
  11. package/lib/raydium/ido/ido.d.ts +1 -1
  12. package/lib/raydium/ido/index.d.ts +1 -1
  13. package/lib/raydium/index.d.ts +1 -1
  14. package/lib/raydium/index.js +1 -1
  15. package/lib/raydium/index.js.map +1 -1
  16. package/lib/raydium/index.mjs +1 -1
  17. package/lib/raydium/index.mjs.map +1 -1
  18. package/lib/raydium/liquidity/liquidity.d.ts +1 -1
  19. package/lib/raydium/marketV2/createMarket.d.ts +1 -1
  20. package/lib/raydium/marketV2/index.d.ts +1 -1
  21. package/lib/raydium/moduleBase.d.ts +1 -1
  22. package/lib/raydium/raydium.d.ts +1 -1
  23. package/lib/raydium/raydium.js +1 -1
  24. package/lib/raydium/raydium.js.map +1 -1
  25. package/lib/raydium/raydium.mjs +1 -1
  26. package/lib/raydium/raydium.mjs.map +1 -1
  27. package/lib/raydium/token/token.d.ts +1 -1
  28. package/lib/raydium/tradeV2/index.js.map +1 -1
  29. package/lib/raydium/tradeV2/index.mjs.map +1 -1
  30. package/lib/raydium/tradeV2/trade.d.ts +1 -1
  31. package/lib/raydium/tradeV2/trade.js +1 -1
  32. package/lib/raydium/tradeV2/trade.js.map +1 -1
  33. package/lib/raydium/tradeV2/trade.mjs +1 -1
  34. package/lib/raydium/tradeV2/trade.mjs.map +1 -1
  35. package/lib/raydium/utils1216/index.d.ts +1 -1
  36. package/lib/raydium/utils1216/utils1216.d.ts +1 -1
  37. package/lib/{raydium-48a3a05a.d.ts → raydium-c9108dcc.d.ts} +6 -2
  38. package/package.json +1 -1
  39. package/src/raydium/tradeV2/trade.ts +21 -5
@@ -1,3 +1,3 @@
1
- var ac=Object.defineProperty,uc=Object.defineProperties;var cc=Object.getOwnPropertyDescriptors;var Mr=Object.getOwnPropertySymbols;var Is=Object.prototype.hasOwnProperty,xs=Object.prototype.propertyIsEnumerable;var Ts=(o,e,t)=>e in o?ac(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,R=(o,e)=>{for(var t in e||(e={}))Is.call(e,t)&&Ts(o,t,e[t]);if(Mr)for(var t of Mr(e))xs.call(e,t)&&Ts(o,t,e[t]);return o},F=(o,e)=>uc(o,cc(e));var xe=(o,e)=>{var t={};for(var n in o)Is.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Mr)for(var n of Mr(o))e.indexOf(n)<0&&xs.call(o,n)&&(t[n]=o[n]);return t};import{merge as op}from"lodash";import ya from"axios";import{get as Bs,set as lc}from"lodash";import Ks from"dayjs";import mc from"dayjs/plugin/utc";Ks.extend(mc);var Go=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 Ks().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}},Ss={},dc={};function ue(o){let e=Bs(Ss,o);if(!e){let t=Bs(dc,o);e=new Go({name:o,logLevel:t}),lc(Ss,o,e)}return e}import{PublicKey as hl}from"@solana/web3.js";import kl from"bn.js";import wl from"big.js";import Hr from"bn.js";import rt from"bn.js";var Tn=9e15,Ht=1e9,Xo="0123456789abcdef",Vr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Er="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",zo={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Tn,maxE:Tn,crypto:!1},Os,Vt,re=!0,Fr="[DecimalError] ",jt=Fr+"Invalid argument: ",Ns=Fr+"Precision limit exceeded",Ms=Fr+"crypto unavailable",_s="[object Decimal]",Xe=Math.floor,Oe=Math.pow,pc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,fc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,yc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Vs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,J=7,bc=9007199254740991,gc=Vr.length-1,Yo=Er.length-1,M={toStringTag:_s};M.absoluteValue=M.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),j(o)};M.ceil=function(){return j(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(jt+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())+J,n.rounding=1,t=wc(n,Ws(n,t)),n.precision=o,n.rounding=e,j(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,d=l.constructor;if(!l.isFinite()||l.isZero())return new d(l);for(re=!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 d(t),n.s=l.s):n=new d(i.toString()),s=(o=d.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Ae(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&&(j(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")&&(j(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,j(n,o,d.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/J))*J,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(o){return Ae(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return j(Ae(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 j(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/Wr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=In(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 j(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=In(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Wr(5,o)),r=In(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,j(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,Ae(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()?At(t,r,i):new t(0):new t(NaN):e.isZero()?At(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=At(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,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!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,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!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?j(new i(r),o,e,!0):(i.precision=t=n-r.e,r=Ae(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=At(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,d=l.precision,m=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&d+4<=Yo)return s=At(l,d+4,m).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(d+4<=Yo)return s=At(l,d+4,m).times(.5),s.s=u.s,s}for(l.precision=a=d+10,l.rounding=1,t=Math.min(28,a/J+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/J),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)),re=!0,j(s,l.precision=d,l.rounding=m,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Xe(this.e/J)>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,d=l.precision,m=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(re=!1,a=d+p,s=Qt(u,a),n=e?vr(l,a+10):Qt(o,a),c=Ae(s,n,a,1),vn(c.d,r=d,m))do if(a+=10,s=Qt(u,a),n=e?vr(l,a+10):Qt(o,a),c=Ae(s,n,a,1),!i){+De(c.d).slice(r+1,r+15)+1==1e14&&(c=j(c,d+1,0));break}while(vn(c.d,r+=10,m));return re=!0,j(c,d,m)};M.minus=M.sub=function(o){var e,t,n,r,i,s,a,c,u,l,d,m,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,m=o.d,a=y.precision,c=y.rounding,!u[0]||!m[0]){if(m[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return re?j(o,a,c):o}if(t=Xe(o.e/J),l=Xe(p.e/J),u=u.slice(),i=l-t,i){for(d=i<0,d?(e=u,i=-i,s=m.length):(e=m,t=l,s=u.length),n=Math.max(Math.ceil(a/J),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=m.length,d=n<s,d&&(s=n),n=0;n<s;n++)if(u[n]!=m[n]){d=u[n]<m[n];break}i=0}for(d&&(e=u,u=m,m=e,o.s=-o.s),s=u.length,n=m.length-s;n>0;--n)u[s++]=0;for(n=m.length;n>i;){if(u[--n]<m[n]){for(r=n;r&&u[--r]===0;)u[r]=Pt-1;--u[r],u[n]+=Pt}u[n]-=m[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=Dr(u,t),re?j(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]?j(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=Ae(t,o.abs(),0,3,1),e.s*=o.s):e=Ae(t,o,0,n.modulo,1),e=e.times(o),re=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Qo(this)};M.naturalLogarithm=M.ln=function(){return Qt(this)};M.negated=M.neg=function(){var o=new this.constructor(this);return o.s=-o.s,j(o)};M.plus=M.add=function(o){var e,t,n,r,i,s,a,c,u,l,d=this,m=d.constructor;if(o=new m(o),!d.d||!o.d)return!d.s||!o.s?o=new m(NaN):d.d||(o=new m(o.d||d.s===o.s?d:NaN)),o;if(d.s!=o.s)return o.s=-o.s,d.minus(o);if(u=d.d,l=o.d,a=m.precision,c=m.rounding,!u[0]||!l[0])return l[0]||(o=new m(d)),re?j(o,a,c):o;if(i=Xe(d.e/J),n=Xe(o.e/J),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/J),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=Dr(u,n),re?j(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(jt+o);return t.d?(e=Es(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var o=this,e=o.constructor;return j(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())+J,n.rounding=1,t=Pc(n,Ws(n,t)),n.precision=o,n.rounding=e,j(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(re=!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(Ae(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&&(j(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")&&(j(n,c+1,1),o=!n.times(n).eq(s));break}return re=!0,j(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=Ae(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,j(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,d=l.constructor,m=l.d,p=(o=new d(o)).d;if(o.s*=l.s,!m||!m[0]||!p||!p[0])return new d(!o.s||m&&!m[0]&&!p||p&&!p[0]&&!m?NaN:!m||!p?o.s/0:o.s*0);for(t=Xe(l.e/J)+Xe(o.e/J),c=m.length,u=p.length,c<u&&(i=m,m=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]*m[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=Dr(i,t),re?j(o,d.precision,d.rounding):o};M.toBinary=function(o,e){return Ho(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:(et(o,0,Ht),e===void 0?e=n.rounding:et(e,0,8),j(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):(et(o,0,Ht),e===void 0?e=r.rounding:et(e,0,8),n=j(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):(et(o,0,Ht),e===void 0?e=i.rounding:et(e,0,8),n=j(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,d,m,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=Es(y)-p.e-1,s=i%J,e.d[0]=Oe(10,s<0?J+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(jt+a);o=a.gt(e)?i>0?e:u:a}for(re=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*J*2;d=Ae(a,e,0,1,1),r=t.plus(d.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(d.times(r)),c=r,r=e,e=a.minus(d.times(r)),a=r;return r=Ae(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,m=Ae(u,n,i,1).minus(p).abs().cmp(Ae(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,re=!0,m};M.toHexadecimal=M.toHex=function(o,e){return Ho(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:et(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]?(re=!1,t=Ae(t,o,0,e,1).times(o),re=!0,j(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Ho(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 j(a,n,i);if(e=Xe(o.e/J),e>=o.d.length-1&&(t=u<0?-u:u)<=bc)return r=vs(c,a,t,n),o.s<0?new c(1).div(r):j(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):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Qo(o.times(Qt(a,n+t)),n),r.d&&(r=j(r,n+5,1),vn(r.d,n,i)&&(e=n+10,r=j(Qo(o.times(Qt(a,e+t)),e),e+5,1),+De(r.d).slice(n+1,n+15)+1==1e14&&(r=j(r,n+1,0)))),r.s=s,re=!0,c.rounding=i,j(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):(et(o,1,Ht),e===void 0?e=r.rounding:et(e,0,8),n=j(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):(et(o,1,Ht),e===void 0?e=n.rounding:et(e,0,8)),j(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 j(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=J-n.length,t&&(i+=Yt(t)),i+=n;s=o[e],n=s+"",t=J-n.length,t&&(i+=Yt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function et(o,e,t){if(o!==~~o||o<e||o>t)throw Error(jt+o)}function vn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=J,r=0):(r=Math.ceil((e+1)/J),e%=J),i=Oe(10,J-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 _r(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]+=Xo.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 wc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Wr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=In(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 Ae=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,d,m,p,y,f,b,g,h,w,k,T,I,S,B,C,x,L,U,v=n.constructor,Z=n.s==r.s?1:-1,$=n.d,W=r.d;if(!$||!$[0]||!W||!W[0])return new v(!n.s||!r.s||($?W&&$[0]==W[0]:!W)?NaN:$&&$[0]==0||!W?Z*0:Z/0);for(c?(p=1,l=n.e-r.e):(c=Pt,p=J,l=Xe(n.e/p)-Xe(r.e/p)),L=W.length,C=$.length,g=new v(Z),h=g.d=[],d=0;W[d]==($[d]||0);d++);if(W[d]>($[d]||0)&&l--,i==null?(I=i=v.precision,s=v.rounding):a?I=i+(n.e-r.e)+1:I=i,I<0)h.push(1),y=!0;else{if(I=I/p+2|0,d=0,L==1){for(m=0,W=W[0],I++;(d<C||m)&&I--;d++)S=m*c+($[d]||0),h[d]=S/W|0,m=S%W|0;y=m||d<C}else{for(m=c/(W[0]+1)|0,m>1&&(W=o(W,m,c),$=o($,m,c),L=W.length,C=$.length),B=L,w=$.slice(0,L),k=w.length;k<L;)w[k++]=0;U=W.slice(),U.unshift(0),x=W[0],W[1]>=c/2&&++x;do m=0,u=e(W,w,L,k),u<0?(T=w[0],L!=k&&(T=T*c+(w[1]||0)),m=T/x|0,m>1?(m>=c&&(m=c-1),f=o(W,m,c),b=f.length,k=w.length,u=e(f,w,b,k),u==1&&(m--,t(f,L<b?U:W,b,c))):(m==0&&(u=m=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(w,f,k,c),u==-1&&(k=w.length,u=e(W,w,L,k),u<1&&(m++,t(w,L<k?U:W,k,c))),k=w.length):u===0&&(m++,w=[0]),h[d++]=m,u&&w[0]?w[k++]=$[B]||0:(w=[$[B]],k=1);while((B++<C||w[0]!==void 0)&&I--);y=w[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Os=y;else{for(d=1,m=h[0];m>=10;m/=10)d++;g.e=d+l*p-1,j(g,a?i+g.e+1:i,s,y)}return g}}();function j(o,e,t,n){var r,i,s,a,c,u,l,d,m,p=o.constructor;e:if(e!=null){if(d=o.d,!d)return o;for(r=1,a=d[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=J,s=e,l=d[m=0],c=l/Oe(10,r-s-1)%10|0;else if(m=Math.ceil((i+1)/J),a=d.length,m>=a)if(n){for(;a++<=m;)d.push(0);l=c=0,r=1,i%=J,s=i-J+1}else break e;else{for(l=a=d[m],r=1;a>=10;a/=10)r++;i%=J,s=i-J+r,c=s<0?0:l/Oe(10,r-s-1)%10|0}if(n=n||e<0||d[m+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:d[m-1])%10&1||t==(o.s<0?8:7)),e<1||!d[0])return d.length=0,u?(e-=o.e+1,d[0]=Oe(10,(J-e%J)%J),o.e=-e||0):d[0]=o.e=0,o;if(i==0?(d.length=m,a=1,m--):(d.length=m+1,a=Oe(10,J-i),d[m]=s>0?(l/Oe(10,r-s)%Oe(10,s)|0)*a:0),u)for(;;)if(m==0){for(i=1,s=d[0];s>=10;s/=10)i++;for(s=d[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,d[0]==Pt&&(d[0]=1));break}else{if(d[m]+=a,d[m]!=Pt)break;d[m--]=0,a=1}for(i=d.length;d[--i]===0;)d.pop()}return re&&(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 Ds(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)+Yt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Yt(-r-1)+i,t&&(n=t-s)>0&&(i+=Yt(n))):r>=s?(i+=Yt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Yt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Yt(n))),i}function Dr(o,e){var t=o[0];for(e*=J;t>=10;t/=10)e++;return e}function vr(o,e,t){if(e>gc)throw re=!0,t&&(o.precision=t),Error(Ns);return j(new o(Vr),e,1,!0)}function At(o,e,t){if(e>Yo)throw Error(Ns);return j(new o(Er),e,t,!0)}function Es(o){var e=o.length-1,t=e*J+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 Yt(o){for(var e="";o--;)e+="0";return e}function vs(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/J+4);for(re=!1;;){if(t%2&&(i=i.times(e),Rs(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),Rs(e.d,s)}return re=!0,i}function Cs(o){return o.d[o.d.length-1]&1}function Fs(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 Qo(o,e){var t,n,r,i,s,a,c,u=0,l=0,d=0,m=o.constructor,p=m.rounding,y=m.precision;if(!o.d||!o.d[0]||o.e>17)return new m(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(re=!1,c=y):c=e,a=new m(.03125);o.e>-2;)o=o.times(a),d+=5;for(n=Math.log(Oe(2,d))/Math.LN10*2+5|0,c+=n,t=i=s=new m(1),m.precision=c;;){if(i=j(i.times(o),c,1),t=t.times(++l),a=s.plus(Ae(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(r=d;r--;)s=j(s.times(s),c,1);if(e==null)if(u<3&&vn(s.d,c-n,p,u))m.precision=c+=10,t=i=a=new m(1),l=0,u++;else return j(s,m.precision=y,p,re=!0);else return m.precision=y,s}s=a}}function Qt(o,e){var t,n,r,i,s,a,c,u,l,d,m,p=1,y=10,f=o,b=f.d,g=f.constructor,h=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(re=!1,l=w):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=vr(g,l+2,w).times(i+""),f=Qt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=w,e==null?j(f,w,h,re=!0):f;for(d=f,c=s=f=Ae(f.minus(1),f.plus(1),l,1),m=j(f.times(f),l,1),r=3;;){if(s=j(s.times(m),l,1),u=c.plus(Ae(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(vr(g,l+2,w).times(i+""))),c=Ae(c,new g(p),l,1),e==null)if(vn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=Ae(d.minus(1),d.plus(1),l,1),m=j(f.times(f),l,1),r=a=1;else return j(c,g.precision=w,h,re=!0);else return g.precision=w,c;c=u,r+=2}}function Ds(o){return String(o.s*o.s/0)}function jo(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)%J,t<0&&(n+=J),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=J;n<r;)o.d.push(+e.slice(n,n+=J));e=e.slice(n),n=J-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),re&&(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 Ac(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Vs.test(e))return jo(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(fc.test(e))t=16,e=e.toLowerCase();else if(pc.test(e))t=2;else if(yc.test(e))t=8;else throw Error(jt+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=vs(n,new n(t),i,i*2)),u=_r(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=Dr(u,l),o.d=u,re=!1,s&&(o=Ae(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?Oe(2,c):Fn.pow(2,c))),re=!0,o)}function Pc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:In(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Wr(5,t)),e=In(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 In(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,d=Math.ceil(l/J);for(re=!1,c=t.times(t),a=new o(n);;){if(s=Ae(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=Ae(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[d]!==void 0){for(i=d;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return re=!0,s.d.length=d+1,s}function Wr(o,e){for(var t=o;--e;)t*=o;return t}function Ws(o,e){var t,n=e.s<0,r=At(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=Cs(t)?n?2:3:n?4:1,e;Vt=Cs(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Ho(o,e,t,n){var r,i,s,a,c,u,l,d,m,p=o.constructor,y=t!==void 0;if(y?(et(t,1,Ht),n===void 0?n=p.rounding:et(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=Ds(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(".",""),m=new p(1),m.e=l.length-s,m.d=_r(Kt(m),10,r),m.e=m.d.length),d=_r(l,10,r),i=c=d.length;d[--c]==0;)d.pop();if(!d[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=d,o.e=i,o=Ae(o,m,t,n,0,r),d=o.d,i=o.e,u=Os),s=d[t],a=r/2,u=u||d[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&&d[t-1]&1||n===(o.s<0?8:7)),d.length=t,u)for(;++d[--t]>r-1;)d[t]=0,t||(++i,d.unshift(1));for(c=d.length;!d[c-1];--c);for(s=0,l="";s<c;s++)l+=Xo.charAt(d[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(d=_r(l,r,e),c=d.length;!d[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Xo.charAt(d[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 Rs(o,e){if(o.length>e)return o.length=e,!0}function hc(o){return new this(o).abs()}function kc(o){return new this(o).acos()}function Tc(o){return new this(o).acosh()}function Ic(o,e){return new this(o).plus(e)}function xc(o){return new this(o).asin()}function Bc(o){return new this(o).asinh()}function Sc(o){return new this(o).atan()}function Kc(o){return new this(o).atanh()}function Cc(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=At(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?At(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=At(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Ae(o,e,i,1)),e=At(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Ae(o,e,i,1)),t}function Rc(o){return new this(o).cbrt()}function Lc(o){return j(o=new this(o),o.e+1,2)}function Oc(o,e,t){return new this(o).clamp(e,t)}function Nc(o){if(!o||typeof o!="object")throw Error(Fr+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Ht,"rounding",0,8,"toExpNeg",-Tn,0,"toExpPos",0,Tn,"maxE",0,Tn,"minE",-Tn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=zo[t]),(n=o[t])!==void 0)if(Xe(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(jt+t+": "+n);if(t="crypto",r&&(this[t]=zo[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(Ms);else this[t]=!1;else throw Error(jt+t+": "+n);return this}function Mc(o){return new this(o).cos()}function _c(o){return new this(o).cosh()}function qs(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,Ls(i)){u.s=i.s,re?!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++;re?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 jo(u,i.toString())}else if(c!=="string")throw Error(jt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Vs.test(i)?jo(u,i):Ac(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=Nc,r.clone=qs,r.isDecimal=Ls,r.abs=hc,r.acos=kc,r.acosh=Tc,r.add=Ic,r.asin=xc,r.asinh=Bc,r.atan=Sc,r.atanh=Kc,r.atan2=Cc,r.cbrt=Rc,r.ceil=Lc,r.clamp=Oc,r.cos=Mc,r.cosh=_c,r.div=Vc,r.exp=Ec,r.floor=vc,r.hypot=Fc,r.ln=Dc,r.log=Wc,r.log10=Uc,r.log2=qc,r.max=Gc,r.min=Xc,r.mod=zc,r.mul=Yc,r.pow=Qc,r.random=jc,r.round=Hc,r.sign=Zc,r.sin=$c,r.sinh=Jc,r.sqrt=el,r.sub=tl,r.sum=nl,r.tan=rl,r.tanh=ol,r.trunc=il,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 Vc(o,e){return new this(o).div(e)}function Ec(o){return new this(o).exp()}function vc(o){return j(o=new this(o),o.e+1,3)}function Fc(){var o,e,t=new this(0);for(re=!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 re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function Ls(o){return o instanceof Fn||o&&o.toStringTag===_s||!1}function Dc(o){return new this(o).ln()}function Wc(o,e){return new this(o).log(e)}function qc(o){return new this(o).log(2)}function Uc(o){return new this(o).log(10)}function Gc(){return Fs(this,arguments,"lt")}function Xc(){return Fs(this,arguments,"gt")}function zc(o,e){return new this(o).mod(e)}function Yc(o,e){return new this(o).mul(e)}function Qc(o,e){return new this(o).pow(e)}function jc(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:et(o,1,Ht),n=Math.ceil(o/J),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(Ms);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=J,n&&o&&(r=Oe(10,J-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-=J)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<J&&(t-=J-n)}return s.e=t,s.d=a,s}function Hc(o){return j(o=new this(o),o.e+1,this.rounding)}function Zc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function $c(o){return new this(o).sin()}function Jc(o){return new this(o).sinh()}function el(o){return new this(o).sqrt()}function tl(o,e){return new this(o).sub(e)}function nl(){var o=0,e=arguments,t=new this(e[o]);for(re=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return re=!0,j(t,this.precision,this.rounding)}function rl(o){return new this(o).tan()}function ol(o){return new this(o).tanh()}function il(o){return j(o=new this(o),o.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var Fn=M.constructor=qs(zo);Vr=new Fn(Vr);Er=new Fn(Er);var V=Fn;import{PublicKey as ti}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sl}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Us,SYSVAR_RENT_PUBKEY as al}from"@solana/web3.js";function A({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Zo=[A({pubkey:sl,isWritable:!1}),A({pubkey:Us.programId,isWritable:!1}),A({pubkey:al,isWritable:!1})];function $o({publicKey:o,transformSol:e}){let t=Jo(o.toString());if(t instanceof Te)return e&&t.equals(Ne)?ee:t;if(e&&t.toString()===Ne.toBase58())return ee;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 Jo(o){try{return new Te(o)}catch{return o}}var qr=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Ur=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Te("SysvarRent111111111111111111111111111111111"),ei=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Gr=new Te("Sysvar1nstructions1111111111111111111111111"),Xr=Us.programId,fp=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),yp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),bp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),gp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),wp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ap=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Pp=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),hp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),kp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Tp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Ip=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),ee=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function st(o){return $o({publicKey:o,transformSol:!0})}import{PublicKey as ul}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gs}from"@solana/spl-token";var Ct={chainId:101,address:ul.default.toBase58(),programId:Gs.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:Gs.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 ni=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof ti&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new ti(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?ti.default:$o({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=ni;Ie.WSOL=new ni(F(R({},Me),{mint:Me.address}));import Yr from"big.js";import ml from"bn.js";import dl from"decimal.js-light";import cl from"toformat";var ll=cl,Dn=ll;var zr=ue("module/fraction"),ri=Dn(Yr),Wn=Dn(dl),pl={[0]:Wn.ROUND_DOWN,[1]:Wn.ROUND_HALF_UP,[2]:Wn.ROUND_UP},fl={[0]:Yr.roundDown,[1]:Yr.roundHalfUp,[2]:Yr.roundUp},pe=class{constructor(e,t=new ml(1)){this.numerator=H(e),this.denominator=H(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(H(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(H(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(H(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(H(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||zr.logWithError(`${e} is not an integer.`),e<=0&&zr.logWithError(`${e} is not positive.`),Wn.set({precision:e+1,rounding:pl[n]});let r=new Wn(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)||zr.logWithError(`${e} is not an integer.`),e<0&&zr.logWithError(`${e} is negative.`),ri.DP=e,ri.RM=fl[n]||1,new ri(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var bl=ue("Raydium_price"),nt=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(oi(n.decimals),oi(r.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&bl.logWithError("mul token not equals");let n=super.mul(t);return new nt({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 ii=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Qr=ii;Qr.SOL=new ii(Ct);import gl from"bn.js";var Xs=new pe(new gl(100)),Ze=class extends pe{toSignificant(e=5,t,n){return this.mul(Xs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Xs).toFixed(e,t,n)}};var dt=new rt(0),Ys=new rt(1),hf=new rt(2),kf=new rt(3),Tf=new rt(5),si=new rt(10),If=new rt(100),xf=new rt(1e3),Bf=new rt(1e4),zs=9007199254740991;function H(o){let e=ue("Raydium_parseBigNumberish");if(o instanceof rt)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new rt(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=zs||o<=-zs)&&e.logWithError(`BigNumberish number overflow: ${o}`),new rt(String(o))):typeof o=="bigint"?new rt(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new rt(0))}function oi(o){return si.pow(H(o))}function jr(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 Al=ue("Raydium_amount"),js=Dn(wl);function Pl(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")):Al.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 Hr(0),a=si.pow(new Hr(t.decimals));if(r)s=H(n);else{let c=new Hr(0),u=new Hr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,d]=Pl(n.toString(),t.decimals);c=H(l),u=H(d)}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 Qs(o){return typeof o=="object"&&o!==null&&![Ie,ye,hl,pe,kl,nt,Ze].some(e=>typeof e=="object"&&o instanceof e)}function ke(o){return typeof o=="string"?Jo(o):Array.isArray(o)?o.map(e=>ke(e)):Qs(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,ke(t)])):o}import{PublicKey as Gn,sendAndConfirmTransaction as Xn,Transaction as zn,TransactionMessage as Yn,VersionedTransaction as Qn}from"@solana/web3.js";import Ll from"axios";var E={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",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 Zs,ComputeBudgetProgram as Hs,Transaction as Zr,TransactionMessage as Tl,Keypair as $s,VersionedTransaction as Js}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Il}from"@solana/spl-token";var Et=ue("Raydium_txUtil"),ea=1644;function $r(o){let e=[],t=[];return o.microLamports&&(e.push(Hs.setComputeUnitPrice({microLamports:o.microLamports})),t.push(E.SetComputeUnitPrice)),o.units&&(e.push(Hs.setComputeUnitLimit({units:o.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Bn(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 Jr(o,e){o.length<1&&Et.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Et.logWithError(`no signers provided:, ${e.toString()}`);let t=new Zr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ea}catch{return!1}}async function ta(o,e,t,n=!0){let r=new Zs("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new Zr;s.feePayer=r;for(let u of e)Jr([...s.instructions,u],[r])||(i.push(s),s=new Zr,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await xl(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Et.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Et.debug("simulate result:",u),u.logs){let l=u.logs.filter(d=>d&&d.includes(t));Et.debug("filteredLog:",c),l.length||Et.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function na(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Et.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function vt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Et.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function se(o,e){let[t,n]=Zs.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function xl(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 d=u._compile().serialize(),p=u._serialize(d).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&&Et.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function qn({instructions:o,payer:e,signers:t}){return Jr(o,[e,...t])}function Un({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=$s.generate().publicKey.toString()}){let i=new Tl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Js(i).serialize()).toString("base64").length<ea}catch{return!1}}var Bl=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 Zr&&(t.recentBlockhash||(t.recentBlockhash=Il.toBase58()),t.feePayer||(t.feePayer=$s.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Js&&(n=Bl(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as ia,AddressLookupTableAccount as eo}from"@solana/web3.js";import{PublicKey as ra}from"@solana/web3.js";import{MINT_SIZE as Sl,TOKEN_PROGRAM_ID as Kl,getTransferFeeConfig as Cl,unpackMint as Rl}from"@solana/spl-token";var ai=ue("Raydium_accountInfo_util");async function ht(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=R({batchRequest:!1},t),s=ui(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(d=>{let m=o._buildArgs([d.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=ui(c,10);a=(await(await Promise.all(u.map(async d=>await o._rpcBatchRequest(d)))).flat()).map(d=>(d.error&&ai.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${d.error.message}`),d.result.value.map(m=>{if(m){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=m;return p.length!==2&&p[1]!=="base64"&&ai.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ra(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&ai.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Ve(o,e,t){let n=await ht(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>F(R({},r),{accountInfo:n[i]}))}async function oa({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ve(o,e.map(c=>({pubkey:st(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Sl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Rl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=F(R({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Kl,feeConfig:(a=Cl(u))!=null?a:void 0})}return r[ra.default.toBase58()]=r[ee.toBase58()],r}async function ci({connection:o,address:e}){let t=await ht(o,[...new Set(e.map(r=>r.toString()))].map(r=>new ia(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new eo({key:s,state:eo.deserialize(i.data)});n[s.toString()]=a,to[s.toString()]=a}return n}var to={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new eo({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:eo.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 no=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 Ll.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}=$r(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!==Gn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(R({},t||{})):this.build(t)}build(e){let t=new zn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async n=>{var a;let{recentBlockHash:r,skipPreflight:i=!0}=n||{},s=r!=null?r:await Bn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),an([t]),(a=this.owner)!=null&&a.isKeyPair)return{txId:await Xn(this.connection,t,this.signers.find(c=>c.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:i}),signedTx:t};if(this.signAllTransactions){let c=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(c[0].serialize(),{skipPreflight:i}),signedTx:c[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(u=>u.transaction.instructions.length>0),s=[r,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],c=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async u=>{var f;let{sequentially:l,onTxUpdate:d,recentBlockHash:m,skipPreflight:p=!0}=u||{},y=m!=null?m:await Bn(this.connection,this.blockhashCommitment);if((f=this.owner)!=null&&f.isKeyPair){if(l){let b=[];for(let g of s){let h=await Xn(this.connection,g,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:p});b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await await Promise.all(s.map(async(b,g)=>(b.recentBlockhash=y,await Xn(this.connection,b,a[g].find(h=>h.publicKey.equals(this.owner.publicKey))?a[g]:[...a[g],this.owner.signer],{skipPreflight:p})))),signedTxs:s}}if(this.signAllTransactions){let b=s.map((h,w)=>(h.recentBlockhash=y,a[w].length&&h.sign(...a[w]),h));an(b);let g=await this.signAllTransactions(b);if(l){let h=0,w=[],k=async()=>{if(!g[h])return;let T=await this.connection.sendRawTransaction(g[h].serialize(),{skipPreflight:p});w.push({txId:T,status:"sent",signedTx:g[h]}),d==null||d([...w]),h++,this.connection.onSignature(T,I=>{let S=w.findIndex(B=>B.txId===T);S>-1&&(w[S].status=I.err?"error":"success"),d==null||d([...w]),I.err||k()},"processed"),this.connection.getSignatureStatus(T)};return await k(),{txIds:w.map(T=>T.txId),signedTxs:g}}else{let h=[];for(let w=0;w<g.length;w+=1){let k=await this.connection.sendRawTransaction(g[w].serialize(),{skipPreflight:p});h.push(k)}return{txIds:h,signedTxs:g}}}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){let m=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=m,i=xe(m,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=R(R({},this.cluster==="devnet"?{}:to),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let p of a)s[p]===void 0&&c.push(new Gn(p));let u=await ci({connection:this.connection,address:c});for(let[p,y]of Object.entries(u))s[p]=y;let l=new Yn({payerKey:this.feePayer,recentBlockhash:r?Gn.default.toBase58():await Bn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),d=new Qn(l);return d.sign(this.signers),{builder:this,transaction:d,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async p=>{var b;let{recentBlockHash:y,skipPreflight:f=!0}=p||{};if(y&&(d.message.recentBlockhash=y),an([d]),(b=this.owner)!=null&&b.isKeyPair){this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))||d.sign([this.owner.signer]);let g=await this.connection.sendTransaction(d,{skipPreflight:f}),{lastValidBlockHeight:h,blockhash:w}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});return await this.connection.confirmTransaction({blockhash:w,lastValidBlockHeight:h,signature:g},"confirmed"),{txId:g,signedTx:d}}if(this.signAllTransactions){let g=await this.signAllTransactions([d]);return{txId:await this.connection.sendTransaction(g[0],{skipPreflight:f}),signedTx:g[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(u=>u.builder.instructions.length>0),s=[r,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],c=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return s.forEach(async(u,l)=>{u.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async u=>{var y;let{sequentially:l,onTxUpdate:d,recentBlockHash:m,skipPreflight:p=!0}=u||{};if(m&&s.forEach(f=>f.message.recentBlockhash=m),an(s),(y=this.owner)!=null&&y.isKeyPair){let{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});if(s.forEach((g,h)=>{a[h].find(w=>w.publicKey.equals(this.owner.publicKey))||g.sign([this.owner.signer])}),l){let g=[];for(let h of s){let w=await this.connection.sendTransaction(h,{skipPreflight:p}),{lastValidBlockHeight:k,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:k,signature:w},"confirmed"),g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await Promise.all(s.map(async g=>{let h=await this.connection.sendTransaction(g,{skipPreflight:p});return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:h},"confirmed"),h})),signedTxs:s}}if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(l){let b=0,g=[],h=async()=>{if(!f[b])return;let w=await this.connection.sendTransaction(f[b],{skipPreflight:p});g.push({txId:w,status:"sent",signedTx:f[b]}),d==null||d([...g]),b++,this.connection.onSignature(w,k=>{let T=g.findIndex(I=>I.txId===w);T>-1&&(g[T].status=k.err?"error":"success"),d==null||d([...g]),k.err||h()},"processed"),this.connection.getSignatureStatus(w)};return h(),{txIds:[],signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let h=await this.connection.sendTransaction(f[g],{skipPreflight:p});b.push(h)}return{txIds:b,signedTxs:f}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){let u=e||{},{computeBudgetConfig:t}=u,n=xe(u,["computeBudgetConfig"]),r=t?$r(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((l,d)=>F(R({},l),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(l=>{let d=[...c,l],m=t?[...r.instructions,...d]:d,y=[...new Set(d.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new Gn(f));if(c.length<12&&qn({instructions:m,payer:this.feePayer,signers:y})||qn({instructions:d,payer:this.feePayer,signers:y}))c.push(l);else{if(c.length===0)throw Error("item ins too big");qn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:y})?s.push(new zn().add(...r.instructions,...c)):s.push(new zn().add(...c)),a.push(Array.from(new Set(c.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>i[f]).filter(f=>f!==void 0)),c=[l]}}),c.length>0){let d=[...new Set(c.map(m=>m.keys.filter(p=>p.isSigner).map(p=>p.pubkey.toString())).flat()).values()].map(m=>i[m]).filter(m=>m!==void 0);qn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(m=>m.publicKey)})?s.push(new zn().add(...r.instructions,...c)):s.push(new zn().add(...c)),a.push(d)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var b;let{sequentially:d,onTxUpdate:m,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Bn(this.connection,this.blockhashCommitment);if(s.forEach(async(g,h)=>{g.recentBlockhash=f,a[h].length&&g.sign(...a[h])}),an(s),(b=this.owner)!=null&&b.isKeyPair){if(d){let g=[];for(let h of s){let w=await Xn(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await Promise.all(s.map(async(g,h)=>await Xn(this.connection,g,a[h].find(w=>w.publicKey.equals(this.owner.publicKey))?a[h]:[...a[h],this.owner.signer],{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let g=await this.signAllTransactions(s);if(d){let h=0,w=[],k=async()=>{if(!g[h])return;let T=await this.connection.sendRawTransaction(g[h].serialize(),{skipPreflight:y});w.push({txId:T,status:"sent",signedTx:g[h]}),m==null||m([...w]),h++,this.connection.onSignature(T,I=>{let S=w.findIndex(B=>B.txId===T);S>-1&&(w[S].status=I.err?"error":"success"),m==null||m([...w]),I.err||k()},"processed"),this.connection.getSignatureStatus(T)};return await k(),{txIds:w.map(T=>T.txId),signedTxs:g}}else{let h=[];for(let w=0;w<g.length;w+=1){let k=await this.connection.sendRawTransaction(g[w].serialize(),{skipPreflight:y});h.push(k)}return{txIds:h,signedTxs:g}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,i=xe(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=R(R({},this.cluster==="devnet"?{}:to),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let g of a)s[g]===void 0&&c.push(new Gn(g));let u=await ci({connection:this.connection,address:c});for(let[g,h]of Object.entries(u))s[g]=h;let l=t?$r(t):{instructions:[],instructionTypes:[]},d=await Bn(this.connection,this.blockhashCommitment),m=this.signers.reduce((g,h)=>F(R({},g),{[h.publicKey.toBase58()]:h}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let h=[...f,g],w=t?[...l.instructions,...h]:h;if(f.length<12&&Un({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s})||Un({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let k={};for(let T of[...new Set(a)])s[T]!==void 0&&(k[T]=s[T]);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:d})){let T=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Qn(T))}else{let T=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Qn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(T=>m[T]).filter(T=>T!==void 0)),f=[g]}}),f.length>0){let h=[...new Set(f.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(w=>m[w]).filter(w=>w!==void 0);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:d})){let w=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Qn(w))}else{let w=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Qn(w))}y.push(h)}return{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var I;let{sequentially:h,onTxUpdate:w,recentBlockHash:k,skipPreflight:T=!0}=g||{};if(p.map(async(S,B)=>{y[B].length&&S.sign(y[B]),k&&(S.message.recentBlockhash=k)}),an(p),(I=this.owner)!=null&&I.isKeyPair){let{lastValidBlockHeight:S,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});if(p.forEach((C,x)=>{y[x].find(L=>L.publicKey.equals(this.owner.publicKey))||C.sign([this.owner.signer])}),h){let C=[];for(let x of p){let L=await this.connection.sendTransaction(x,{skipPreflight:T}),{lastValidBlockHeight:U,blockhash:v}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:v,lastValidBlockHeight:U,signature:L},"confirmed"),C.push(L)}return{txIds:C,signedTxs:p}}return{txIds:await Promise.all(p.map(async C=>{let x=await this.connection.sendTransaction(C,{skipPreflight:T});return await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:S,signature:x},"confirmed"),x})),signedTxs:p}}if(this.signAllTransactions){let S=await this.signAllTransactions(p);if(h){let B=0,C=[],x=async()=>{if(!S[B])return;let L=await this.connection.sendTransaction(S[B],{skipPreflight:T});C.push({txId:L,status:"sent",signedTx:S[B]}),w==null||w([...C]),B++,this.connection.onSignature(L,U=>{let v=C.findIndex(Z=>Z.txId===L);v>-1&&(C[v].status=U.err?"error":"success"),w==null||w([...C]),U.err||x()},"processed"),this.connection.getSignatureStatus(L)};return x(),{txIds:[],signedTxs:S}}else{let B=[];for(let C=0;C<S.length;C+=1){let x=await this.connection.sendTransaction(S[C],{skipPreflight:T});B.push(x)}return{txIds:B,signedTxs:S}}}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 ui(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var sa=o=>typeof o=="number";function aa(o,e,t){let n=sa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function ua(o,e,t){let n=sa(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 ca=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),la=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Hn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Vy=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ey=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),li=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ro=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),vy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ma=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),da=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Fy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Dy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ol=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Nl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ml=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),_l=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),pa=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Wy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),qy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Vl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),El=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),vl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Zn={IDO_PROGRAM_ID_V1:Ol,IDO_PROGRAM_ID_V2:Nl,IDO_PROGRAM_ID_V3:Ml,IDO_PROGRAM_ID_V4:_l};var Uy={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:Vl,CREATE_CPMM_POOL_AUTH:El,CREATE_CPMM_POOL_FEE_ACC:vl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Fl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dl}from"@solana/spl-token";function be(o,e,t){return se([o.toBuffer(),(t!=null?t:Dl).toBuffer(),e.toBuffer()],new Fl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var $n=1e4;function Pe(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=F(R({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),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===$n){let c=new Tt(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=Jn(o.mul(new Tt($n)),new Tt($n-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,d=Jn(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt($n)),m=d.gt(s)?s:d;return{amount:l,fee:m,expirationTime:a}}else{let c=Jn(o.mul(new Tt(i.transferFeeBasisPoints)),new Tt($n)),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 Jn(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"},yb=R({},We);var fa="ray_tab_hash",mi="ray_req_hash",Wl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(fa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(fa,o)),o},oo=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=xe(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(mi)||"[]").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(R({},t),{time:Date.now(),session:Wl()}));try{localStorage.setItem(mi,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(mi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return oo(F(R({},t),{logCount:o,removeLastLog:!0}))}};var io=ue("Raydium_Api"),di=new Map;var so=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=ya.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 io.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(io.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:d,url:m}=a;return n&&oo({status:u,url:`${d}${m}`,params:a.params,data:c,logCount:this.logCount}),io.debug(`${l==null?void 0:l.toUpperCase()} ${d}${m} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:d,url:m}=a;return n&&oo({status:u,url:`${d}${m}`,params:a.params,data:s.message,logCount:this.logCount}),io.error(`${l.toUpperCase()} ${d}${m} ${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 ya.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=>di.has(s)?(n.push(di.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=>{di.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&&st(t).toBase58(),n&&n!=="undefined"?st(n).toBase58():""],[l,d]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${d}&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 ao="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ba="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ti,TOKEN_PROGRAM_ID as en,AccountLayout as Kn,TOKEN_2022_PROGRAM_ID as gm}from"@solana/spl-token";import{PublicKey as bo,SystemProgram as wm}from"@solana/web3.js";var pi=(...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 no({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(pi(e))}logInfo(...e){this.logger.info(pi(e))}logAndCreateError(...e){let t=pi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as mm,createCloseAccountInstruction as dm,createTransferInstruction as pm,TOKEN_PROGRAM_ID as Sn}from"@solana/spl-token";import{PublicKey as fm,SystemProgram as ym}from"@solana/web3.js";import bm from"bn.js";import{PublicKey as Ra,Keypair as am}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as um}from"@solana/spl-token";import cm from"bn.js";import{PublicKey as em}from"@solana/web3.js";import ha,{isBN as ka}from"bn.js";import{bits as Ul,BitStructure as jb,blob as Gl,Blob as Hb,cstr as Zb,f32 as $b,f32be as Jb,f64 as eg,f64be as tg,greedy as ng,Layout as Xl,ns64 as rg,ns64be as og,nu64 as zl,nu64be as ig,offset as sg,s16 as ag,s16be as ug,s24 as cg,s24be as lg,s32 as Yl,s32be as mg,s40 as dg,s40be as pg,s48 as fg,s48be as yg,s8 as bg,seq as Ql,struct as gg,Structure as jl,u16 as Hl,u16be as wg,u24 as Ag,u24be as Pg,u32 as Zl,u32be as hg,u40 as kg,u40be as Tg,u48 as Ig,u48be as xg,u8 as $l,UInt as Jl,union as Bg,Union as Sg,unionLayoutDiscriminator as Kg,utf8 as Cg}from"@solana/buffer-layout";var uo=Xl,ga=jl;var fi=Jl;var wa=$l,Lt=Hl;var yi=Zl;var Aa=zl;var qe=Yl;var Pa=Ql;var fe=Gl;var bi=Ul;var un=class extends uo{constructor(t,n,r){super(t,r);this.blob=fe(t),this.signed=n}decode(t,n=0){let r=new ha(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 ha(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},co=class extends uo{constructor(t){super(8,t);this._lower=bi(yi(),!1),this._upper=bi(yi(),!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 R(R({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function D(o){return new fi(1,o)}function ze(o){return new fi(4,o)}function P(o){return new un(8,!1,o)}function Y(o){return new un(16,!1,o)}function Ta(o){return new un(1,!0,o)}function mo(o){return new un(8,!0,o)}function Ia(o){return new un(16,!0,o)}var lo=class extends uo{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 lo(fe(32),e=>new em(e),e=>e.toBuffer(),o)}function Ue(o){return new lo(wa(),tm,nm,o)}function tm(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function nm(o){return o?1:0}var gi=class extends ga{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new gi(o,e,t)}function G(o,e,t){let n,r=typeof e=="number"?e:ka(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=ka(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 Pa(o,r,t)}var Zt=_([K("mint"),K("owner"),P("amount"),ze("delegateOption"),K("delegate"),D("state"),ze("isNativeOption"),P("isNative"),P("delegatedAmount"),ze("closeAuthorityOption"),K("closeAuthority")]);function rm(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function wi(o,...e){if(!rm(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 Ai(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 xa(o,e){wi(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var fo=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),It=(o,e)=>o<<32-e|o>>>e;var Gg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function om(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Pi(o){return typeof o=="string"&&(o=om(o)),wi(o),o}var po=class{clone(){return this._cloneInto()}},Xg={}.toString;function Ba(o){let e=n=>o().update(Pi(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function im(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 Sa=(o,e,t)=>o&e^~o&t,Ka=(o,e,t)=>o&e^o&t^e&t,yo=class extends po{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=fo(this.buffer)}update(e){Ai(this);let{view:t,buffer:n,blockLen:r}=this;e=Pi(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=fo(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){Ai(this),xa(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 d=s;d<r;d++)t[d]=0;im(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=fo(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 d=0;d<u;d++)a.setUint32(4*d,l[d],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 sm=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]),$t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Jt=new Uint32Array(64),hi=class extends yo{constructor(){super(64,32,8,!1),this.A=$t[0]|0,this.B=$t[1]|0,this.C=$t[2]|0,this.D=$t[3]|0,this.E=$t[4]|0,this.F=$t[5]|0,this.G=$t[6]|0,this.H=$t[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 d=0;d<16;d++,t+=4)Jt[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let m=Jt[d-15],p=Jt[d-2],y=It(m,7)^It(m,18)^m>>>3,f=It(p,17)^It(p,19)^p>>>10;Jt[d]=f+Jt[d-7]+y+Jt[d-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let d=0;d<64;d++){let m=It(a,6)^It(a,11)^It(a,25),p=l+m+Sa(a,c,u)+sm[d]+Jt[d]|0,f=(It(n,2)^It(n,13)^It(n,22))+Ka(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(){Jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ca=Ba(()=>new hi);var uw=ue("Raydium_Util");function La({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=Zt.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:Ra.default,amount:new cm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ye({fromPublicKey:o,programId:e=um}){let t=am.generate().publicKey.toBase58().slice(0,32);return{publicKey:lm(o,t,e),seed:t}}function lm(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=Ca(n);return new Ra(r)}function ki(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Sn}=o;return mm(t,e,n,r)}function Ft(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Sn}=o;return dm(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(Zt.span,n),c=H(t).add(new bm(a)),u=Ye({fromPublicKey:r,programId:Sn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ym.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Zt.span,programId:Sn}),ki({mint:new fm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Sn})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[Ft({tokenAccount:u.publicKey,payer:r,owner:i})]}}function er({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Sn}){return pm(o,e,t,BigInt(String(n)),r,i)}var tr=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=R(R({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:en},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:gm},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=La({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=en,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 bo(t.tokenProgram||en),d=this.getAssociatedTokenAccount(n,new bo(l)),m=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(d))).sort((h,w)=>h.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(r===void 0||m.length>0)return m.length>0?{account:m[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=Ti(s,d,s,n,l);if(u){let w=await this.scope.connection.getAccountInfo(d);if(w===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(E.CreateATA);else if(!(w.owner.equals(l)&&Kn.decode(w.data).mint.equals(n)&&Kn.decode(w.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(E.CreateATA);if(n.equals(ee)&&r.amount){let w=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(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),r.amount&&(p.instructions.push(er({source:w.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:en})),p.instructionTypes.push(E.TransferAmount))}return c||(p.endInstructions.push(Ft({owner:s,payer:r.payer||s,tokenAccount:d,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:d,instructionParams:p}}else{let h=Ye({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Kn.span),k=wm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:w+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Kn.span,programId:l});return p.instructions.push(k,ki({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),c||(p.endInstructions.push(Ft({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=en,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 Ti(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],i=u}return r&&ee.toBase58()===t.toBase58()&&(a.endInstructions=[Ft({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=en,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:d}=t,m=this.getAssociatedTokenAccount(i,s);if(new bo(ee).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return R({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!m.equals(a)&&!u){let p=[],y=Ti(this.scope.ownerPubKey,m,this.scope.ownerPubKey,i,s);if(d){let f=await this.scope.connection.getAccountInfo(m);if(f===null)p.push(y);else if(!(f.owner.equals(en)&&Kn.decode(f.data).mint.equals(i)&&Kn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${m.toString()}`)}else p.push(y);return{tokenAccount:m,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=en,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new bo(ee))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:m}=l,p=xe(l,["tokenAccount"]);c=m,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:m}=d,p=xe(d,["tokenAccount"]);c=m,u.addInstruction(p)}return R({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Fm}from"@solana/spl-token";import{PublicKey as he,SystemProgram as Dm}from"@solana/web3.js";import{PublicKey as va}from"@solana/web3.js";var Ii=_([D("instruction")]),xi=_([D("instruction")]),Am=_([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),G(P(),15,"padding")]),Pm=_([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),Y("perShareReward"),P("lastSlot"),P("perSlotReward")]),hm=_([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),Y("perShareRewardA"),P("perSlotRewardA"),D("option"),K("rewardVaultB"),fe(7),P("totalRewardB"),Y("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),km=_([P(),P("state"),P("nonce"),P("validRewardTokenNum"),Y("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),G(Am,5,"rewardInfos"),K("creator"),K(),G(P(),32,"padding")]),Oa=new Proxy(Pm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(R({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),Na=new Proxy(hm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(R({},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)}}),nr=new Proxy(km,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(R({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return F(R({},i),{rewardType:((s=Object.entries(tn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Tm=_([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Bi=_([D("instruction"),P("nonce"),G(Tm,5,"rewardTimeInfo")]),Si=_([D("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Ki=_([D("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Dw=_([P("state"),K("id"),K("owner"),P("deposited"),G(P(),1,"rewardDebts")]),rr=_([P("state"),K("id"),K("owner"),P("deposited"),G(Y(),1,"rewardDebts"),P(""),P("voteLockedBalance"),G(P(),15)]),Ww=_([P("state"),K("id"),K("owner"),P("deposited"),G(P(),2,"rewardDebts")]),Ma=_([P("state"),K("id"),K("owner"),P("deposited"),G(Y(),2,"rewardDebts"),G(P(),17)]),_a=_([P(),P("state"),K("id"),K("owner"),P("deposited"),G(Y(),5,"rewardDebts"),G(P(),16)]),$e=_([D("instruction"),P("amount")]),Im=_([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),Ta("digitShift"),G(D(),7,"reserved1"),G(P(),7,"reserved2")]),Va=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),G(D(),32,"reserved1"),G(Im,4,"votingMints"),mo("timeOffset"),D("bump"),G(D(),7,"reserved2"),G(P(),11,"reserved3")]),xm=_([mo("startTime"),mo("endTime"),D("kind"),G(D(),15,"reserved")]),Bm=_([G(xm,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ue("isUsed"),Ue("allowClawback"),D("votingMintConfigIdx"),G(D(),29,"reserved")]),Ea=_([fe(8),K("voterAuthority"),K("registrar"),G(Bm,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),G(D(),94,"reserved")]);var jw=ue("Raydium_farm_config"),Fa=new va("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Da=new va("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Wa={3:Oa,5:Na,6:nr},qa={3:rr,5:Ma,6:_a},Ci=o=>[3,5,6].indexOf(o)!==-1,Ri=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)},tn={"Standard SPL":0,"Option tokens":1},pt={[ca.toString()]:3,[la.toString()]:5,[Hn.toString()]:6};import{PublicKey as ie,SystemProgram as cn,SYSVAR_RENT_PUBKEY as Cm,SYSVAR_CLOCK_PUBKEY as sr,TransactionInstruction as Ee}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Rm,TOKEN_PROGRAM_ID as at,ASSOCIATED_TOKEN_PROGRAM_ID as Lm}from"@solana/spl-token";import go from"bn.js";function Li(o,e,t){return se([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function Oi(o,e){return se([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function Ni(o,e){return se([e.toBuffer()],o)}function Mi(o,e,t){return se([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function _i(o,e,t){return se([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function Vi(o,e,t,n){return se([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import ot from"bn.js";var or=ue("Raydium.farm.util");function ir({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=se([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}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var Ua=({programId:o,poolId:e})=>se([e.toBuffer()],o);function Ga(o){return{isSet:new ot(1),rewardPerSecond:H(o.perSecond),rewardOpenTime:H(o.openTime),rewardEndTime:H(o.endTime),rewardType:H(tn[o.rewardType])}}function Ei(o){return H(o.endTime).sub(H(o.openTime)).mul(H(o.perSecond))}function Cn(o){let e=qa[o];return e||or.logWithError("invalid version",o),e}function Sm(o){let e=Wa[o];return e||or.logWithError("invalid version",o),e}function Km(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new ot(t)))return o;let r=new ot(t).sub(o.lastSlot);o.lastSlot=new ot(t);for(let i of o.rewardInfos){if(e.amount.eq(new ot(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new ot(10).pow(new ot(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 ot(0)))continue;let i=ot.min(new ot(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 ot(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function dA({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new ot(10),c=[];for(let m of e){let p=ke(m);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:m.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await Ve(o,c,n);for(let{pubkey:m,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=R({},u[g]),y==="state"){let h=Sm(p);(!b||!b.data||b.data.length!==h.span)&&or.logWithError(`invalid farm state account info, pools.id, ${m}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Zt.span)&&or.logWithError(`invalid farm lp vault account info, pools.lpVault, ${m}`),u[g].lpVault=Zt.decode(b.data);else if(y==="ledger"){let h=Cn(p);b&&b.data&&(b.data.length!==h.span&&or.logWithError(`invalid farm ledger account info, ledger, ${m}`),u[g].ledger=h.decode(b.data))}}let d=s||i?await o.getSlot():0;for(let m of Object.keys(u))u[m]!==void 0&&(u[m].state=Km(u[m].state,u[m].lpVault,d,r));for(let[m,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new ot(9)):a.pow(new ot(15)),b=p.rewardInfos.map((g,h)=>{let w=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(w)});u[m].wrapped=F(R({},u[m].wrapped),{pendingRewards:b})}return u}function pA(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>aa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ua(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function vi(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=Va.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=Ea.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Om=ue("Raydium_farm_instruction"),ar={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 wo(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Om.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ii.span);Ii.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:Cm,isWritable:!1})];return{instruction:new Ee({programId:r,keys:c,data:a}),instructionType:E.FarmV3CreateLedger}}function Xa(o){var n;let e=Buffer.alloc(Bi.span);Bi.encode({instruction:0,nonce:new go(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Zo,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 Ee({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function za(o){let e=Buffer.alloc(xi.span);xi.encode({instruction:5},e);let t=[A({pubkey:at,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 Ee({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function Nm(o,e,t,n,r,i,s,a,c,u,l,d,m){let p=_([D("depositEntryIndex"),P("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:at,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:Gr,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:d,amount:m},f);let b=Buffer.from([...ar.voterStakeRegistryDeposit,...f]);return new Ee({keys:y,programId:o,data:b})}function Mm(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([...ar.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ee({keys:i,programId:o,data:a})}function _m(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){let f=_([D("depositEntryIndex"),P("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:at,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...ar.voterStakeRegistryWithdraw,...g]);return new Ee({keys:b,programId:o,data:h})}function Vm(o,e,t,n,r,i){let s=_([D("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 Ee({keys:a,programId:o,data:c})}function Em(o,e,t,n,r,i,s,a){let c=_([D("voterBump"),D("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:tt,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let d=Buffer.from([...ar.voterStakeRegistryCreateVoter,...l]);return new Ee({keys:u,programId:o,data:d})}function vm(o,e,t,n,r,i,s,a,c,u,l,d){let m=_([D("depositEntryIndex"),D("kind"),D("option"),P("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:at,isSigner:!1,isWritable:!1},{pubkey:Lm,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(m.span);m.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:d},y);let f=Buffer.from([...ar.voterStakeRegistryCreateDepositEntry,...y]);return new Ee({keys:p,programId:o,data:f})}async function RA({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Li(n,r,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),d=await o.getAccountInfo(l);if(d===null)throw Error("user is not staker");let m=rr.decode(d.data),p=m.deposited.sub(m.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new go(0)))throw Error("user do not has new stake amount");let y=Oi(e,a).publicKey,f=Ni(e,a).publicKey,{publicKey:b,nonce:g}=Mi(n,u,s),h=be(b,y,c).publicKey,{publicKey:w,nonce:k}=_i(n,u,s),T=Vi(t,r,i,s).publicKey,I=[],S=be(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&I.push(Rm(s,S,s,y)),await o.getAccountInfo(b)===null){let U=Vm(t,r,s,i,s,T);I.push(U,Em(n,u,b,w,s,s,g,k))}let{index:x,isInit:L}=await vi(o,u,b,y);return L||I.push(vm(n,u,b,h,s,s,y,x,0,void 0,0,!1)),I.push(Nm(n,u,b,h,S,s,l,a,y,f,e,x,p),Mm(n,u,b,w)),I}async function LA({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Li(n,r,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),d=await o.getAccountInfo(l);if(d===null)throw Error("user is not staker");let m=rr.decode(d.data);if(m.voteLockedBalance.eq(new go(0)))throw Error("user has vote locked balance = 0");let p=Oi(e,a).publicKey,y=Ni(e,a).publicKey,{publicKey:f}=Mi(n,u,s),b=be(f,p,c).publicKey,{publicKey:g}=_i(n,u,s),h=Vi(t,r,i,s).publicKey,w=[],{index:k,isInit:T}=await vi(o,u,f,p);if(!T)throw Error("deposit entry index check error");return w.push(_m(n,u,f,s,h,g,b,be(s,p,c).publicKey,l,a,p,y,e,k,m.voteLockedBalance)),w}function Fi({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Si.span);Si.encode({instruction:3,rewardReopenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardPerSecond:H(r.perSecond)},i);let s=[A({pubkey:at,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 Ee({programId:n.programId,keys:s,data:i})}function Di({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Ki.span);Ki.encode({instruction:4,isSet:new go(1),rewardPerSecond:H(r.perSecond),rewardOpenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardType:H(tn[r.rewardType])},i);let s=[...Zo,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 Ee({programId:t.programId,keys:s,data:i})}function OA(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,d]=[new ie(e.programId),new ie(e.id)],m=Qe({programId:l,poolId:d,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:at,isWritable:!1}),...u?[A({pubkey:cn.programId,isWritable:!1})]:[],A({pubkey:d}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:m}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:r})]:[A({pubkey:d}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:m}),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:sr,isWritable:!1}),A({pubkey:at,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 Ee({programId:l,keys:y,data:p})}function ur(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($e.span);$e.encode({instruction:2,amount:H(s)},l);let d=[A({pubkey:at,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 m=0;m<t.rewardInfos.length;m++)d.push(A({pubkey:new ie(t.rewardInfos[m].vault)})),d.push(A({pubkey:r[m]}));return new Ee({programId:a,keys:d,data:l})}function cr(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}),d=Buffer.alloc($e.span);$e.encode({instruction:12,amount:H(s)},d);let m=[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:sr,isWritable:!1}),A({pubkey:at,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(A({pubkey:r[p]})),m.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(A({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}function lr(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}),d=Buffer.alloc($e.span);$e.encode({instruction:11,amount:H(s)},d);let m=[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:sr,isWritable:!1}),A({pubkey:at,isWritable:!1})];if(a)for(let p of a)m.push(A({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}function Ya(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}),d=Buffer.alloc($e.span);$e.encode({instruction:10,amount:H(s)},d);let m=[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:sr,isWritable:!1}),A({pubkey:at,isWritable:!1})];if(a)for(let p of a)m.push(A({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}function Qa(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}),d=Buffer.alloc($e.span);$e.encode({instruction:11,amount:H(s)},d);let m=[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:sr,isWritable:!1}),A({pubkey:at,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(A({pubkey:r[p]})),m.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(A({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}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($e.span);$e.encode({instruction:1,amount:H(s)},l);let d=[A({pubkey:at,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 m=0;m<t.rewardInfos.length;m++)d.push(A({pubkey:new ie(t.rewardInfos[m].vault)})),d.push(A({pubkey:r[m]}));return new Ee({programId:a,keys:d,data:l})}var mr=class extends Be{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:Ei(F(R({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:r=Hn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new he(e.lpMint.address),lockInfo:{lockMint:Fa,lockVault:Da},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Ye({fromPublicKey:u,programId:a.programId}),d=await this.scope.connection.getMinimumBalanceForRentExemption(nr.span);c.addInstruction({instructions:[Dm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:d,space:nr.span,programId:a.programId})]});let{publicKey:m,nonce:p}=Ua({programId:new he(a.programId),poolId:l.publicKey}),y=ir({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let T of a.rewardInfos){T.openTime>=T.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",T.openTime.toString()),isNaN(tn[T.rewardType])&&this.logAndCreateError("rewardType error",T.rewardType),Number(T.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",T.perSecond),f.push(Ga(T));let{rewardPubKey:I,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:T,payer:u});S&&c.addInstruction(S),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=T.mint.equals(Ne)?new he(Me.address):T.mint;b.push({rewardMint:B,rewardVault:ir({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:I})}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:w,instructionType:k}=Xa({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:m,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[w],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:m,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=pt[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)),d=s.rewardInfos[l];d||this.logAndCreateError("configuration does not exist","rewardMint",u);let m=(b=d.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:[Fi({payer:this.scope.ownerPubKey,rewardVault:m,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=pt[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(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let d of n){let m=d.mint.equals(Ne)?new he(Me.address):d.mint,p=a.rewardInfos.findIndex(w=>new he(w.mint.address).equals(m)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",m);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:d,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Fi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:d});u.addInstruction({instructions:[h],instructionTypes:[E.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=pt[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,d=ir({programId:new he(n.programId),poolId:new he(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:m,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),m||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[Di({payer:this.scope.ownerPubKey,userRewardTokenPub:m,farmKeys:a,rewardVault:d,rewardInfo:r})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=pt[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 d=l.mint.equals(Ne)?new he(Me.address):l.mint,m=ir({programId:new he(n.programId),poolId:new he(n.id),mint:d,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=Di({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:m,rewardInfo:F(R({},l),{mint:d})});u.addInstruction({instructions:[f],instructionTypes:[E.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:d,programId:m}=n,p=pt[m];Ci(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 w={};for(let v of this.scope.account.tokenAccounts)if(a){let Z=be(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&Z.equals(v.publicKey)&&(w[v.mint.toString()]=v.publicKey)}else w[v.mint.toString()]=v.publicKey;let k=b.lpMint,T=w[k.address];T||this.logAndCreateError("you don't have any lp","lp zero",w);let I=[];for(let v of d){let Z=s&&v.mint.address===ee.toString(),$=w[v.mint.address];if(!$){let{account:W,instructionParams:mt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new he(v.mint.address),notUseTokenAccount:Z,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:c});$=W,mt&&h.addInstruction(mt)}w[v.mint.address]=$,I.push($)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=Cn(p).decode(B.data)),n.programId!==Hn.toString()&&!S){let{instruction:v,instructionType:Z}=wo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[v],instructionTypes:[Z]})}let C=Ri({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:I});C&&this.logAndCreateError(C);let x={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:u==null?void 0:u.map(v=>new he(v))},L=p===6?ja(x):p===5?Qa(x):Ya(x),U={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[U[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:d}=e,{rewardInfos:m}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=pt[n.programId];Ci(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(d);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=be(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=Qe({programId:new he(n.programId),poolId:new he(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);x||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x}),Cn(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===ee.toString(),w=b[g.toString()];if(!w){let{account:C,instructionParams:x}=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});w=C,x&&f.addInstruction(x)}b[g.toString()]=w;let k=[];for(let C of m){let x=s&&C.mint.address===ee.toString(),L=b[C.mint.address];if(!L){let{account:U,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new he(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});L=U,v&&f.addInstruction(v)}b[C.mint.address]=L,k.push(L)}let T=Ri({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:k});T&&this.logAndCreateError(T);let I={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new he(C))},S=p===6?ur(I):p===5?cr(I):lr(I),B={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=pt[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:Ei(F(R({},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:[Fm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:d,instructionType:m}=za({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[d],instructionTypes:[m]}).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(),d={};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)&&(d[y.mint.toString()]=y.publicKey)}else d[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(R({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,w=pt[f],k=b.address,T=n&&k===ee.toString(),I=d[k];if(!I){let{account:U,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new he(k),notUseTokenAccount:T,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:i,checkCreateATAOwner:s});I=U,v&&l.addInstruction(v)}d[k.toString()]=I;let S=[];for(let U of g){let v=n&&U.mint.address===ee.toString(),Z=d[U.mint.address];if(!Z){let{account:$,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:U.mint.programId,mint:new he(U.mint.address),notUseTokenAccount:v,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:i,checkCreateATAOwner:s});Z=$,W&&l.addInstruction(W)}d[U.mint.address]=Z,S.push(Z)}let B=p[h],C={amount:dt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:I,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(U=>new he(U))},x=w===6?ur(C):w===5?cr(C):lr(C),L={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[L[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as Re}from"@solana/web3.js";import{AccountLayout as Bd,NATIVE_MINT as Mu,TOKEN_PROGRAM_ID as Ko}from"@solana/spl-token";var tP=_([ze("mintAuthorityOption"),K("mintAuthority"),P("supply"),D("decimals"),D("isInitialized"),ze("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Wm}from"@solana/web3.js";import{MintLayout as Ha,TOKEN_PROGRAM_ID as qm}from"@solana/spl-token";var mP=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new Wm(e));return!t||t.data.length!==Ha.span?void 0:Ha.decode(t.data)},dP=({mint:o,decimals:e,programId:t=qm,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}},Ao=o=>new Ie({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),dr=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=xe(i,["amount","isRaw","name"]);return new ye(new Ie({mint:st(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function pP(o){return o.address===Ct.address?Me:o}function fP(o){return o.address===Me.address?Ct:o}var ft=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=xe(i,["address","programId","decimals"]);return R({chainId:101,address:st(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Rn=o=>o?F(R({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(R({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(R({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Nn,ASSOCIATED_TOKEN_PROGRAM_ID as nd}from"@solana/spl-token";import{PublicKey as ge,TransactionInstruction as Wt,SystemProgram as ou,SYSVAR_RENT_PUBKEY as rd}from"@solana/web3.js";var Wi=_([D("instruction"),P("amountIn"),P("minAmountOut")]),qi=_([D("instruction"),P("maxAmountIn"),P("amountOut")]),BP=_([D("instruction"),D("nonce")]),Ui=_([D("instruction"),D("nonce"),P("startTime")]),pr=_([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),P("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),P("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),P("lpReserve"),G(P(),3,"padding")]),Um=_([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),G(P(),64,"padding")]),Gi=_([D("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide")]),Xi=_([D("instruction"),P("amountIn")]),SP={4:pr,5:Um},Za=_([P("fee")]);import{PublicKey as Gm}from"@solana/web3.js";var On=new Gm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),mn=5e4,Xm=_([P("x"),P("y"),P("price")]),zm=_([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),G(Xm,mn,"DataElement")]);function Ym(o,e){return[0,mn-2]}function Qm(o){return[0,mn-2]}function jm(o){return[0,mn-2]}function Hm(o,e,t){let[n,r]=Ym(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,d=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===d)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<d)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function zi(o,e,t){let[n,r,i]=Hm(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),d=s*l,m=(c-s)*(e*a-s*t)*u,p=d+m;return e*o.multiplier*l/p}}function ln(o,e,t){return e*o.multiplier/t}function $a(o,e,t){return e*t/o.multiplier}function Zm(o,e){let[t,n]=Qm(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 $m(o,e){let[t,n]=jm(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 Ja(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=Zm(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,d=o.DataElement[s].price,m=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[d,p,!0,a]:[l,m,!0,a];{let y,f;return n?(y=l+(d-l)*(e-c)/(u-c),f=m-(r-c)*o.multiplier/d):(y=l+(d-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function Jm(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=$m(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,d=o.DataElement[s].price,m=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=m)return n?[d,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(d-l)*(m-e)/(m-p),f=c+d*(m-r)/o.multiplier):(y=l+(d-l)*(m-e)/(m-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function ed(o,e){let t=Ja(o,e,0,!1);return t[3]?t[0]:0}function eu(o,e,t,n){let r=zi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!0,[u,l,d,m]=Ja(o,i,a,c);if(!m)return 0;if(d)return n*o.multiplier/u;{let p=s-l;return $a(o,p,r)}}function tu(o,e,t,n){let r=zi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!1,[u,l,d,m]=Jm(o,s,a,c);if(!m)return 0;if(d)return n*u/o.multiplier;{let p=i-l;return $a(o,p,r)}}function td(o){let e=zm.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 nu(o,e,t,n){let r=ed(o,ln(o,e,zi(o,e,t)))/o.multiplier;return n?r:1/r}var Ln=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(On);e&&(this._layoutData=td(e==null?void 0:e.data))}}};var ru=ue("Raydium_liquidity_instruction");function iu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Gi.span);Gi.encode({instruction:3,baseAmountIn:H(r),quoteAmountIn:H(i),fixedSide:s==="base"?dt:Ys},a);let c=[A({pubkey:Nn,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:On})),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 Yi(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(Xi.span);Xi.encode({instruction:4,amountIn:H(r)},a);let c=[A({pubkey:Nn,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:On})):(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 su({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:d,marketProgramId:m,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:w,coinAmount:k,pcAmount:T,ammConfigId:I,feeDestinationId:S}){let B=_([D("instruction"),D("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),C=[{pubkey:Nn,isSigner:!1,isWritable:!1},{pubkey:nd,isSigner:!1,isWritable:!1},{pubkey:ou.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:I,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:h,openTime:w,coinAmount:k,pcAmount:T},x),{instruction:new Wt({keys:C,programId:o,data:x}),instructionType:E.AmmV4CreatePool}}function UP(o){let e=_([D("instruction"),D("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 od({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=ke(o),s=Buffer.alloc(Wi.span);Wi.encode({instruction:9,amountIn:H(t),minAmountOut:H(n)},s);let a=[A({pubkey:Nn,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:On})),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 id({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=ke(o),s=Buffer.alloc(qi.span);qi.encode({instruction:11,maxAmountIn:H(t),amountOut:H(n)},s);let a=[A({pubkey:Nn,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:On})),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 Po(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 od(F(R({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return id(F(R({},a),{maxAmountIn:r,amountOut:i}),t);ru.logWithError("invalid params","params",o)}throw ru.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function GP({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Ui.span);Ui.encode({instruction:0,nonce:5,startTime:H(t)},n);let r=ke(o),i=[A({pubkey:Nn,isWritable:!1}),A({pubkey:ou.programId,isWritable:!1}),A({pubkey:rd,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 au({poolKeys:o}){let e=_([D("instruction"),D("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 nn,ASSOCIATED_TOKEN_PROGRAM_ID as Iu}from"@solana/spl-token";import{PublicKey as q,TransactionInstruction as Bt,SystemProgram as Mn,Keypair as ts}from"@solana/web3.js";import xu from"bn.js";import bd from"bn.js";function uu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function zP(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function YP(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function ho(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Qi(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 fr(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function cu(o,e){return fr(o,e)?null:Qi(o,e)}function lu(o,e){return fr(o,e)?null:ji(o,e)}var sd=Buffer.from("amm_config","utf8"),ad=Buffer.from("pool","utf8"),ud=Buffer.from("pool_vault","utf8"),cd=Buffer.from("pool_reward_vault","utf8"),mu=Buffer.from("position","utf8"),ld=Buffer.from("tick_array","utf8"),md=Buffer.from("operation","utf8"),dd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function ZP(o,e){return se([sd,uu(e)],o)}function du(o,e,t,n){return se([ad,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Hi(o,e,t){return se([ud,e.toBuffer(),t.toBuffer()],o)}function pu(o,e,t){return se([cd,e.toBuffer(),t.toBuffer()],o)}function we(o,e,t){return se([ld,e.toBuffer(),ho(t)],o)}function dn(o,e,t,n){return se([mu,e.toBuffer(),ho(t),ho(n)],o)}function yt(o,e){return se([mu,e.toBuffer()],o)}function ko(o){return se([Buffer.from("metadata","utf8"),xn.toBuffer(),o.toBuffer()],xn)}function yr(o){return se([md],o)}function ut(o,e){return se([dd,e.toBuffer()],o)}import bt from"bn.js";var de=new bt(0),ct=new bt(1),qt=new bt(-1),lt=new bt(1).shln(64),To=new bt(1).shln(128),Zi=lt.sub(ct),br=64,fu=To.subn(1),je=-443636,Je=-je,Ot=new bt("4295048016"),Nt=new bt("79226673521066979257578248091"),Io=new bt("4295048017"),xo=new bt("79226673521066979257578248090"),yu=16,bu="59543866431248",gu="184467440737095516",wu="15793534762490258745",Bo=new bt(10).pow(new bt(6)),pd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(pd||{}),eh={[500]:10,[3e3]:60,[1e4]:200},th={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},Au={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:[]},nh=new bt("18446744073700000000");var fd=15,le=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=Q.getTickArrayStartIndexByTick(r,i),l=Q.getInitializedTickArrayInRange(s,a,i,u,Math.floor(fd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);c.push(y)}let d=(await ht(e,c)).map(p=>p!==null?gr.decode(p.data):null),m={};for(let p=0;p<c.length;p++){let y=d[p];y!==null&&(m[y.startTickIndex]=F(R({},y),{address:c[p]}))}return m}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=Q.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:d,tickArrayAddress:m,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[d,m,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?Q.searchLowBitFromStart(r,i,s-1,1,t):Q.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}=we(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=Q.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 m=u.ticks[c];if(m.liquidityGross.gtn(0)){l=m;break}c=c-1}else for(c=c+1;c<_e;){let m=u.ticks[c];if(m.liquidityGross.gtn(0)){l=m;break}c=c+1}let{publicKey:d}=we(e,t,a);return{initializedTick:l,tickArrayAddress:d,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Q.checkIsOutOfBoundary(e)){if(e>Je)return!1;let n=Q.getTickArrayStartIndexByTick(je,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return _e*e}};import oe from"bn.js";import{PublicKey as xt}from"@solana/web3.js";import Ke from"bn.js";var $i=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),d=cu(1024,l);if(d!==null){let m=(u-d-512)*a;return{isInit:!0,tickIndex:m}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),d=lu(1024,l);if(d!==null){let m=(u+d-512)*a;return{isInit:!0,tickIndex:m}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},wr=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(Je<=t)throw Error(`extensionTickBoundary check error: ${Je}, ${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:Q.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=Q.mergeTickArrayBitmap(e).shln(pn-1-a),u=fr(512,c)?null:Qi(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=Q.mergeTickArrayBitmap(e).shrn(a),u=fr(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 Mt from"bn.js";var Ar=class{static getfeeGrowthInside(e,t,n){let r=new Mt(0),i=new Mt(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 Mt(0),a=new Mt(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,lt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),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,lt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),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),d=ne.mulDivFloor(l,t.liquidity,lt),m=u.rewardAmountOwed.add(d);i.push(m)}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),d=ne.mulDivFloor(l,t.liquidity,lt),m=u.rewardAmountOwed.add(d);i.push(m)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Mt(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 Mt(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 Mt(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 Mt(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,w;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,d=ce.getAmountsFromLiquidity(a,c,u,n,i),[m,p]=[Pe(d.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Pe(d.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Pe(new Mt(new V(d.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),Pe(new Mt(new V(d.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:m,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(m.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Pu}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:d}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!d)throw new Error("Invalid tick array");c.push(d);let{allTrade:m,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:m,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}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:d,accounts:m,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(...m),{expectedAmountIn:d,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?wr.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(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}=we(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),r=t?Q.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Q.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(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=wr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<je||t>Je)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 d=i[l],m=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(d.tokenMint))==null?void 0:c.owner;if(m===void 0)throw Error("get new reward mint info error");let p=F(R({},d),{perSecond:ne.x64ToDecimal(d.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new xt(m)});if(p.tokenMint.equals(xt.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,lt),w=p.rewardTotalEmissioned.add(h);s.push(F(R({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=Q.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>Je&&(t=le.getArrayStartIndex(Je,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 Ve(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=hu.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=Q.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Q.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let d of l){let{publicKey:m}=we(c.programId,c.id,d);i.push({pubkey:m}),r[m.toString()]=c.id}}let s=await Ve(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=gr.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(R({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest: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(m=>m.accountInfo.mint),u=[];for(let m of c)for(let p of s)u.push(yt(p,m).publicKey);let l=await ht(t,u,{batchRequest:r}),d={};for(let m of l){if(m===null)continue;let p=So.decode(m.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),T=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:w,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(B=>F(R({},B),{pendingReward:new Ke(0)})),leverage:T,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let I=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);d[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=I,d[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let m=Object.values(d),p=await ht(t,m,{batchRequest:r}),y={};for(let f=0;f<m.length;f++){let b=p[f];if(b===null)continue;let g=m[f].toString();y[g]=gr.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}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[d[h].toString()],T=y[d[w].toString()],I=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=T.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await Ar.GetPositionFees(f,g,I,S),x=await Ar.GetPositionRewards(f,g,I,S);g.tokenFeeAmountA=B.gte(new Ke(0))?B:new Ke(0),g.tokenFeeAmountB=C.gte(new Ke(0))?C:new Ke(0);for(let L=0;L<x.length;L++)g.rewardInfos[L].pendingReward=x[L].gte(new Ke(0))?x[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 U;let u,l=n.toBase58()===e.mintA.address,[d,m]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new V(0))?u=l?Ot.add(new Ke(1)):Nt.sub(new Ke(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Pe(i,d,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((U=p.fee)!=null?U:de),u,c),w=Pe(f,m,r,!1),k=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=l?k:new V(1).div(k),I=f.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=Pe(I,m,r,!1),B=l?e.currentPrice:new V(1).div(e.currentPrice),C=new V(T).sub(B).abs(),x=B,L=new Ze(new V(C).mul(10**15).toFixed(0),new V(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:Rt(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:T,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],[d,m]=[new Ie(F(R({},u),{mint:u.address,isToken2022:u.programId===Pu.toBase58()})),new Ie(F(R({},l),{mint:l.address,isToken2022:l.programId===Pu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:w,priceImpact:k,fee:T,remainingAccounts:I,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new xt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),B=F(R({},y),{amount:new ye(d,y.amount),fee:y.fee===void 0?void 0:new ye(d,y.fee)}),C=F(R({},f),{amount:new ye(m,f.amount),fee:f.fee===void 0?void 0:new ye(m,f.fee)}),x=F(R({},b),{amount:new ye(m,b.amount),fee:b.fee===void 0?void 0:new ye(m,b.fee)}),L=new nt({baseToken:d,denominator:new Ke(10).pow(new Ke(20+d.decimals)),quoteToken:m,numerator:h.mul(new V(10**(20+m.decimals))).toFixed(0)}),U=new nt({baseToken:d,denominator:new Ke(10).pow(new Ke(20+d.decimals)),quoteToken:m,numerator:w.mul(new V(10**(20+m.decimals))).toFixed(0)}),v=new ye(d,T);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:L,executionPrice:U,priceImpact:k,fee:v,remainingAccounts:I,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=Q.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Q.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,d=a-s,m=i.priceMax-i.priceMin,p;return l<=0?p=0:d===l?p=m/l:m===l?p=l/d:p=l/m*(l/d),{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],d=r[st(e.mintA.address).toString()],m=r[st(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!d||!m)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:w}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:T}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),I=new V(h.toString()).div(new V(10).pow(p)).mul(d.value).add(new V(w.toString()).div(new V(10).pow(y)).mul(m.value)),S=new V(k.toString()).div(new V(10).pow(p)).mul(d.value).add(new V(T.toString()).div(new V(10).pow(y)).mul(m.value)),B=S.div(I.add(S)).div(S),x=new V(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),L=3600*24*365,U=e.rewardDefaultInfos.map(v=>{var W,mt;let Z=v.mint.decimals,$=r[v.mint.address];return c<((W=v.startTime)!=null?W:0)||c>((mt=v.endTime)!=null?mt:0)||!v.perSecond||!$||Z===void 0?0:new V($.value).mul(new V(v.perSecond).mul(L)).div(new V(10).pow(Z)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:U,apr:x+U.reduce((v,Z)=>v+Z,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),d=te.getSqrtPriceX64FromTick(n),m=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(d))b=t?ce.getLiquidityFromTokenAmountA(d,m,f,!a):new Ke(0);else if(l.lte(m)){let w=ce.getLiquidityFromTokenAmountA(l,m,f,!a),k=ce.getLiquidityFromTokenAmountB(d,l,f);b=t?w:k}else b=t?new Ke(0):ce.getLiquidityFromTokenAmountB(d,m,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,w;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,d=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new V(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[m,p]=[Pe(d.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Pe(d.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Pe(d.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),Pe(d.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:i,amountA:m,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(m.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new xt(c.id));(await ht(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=yn.decode(c.data))});let s=t.map(c=>ut(new xt(c.programId),new xt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(R({},c),{[u.id]:F(R({},n[u.id]),{id:new xt(u.id),version:6,programId:new xt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(R({},u.config),{id:new xt(u.config.id),fundOwner:""}),currentPrice:new V(u.price),exBitmapInfo:a[ut(new xt(u.programId),new xt(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 Wh({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var w,k,T,I;let[u,l,d,m]=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(d,(w=o.mintA.extensions)==null?void 0:w.feeConfig,a,!c),Pe(m,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((T=b.fee)!=null?T:de),g.amount.sub((I=g.fee)!=null?I:de));return ce.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}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(ct)),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(ct)).div(n)}static x64ToDecimal(e,t){return new V(e.toString()).div(V.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(V.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(To).sub(t).mod(To)}};function ve(o,e){return Ji(o.mul(e),64,256)}function yd(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ji(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(br);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,ct,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(br);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,ct,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>Je)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new oe("18445821805675395072"):new oe("18446744073709551616");return(t&2)!=0&&(n=ve(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=ve(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=ve(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=ve(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=ve(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=ve(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=ve(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=ve(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=ve(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=ve(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=ve(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=ve(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=ve(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=ve(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=ve(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=ve(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=ve(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=ve(n,new oe("37481735321082"))),e>0&&(n=fu.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Nt)||e.lt(Ot))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=yd(n,32,128),i=new oe("8000000000000000","hex"),s=0,a=new oe(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new oe(0))&&s<yu;){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),d=r.add(u).mul(new oe(bu)),m=Ji(d.sub(new oe(gu)),64,128).toNumber(),p=Ji(d.add(new oe(wu)),64,128).toNumber();return m==p?m:te.getSqrtPriceX64FromTick(p).lte(e)?p:m}},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(br),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),ct,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),lt):ne.mulDivFloor(n,t.sub(e),lt)}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,ct,Zi):a.shrn(br)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Zi,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 oe(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 oe(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,d=new oe(new V(c.toString()).mul(l).toFixed(0)),m=new oe(new V(u.toString()).mul(l).toFixed(0));return{amountSlippageA:d,amountSlippageB:m}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,w,k,T;let u=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),d=te.getSqrtPriceX64FromTick(n),m=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,d,r,s),[y,f]=[Pe(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),Pe(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[Pe(new oe(new V(p.amountA.toString()).mul(m).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),Pe(new oe(new V(p.amountB.toString()).mul(m).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.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,d,m,p,y,f=!1){if(m.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Ot.add(ct):Nt.sub(ct)),s){if(y.lt(Ot))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(d))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Nt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(d))throw new Error("sqrtPriceX64 must greater than current")}let b=m.gt(de),g={amountSpecifiedRemaining:m,amountCalculated:de,sqrtPriceX64:d,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new oe(0)},h=p,w=n[p],k=0,T=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let I={};I.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(w,g.tick,l,s,T),B=S||null,C=null;if(!(B!=null&&B.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:U}=we(e,t,h);C=U,w=n[h];try{B=Q.firstInitializedTick(w,s)}catch{throw Error("not found next tick info")}}I.tickNext=B.tick,I.initialized=B.liquidityGross.gtn(0),p!==h&&C&&(g.accounts.push(C),p=h),I.tickNext<je?I.tickNext=je:I.tickNext>Je&&(I.tickNext=Je),I.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(I.tickNext);let x;if(s&&I.sqrtPriceNextX64.lt(y)||!s&&I.sqrtPriceNextX64.gt(y)?x=y:x=I.sqrtPriceNextX64,[g.sqrtPriceX64,I.amountIn,I.amountOut,I.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(I.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(I.amountIn.add(I.feeAmount)),g.amountCalculated=g.amountCalculated.sub(I.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(I.amountOut),g.amountCalculated=g.amountCalculated.add(I.amountIn.add(I.feeAmount))),g.sqrtPriceX64.eq(I.sqrtPriceNextX64)){if(I.initialized){let L=B.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}T=I.tickNext!=g.tick&&!s&&w.startTickIndex===I.tickNext,g.tick=s?I.tickNext-1:I.tickNext}else if(g.sqrtPriceX64!=I.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);T=L!=g.tick&&!s&&w.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:I,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==I&&(g.accounts.push(we(e,t,I).publicKey),p=I)}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 oe(0),amountIn:new oe(0),amountOut:new oe(0),feeAmount:new oe(0)},a=e.gte(t),c=r.gte(de);if(c){let l=ne.mulDivFloor(r,Bo.sub(new oe(i.toString())),Bo);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 oe(i),Bo.sub(new oe(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var _e=60,pn=512,Q=class{static getTickArrayAddressByTick(e,t,n,r){let i=Q.getTickArrayStartIndexByTick(n,r),{publicKey:s}=we(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Q.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 bd(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[...Q.searchLowBitFromStart(e,t,s-1,i,n),...Q.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Q.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=we(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Q.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=>Q.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>Je}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 ku=_([fe(8),D("bump"),Lt("index"),K(""),ze("protocolFeeRate"),ze("tradeFeeRate"),Lt("tickSpacing"),G(P(),8,"")]),gd=_([ze("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),G(Y(),1,"")]),es=_([fe(8),Ue("initialized"),K("poolId"),G(gd,1e3,"observations"),G(Y(),5,"")]),wd=_([D("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),Y("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),yn=_([fe(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),Lt("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),qe("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),D("status"),G(D(),7,""),G(wd,3,"rewardInfos"),G(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),G(P(),15*4-3,"padding")]),Ad=_([Y("growthInsideLastX64"),P("rewardAmountOwed")]),So=_([fe(8),D("bump"),K("nftMint"),K("poolId"),qe("tickLower"),qe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),G(Ad,3,"rewardInfos"),G(P(),8,"")]),mk=_([fe(8),D("bump"),K("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),G(Y(),3,"rewardGrowthInside"),G(P(),8,"")]),Pd=_([qe("tick"),Ia("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),G(Y(),3,"rewardGrowthsOutsideX64"),G(ze(),13,"")]),gr=_([fe(8),K("poolId"),qe("startTickIndex"),G(Pd,_e,"ticks"),D("initializedTickCount"),G(D(),115,"")]),Tu=_([fe(329),G(K(),100,"whitelistMints")]),hu=_([fe(8),K("poolId"),G(G(P(),8),$i,"positiveTickArrayBitmap"),G(G(P(),8),$i,"negativeTickArrayBitmap")]);var Bu=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,d,m,p,y){let f=_([Y("sqrtPriceX64"),P("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:m,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,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 Bt({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,d=Ye({fromPublicKey:r,programId:n}),[m,p]=[new q(i.address),new q(s.address)],y=[Mn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:d.seed,newAccountPubkey:d.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(es.span),space:es.span,programId:n})],{publicKey:f}=du(n,a,m,p),{publicKey:b}=Hi(n,f,m),{publicKey:g}=Hi(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,d.publicKey,m,b,new q(i.programId||Ge),p,g,new q(s.programId||Ge),ut(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:f,observationId:d.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,w,k,T,I,S,B,C,x){let L=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Y("liquidity"),P("amountMaxA"),P("amountMaxB"),Ue("withMetadata"),D("optionBaseFlag"),Ue("baseFlag")]),U=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],v=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Iu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...U],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:I,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},Z);let $=Buffer.from([...St.openPosition,...Z]);return new Bt({keys:v,programId:e,data:$})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let d=[],[m,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let B=ts.generate();d.push(B),y=B.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(m,p,f),{publicKey:h}=we(m,p,b),{publicKey:w}=be(n.wallet,y,Ge),{publicKey:k}=ko(y),{publicKey:T}=yt(m,y),{publicKey:I}=dn(m,p,r,i),S=this.openPositionFromLiquidityInstruction(m,n.feePayer,p,n.wallet,y,w,k,I,g,h,T,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,i,f,b,s,a,c,u);return{signers:d,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:k,personalPosition:T,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let d=[],[m,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let B=ts.generate();d.push(B),y=B.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(m,p,f),{publicKey:h}=we(m,p,b),{publicKey:w}=be(n.wallet,y,Ge),{publicKey:k}=ko(y),{publicKey:T}=yt(m,y),{publicKey:I}=dn(m,p,r,i),S=this.openPositionFromBaseInstruction(m,n.feePayer,p,n.wallet,y,w,k,I,g,h,T,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(m,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:k,personalPosition:T,protocolPosition:I},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,w,k,T,I,S,B,C,x){let L=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Y("liquidity"),P("amountMaxA"),P("amountMaxB"),Ue("withMetadata"),D("optionBaseFlag"),Ue("baseFlag")]),U=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],v=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Iu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...U],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new xu(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:I==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let $=Buffer.from([...St.openPosition,...Z]);return new Bt({keys:v,programId:e,data:$})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let d,m=[];if(l)d=new q((await l(1))[0]);else{let B=ts.generate();m.push(B),d=B.publicKey}let[p,y]=[new q(e.programId),new q(e.id)],f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:h}=we(p,y,b),{publicKey:w}=be(n.wallet,d,Ge),{publicKey:k}=ko(d),{publicKey:T}=yt(p,d),{publicKey:I}=dn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,d,w,k,I,g,h,T,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(t.mintA.address),new q(t.mintB.address),r,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(p,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:k,personalPosition:T,protocolPosition:I},instructions:[S],signers:m,instructionTypes:[E.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:Mn.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 Bt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new q(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:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h){let w=_([Y("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ue("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],T=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],I=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let S=Buffer.from([...St.increaseLiquidity,...I]);return new Bt({keys:T,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:m}=we(c,u,l),{publicKey:p}=we(c,u,d),{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,m,p,r.tokenAccountA,r.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,d])?ut(c,u).publicKey:void 0);return{address:{tickArrayLower:m,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:m}=we(c,u,l),{publicKey:p}=we(c,u,d),{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:m,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,m,p,r.tokenAccountA,r.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,d])?ut(c,u).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h){let w=_([Y("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ue("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],T=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],I=Buffer.alloc(w.span);w.encode({liquidity:new xu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let S=Buffer.from([...St.increaseLiquidity,...I]);return new Bt({keys:T,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,w){let k=_([Y("liquidity"),P("amountMinA"),P("amountMinB")]),T=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let B=Buffer.from([...St.decreaseLiquidity,...S]);return new Bt({keys:I,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new q(e.programId),new q(e.id)],d=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,d),{publicKey:y}=we(u,l,m),{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 q(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new q(e.rewardDefaultInfos[k].mint.address)});let w=[];return w.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),h,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,m])?ut(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g){let h=_([P("amount"),P("otherAmountThreshold"),Y("sqrtPriceLimitX64"),Ue("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...d.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:m,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],T=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},T);let I=Buffer.from([...St.swap,...T]);return new Bt({keys:k,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,d]=[new q(e.programId),new q(e.id)],[m,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,r.wallet,d,new q(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?m:p,b?p:m,b?y:f,b?f:y,u,n,s,a,c,!0,ut(l,d).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,d,m){let p=_([P("openTime"),P("endTime"),Y("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:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:H(l),endTime:H(d),emissionsPerSecondX64:m},f);let b=Buffer.from([...St.initReward,...f]);return new Bt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new q(e.programId),new q(e.id)],a=pu(i,s,r.mint).publicKey,c=yr(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new q(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:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,d,m){let p=_([D("rewardIndex"),Y("emissionsPerSecondX64"),P("openTime"),P("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:nn,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:m,openTime:H(l),endTime:H(d)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new Bt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new q(e.programId),new q(e.id)],a,c,u;for(let m=0;m<e.rewardDefaultInfos.length;m++)e.rewardDefaultInfos[m].mint.address===r.mint.toString()&&(a=m,c=new q(t.rewardInfos[m].vault),u=new q(t.rewardInfos[m].mint.address));(a===void 0||c===void 0)&&Bu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=yr(i).publicKey,d=[this.setRewardInstruction(i,n.wallet,s,l,new q(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:d,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=_([D("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:nn,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let d=Buffer.from([...St.collectReward,...l]);return new Bt({keys:u,programId:e,data:d})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new q(e.programId),new q(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,c=new q(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Bu.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:[E.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 q(e.programId),new q(e.id)],[d,m]=[new q(t.vault.A),new q(t.vault.B)],[p,y]=[new q(e.mintA.address),new q(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(u,n.wallet,l,new q(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?m:d,f?d:m,f?p:y,f?y:p,c,d,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Lu}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Id}from"@solana/spl-token";import{PublicKey as kd}from"@solana/web3.js";import Su from"bn.js";var Ku=new Su(25),Cu=new Su(1e4),hd={4:3,5:3};var Td=ue("Raydium_liquidity_serum");function Ru({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=kd.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw Td.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 Pr from"bn.js";function os({programId:o}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function gn({name:o,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function xd({programId:o,marketId:e}){let{publicKey:t}=se([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function is({programId:o}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Ou({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:d,nonce:m}=is({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=xd({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:w}=Ru({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:d,nonce:m,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:Lu.default,configId:os({programId:a})}}var ns;async function Uk({connection:o,poolKeysList:e,config:t}){ns||(ns=new Ln({connection:o}),await ns.initStableModelLayout());let n=e.map(s=>au({poolKeys:s}));return(await ta(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=na(s,"GetPoolData"),c=new Pr(vt(a,"status")),u=Number(vt(a,"coin_decimals")),l=Number(vt(a,"pc_decimals")),d=Number(vt(a,"lp_decimals")),m=new Pr(vt(a,"pool_coin_amount")),p=new Pr(vt(a,"pool_pc_amount")),y=new Pr(vt(a,"pool_lp_supply")),f="0";try{f=vt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:d,baseReserve:m,quoteReserve:p,lpSupply:y,startTime:new Pr(f)}})}var rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Nu=o=>{let e={},t=Id.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:ft({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:ft({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new V(r.baseReserve.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new V(r.quoteReserve.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:rs,week:rs,month:rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Lu.default.toBase58(),lpPrice:0,lpAmount:0,lpMint:ft({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import it from"bn.js";var hr=class extends Be{constructor(t){super(t);this.stableLayout=new Ln({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 it(new V(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Ao(t[i?"mintB":"mintA"]),[c,u]=[new it(new V(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new it(new V(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new it(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 d=i?"base":"quote";this.logDebug("input side:",d);let m=dt;s.isZero()||(m=d==="base"?jr(s.mul(u),c):jr(s.mul(c),u)),this.logDebug("amountRaw:",m.toString(),"lpAmount:",l.toString());let p=jr(s.mul(l),d==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Ze(new it(1)).add(r).mul(m).quotient,b=new ye(a,m),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,amountInA:r,amountInB:i,fixedSide:s,config:a,txVersion:c,computeBudgetConfig:u}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",i),(r.isZero()||i.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:i.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:m}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[p,y]=[r.token,i.token],f=await l.getCreatedTokenAccount({mint:p.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new Re(n.lpMint.address)}),h=[p,y],w=[f,b],k=[r.raw,i.raw],T=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",s),T==="quote"?(h.reverse(),w.reverse(),k.reverse(),I=s==="a"?"quote":"base"):T==="base"&&(I=s==="a"?"base":"quote");let[S,B]=h,[C,x]=w,[L,U]=k,v=await this.getAmmPoolKeys(n.id),Z=this.createTxBuilder(),sn=await l.handleTokenAccount({side:"in",amount:L,mint:S.mint,tokenAccount:C,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:$}=sn,W=xe(sn,["tokenAccount"]);Z.addInstruction(W);let _t=await l.handleTokenAccount({side:"in",amount:U,mint:B.mint,tokenAccount:x,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:mt}=_t,hn=xe(_t,["tokenAccount"]);Z.addInstruction(hn);let kn=await l.handleTokenAccount({side:"out",amount:0,mint:new Re(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:on}=kn,Xt=xe(kn,["tokenAccount"]);return Z.addInstruction(Xt),Z.addInstruction({instructions:[iu({poolInfo:n,poolKeys:v,userKeys:{baseTokenAccount:$,quoteTokenAccount:mt,lpTokenAccount:on,owner:this.scope.ownerPubKey},baseAmountIn:L,quoteAmountIn:U,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:v.lookupTableAccount?[v.lookupTableAccount]:[]}),Z.addCustomComputeBudget(u),c===0&&await Z.buildV0(),Z.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:r,config:i,txVersion:s,computeBudgetConfig:a}=t,c=await this.getAmmPoolKeys(n.id),[u,l,d]=[new Re(n.mintA.address),new Re(n.mintB.address),new Re(n.lpMint.address)];this.logDebug("amountIn:",r),r.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",r.toString());let{account:m}=this.scope,p=await m.getCreatedTokenAccount({mint:d,associatedOnly:!1});p||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",m.tokenAccounts);let y=await m.getCreatedTokenAccount({mint:u}),f=await m.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:h}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},i),S=await m.handleTokenAccount({side:"out",amount:0,mint:u,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:w}=S,k=xe(S,["tokenAccount"]);b.addInstruction(k);let B=await m.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:T}=B,I=xe(B,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[Yi({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:p,baseTokenAccount:w,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:r})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:d,tokenProgram:m=Ko,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,Ko).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 w=r.add(a!=null?a:new it(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),T=t.mintB.address===Ie.WSOL.mint.toString(),{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ko,mint:new Re(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||{}),I===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ko,mint:new Re(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=I,g[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let W=pt[s.programId],mt=Qe({programId:new Re(s.programId),poolId:new Re(s.id),owner:this.scope.ownerPubKey,version:W}),hn,on=await this.scope.connection.getAccountInfo(mt);if(on&&(hn=Cn(W).decode(on.data)),W!==6&&!hn){let{instruction:zt,instructionType:Uo}=wo({id:new Re(s.id),programId:new Re(s.programId),version:W,ledger:mt,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[zt],instructionTypes:[Uo]})}let Xt=[];for(let zt of s.rewardInfos){let Uo=zt.mint.address===Ie.WSOL.mint.toString();if(g[zt.mint.address])Xt.push(g[zt.mint.address]);else{let{account:hs,instructionParams:ks}=await this.scope.account.getOrCreateTokenAccount({mint:new Re(zt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Uo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});hs||this.logAndCreateError("farm reward account not found:",zt.mint.address),ks&&b.addInstruction(ks),Xt.push(hs)}}let sn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],_t={userAuxiliaryLedgers:d,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:sn,lpAccount:h,rewardAccounts:Xt},kn=pt[s.programId],ic=kn===6?ur(_t):kn===5?cr(_t):lr(_t),sc={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[ic],instructionTypes:[sc[kn]]})}let x=await this.getAmmPoolKeys(t.id),L=Yi({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:h,baseTokenAccount:I,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:w});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[U,v]=t.mintA.address===n.mintA.address?[I,B]:[B,I],Z=await this.scope.clmm.getClmmPoolKeys(t.id),$=await Se.openPositionFromBaseInstructions(F(R({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:U,tokenAccountB:v},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...$.instructions],signers:$.signers,instructionTypes:[...$.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.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:d=!1,tokenProgram:m,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var U;let b=u.feePayer||((U=this.scope.owner)==null?void 0:U.publicKey),g=u.useSOLBalance&&r.mint.equals(Mu),h=u.useSOLBalance&&i.mint.equals(Mu),w=this.createTxBuilder(),{account:k,instructionParams:T}=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:d});w.addInstruction(T||{});let{account:I,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:d});if(w.addInstruction(S||{}),k===void 0||I===void 0)throw Error("you don't has some token account");let B=Ou({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:L}=su(F(R({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:I,userLpVault:be(this.scope.ownerPubKey,B.lpMint,m).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[x],instructionTypes:[L]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=os({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Za.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,d=[u,l],m=a==t.mintA.address?"base":"quote";m==="quote"&&d.reverse();let[p,y]=d,f=t.programId===ro.toBase58(),b;if(f)b=new V(y.toString()).div(p.toString());else{let x=nu(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);m==="quote"?b=new V(1e6).div(x*1e6):b=new V(x*1e6).div(1e6)}let g=n,h=new it(0),w=new it(0);if(!g.isZero())if(f){w=Jn(g.mul(Ku),Cu);let x=g.sub(w),L=p.add(x);h=y.mul(x).div(L)}else{w=g.mul(new it(2)).div(new it(1e4));let x=g.sub(w);m==="quote"?h=new it(eu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),x.toNumber())):h=new it(tu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),x.toNumber()))}let k=new it(new V(h.toString()).mul(1-s).toFixed(0)),T=h,I=k,S=new V(h.toString()).div(new V(g.sub(w).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new V(h.toString()).div(g.sub(w).toString()));let B=b.sub(S).div(b).mul(100);return{amountOut:T,minAmountOut:I,currentPrice:b,executionPrice:S,priceImpact:B,fee:w}}async swap({poolInfo:t,amountIn:n,amountOut:r,inputMint:i,fixedSide:s,txVersion:a,computeBudgetConfig:c}){let u=this.createTxBuilder(),[l,d]=i===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],m=await this.scope.account.getCreatedTokenAccount({mint:new Re(l.address),programId:new Re(l.programId),associatedOnly:!1}),p=await this.scope.account.getCreatedTokenAccount({mint:new Re(d.address),programId:new Re(d.programId),associatedOnly:!1}),k=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new Re(l.address),tokenAccount:m,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=k,f=xe(k,["tokenAccount"]);u.addInstruction(f);let T=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new Re(d.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=T,g=xe(T,["tokenAccount"]);u.addInstruction(g);let h=await this.getAmmPoolKeys(t.id),w=4;return t.pooltype.includes("StablePool")&&(w=5),u.addInstruction({instructions:[Po({version:w,poolKeys:h,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:r,fixedSide:s})],instructionTypes:[w===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),u.addCustomComputeBudget(c),u.versionBuild({txVersion:a})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Ve(this.scope.connection,t.map(l=>({pubkey:new Re(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let d=r[l];if(d===null||!d.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let m=pr.decode(d.accountInfo.data);i[String(t[l])]=F(R({},m),{programId:d.accountInfo.owner}),s.push(m.baseVault,m.quoteVault)}let a={},c=await Ve(this.scope.connection,s.map(l=>({pubkey:new Re(l)})),n);for(let l=0;l<s.length;l++){let d=c[l].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new it(Bd.decode(d.data).amount.toString())}let u={};for(let[l,d]of Object.entries(i)){let m=a[d.baseVault.toString()].sub(d.baseNeedTakePnl),p=a[d.quoteVault.toString()].sub(d.quoteNeedTakePnl);u[l]=F(R({},d),{baseReserve:m,quoteReserve:p,poolPrice:new V(p.toString()).div(new V(10).pow(d.quoteDecimal.toString())).div(new V(m.toString()).div(new V(10).pow(d.baseDecimal.toString())))})}return u}};import{PublicKey as ae}from"@solana/web3.js";import gt from"bn.js";import{TOKEN_PROGRAM_ID as _u}from"@solana/spl-token";var kr=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)||ae.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:d}=e,m=this.createTxBuilder(),[p,y,f]=new gt(new ae(r.address).toBuffer()).gt(new gt(new ae(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 m.addInstruction(g),m.addCustomComputeBudget(u),m.versionBuild({txVersion:d,extInfo:{address:F(R({},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:R({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:[]}},Au),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:d="create",getEphemeralSigners:m,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===ee.toString(),w=n.useSOLBalance&&e.mintB.address===ee.toString(),[k,T]=s==="MintA"?[a,c]:[c,a],{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(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});I&&(b=I),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ae(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),L=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:F(R({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:m});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:d="create",txVersion:m,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===ee.toBase58(),h=n.useSOLBalance&&e.mintB.address===ee.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(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});w&&(f=w),y.addInstruction(k||{});let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ae(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});T&&(b=T),y.addInstruction(I||{}),(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),B=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:d,getEphemeralSigners:p});return y.addInstruction(B),y.versionBuild({txVersion:m,extInfo:{address:B.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:r,amountMaxB:i,liquidity:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:d}=e,m=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===ee.toString(),b=a.useSOLBalance&&t.mintB.address===ee.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),m.addInstruction(h||{});let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ae(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});w&&(y=w),m.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},liquidity:s,amountMaxA:r,amountMaxB:i});return m.addInstruction(I),m.addCustomComputeBudget(l),m.versionBuild({txVersion:d,extInfo:{address:I.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:d}=e,m=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===ee.toString(),b=a.useSOLBalance&&t.mintB.address===ee.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(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),m.addInstruction(h||{});let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ae(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});w&&(y=w),m.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return m.addInstruction(I),m.addCustomComputeBudget(l),m.versionBuild({txVersion:d,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:r,amountMinA:i,amountMinB:s,liquidity:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let m=this.createTxBuilder(),p=r.useSOLBalance&&t.mintA.address===ee.toString(),y=r.useSOLBalance&&t.mintB.address===ee.toString(),f,b,{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(t.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!p,associatedOnly:p?!1:c,checkCreateATAOwner:u});f=g,h&&m.addInstruction(h);let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ae(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});b=w,k&&m.addInstruction(k);let T=[];for(let C of t.rewardDefaultInfos){let x=r.useSOLBalance&&C.mint.address===ee.toString(),L;if(C.mint.address===t.mintA.address)L=f;else if(C.mint.address===t.mintB.address)L=b;else{let{account:U,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(C.mint.programId),mint:new ae(C.mint.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});L=U,v&&m.addInstruction(v)}T.push(L)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),S=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:T},liquidity:a,amountMinA:i,amountMinB:s});m.addInstruction({instructions:S.instructions,instructionTypes:[E.ClmmDecreasePosition]});let B=R({},S.address);if(r.closePosition){let C=await Se.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});m.addInstruction({endInstructions:C.instructions,endInstructionTypes:C.instructionTypes}),B=R(R({},B),C.address)}return m.addCustomComputeBudget(l),m.versionBuild({txVersion:d,extInfo:{address:B}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),i=await this.getClmmPoolKeys(e.id),s=Se.closePositionInstructions({poolInfo:e,poolKeys:i,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return r.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.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()===ee.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(n.mint.address),mint:new ae(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});m&&c.addInstruction(m),d||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:d},rewardInfo:{programId:new ae(n.mint.programId),mint:new ae(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,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let c=this.createTxBuilder(),u={};for(let l of n){let d=t.useSOLBalance&&l.mint.address===ee.toString(),m=l.perSecond.mul(l.endTime-l.openTime),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(l.mint.programId),mint:new ae(l.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:i});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Se.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new ae(l.mint.programId),mint:new ae(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:ne.decimalToX64(l.perSecond)}});u=R(R({},u),b.address),c.addInstruction(b)}return c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:u}})}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(ee),{account:l,instructionParams:d}=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});d&&c.addInstruction(d),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),p=Se.setRewardInstructions({poolInfo:e,poolKeys:m,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,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){let c=this.createTxBuilder(),u={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let d=t.useSOLBalance&&l.mint.address===ee.toString(),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(l.mint.programId),mint:new ae(l.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:i});p&&c.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=Se.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{mint:new ae(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:ne.decimalToX64(l.perSecond)}});c.addInstruction(f),u=R(R({},u),f.address)}return c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:u}})}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(ee),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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 d=await this.getClmmPoolKeys(e.id),m=Se.collectRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(m),a.build({address:m.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(ee),{account:d,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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});d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),m&&s.addInstruction(m);let p=await this.getClmmPoolKeys(e.id),y=Se.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardMint:c});s.addInstruction(y),a=R(R({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:r,priceLimit:i,observationId:s,ownerInfo:a,remainingAccounts:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,txVersion:d}){let m=this.createTxBuilder(),p=t.toString()===e.mintA.address,y=a.useSOLBalance&&e.mintA.address===ee.toBase58(),f=a.useSOLBalance&&e.mintB.address===ee.toBase58(),b;!i||i.equals(new V(0))?b=p?Ot.add(new gt(1)):Nt.sub(new gt(1)):b=te.priceToSqrtPriceX64(i,e.mintA.decimals,e.mintB.decimals);let g;if(!g){let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(e.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:y||!p?{payer:a.feePayer||this.scope.ownerPubKey,amount:y?n:0}:void 0,associatedOnly:y?!1:u,checkCreateATAOwner:l});g=k,T&&m.addInstruction(T)}let h;if(!h){let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ae(e.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||p?{payer:a.feePayer||this.scope.ownerPubKey,amount:p?0:n}:void 0,associatedOnly:f?!1:u,checkCreateATAOwner:l});h=k,T&&m.addInstruction(T)}(!g||!h)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let w=await this.getClmmPoolKeys(e.id);return m.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:w,observationId:s,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:h},inputMint:new ae(t),amountIn:n,amountOutMin:r,sqrtPriceLimitX64:b,remainingAccounts:c})),m.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 d of this.scope.account.tokenAccountRawInfos)r?be(this.scope.ownerPubKey,d.accountInfo.mint,s).publicKey.equals(d.pubkey)&&(u[d.accountInfo.mint.toString()]=d.pubkey):u[d.accountInfo.mint.toString()]=d.pubkey;let l=this.createTxBuilder();for(let d of Object.values(e)){if(t[d.id]===void 0||!t[d.id].find(w=>!w.liquidity.isZero()||w.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let m=d,p=n.useSOLBalance&&m.mintA.address===ee.toString(),y=n.useSOLBalance&&m.mintB.address===ee.toString(),f=u[m.mintA.address];if(!f){let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:m.mintA.programId,mint:new ae(m.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=w,k&&l.addInstruction(k)}let b=u[m.mintB.address];if(!b){let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:m.mintB.programId,mint:new ae(m.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=w,k&&l.addInstruction(k)}u[m.mintA.address]=f,u[m.mintB.address]=b;let g=[];for(let w of m.rewardDefaultInfos){let k=n.useSOLBalance&&w.mint.address===ee.toString(),T=u[w.mint.address];if(!T){let{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(w.mint.programId),mint:new ae(w.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});T=I,S&&l.addInstruction(S)}u[w.mint.address]=T,g.push(T)}let h=await this.getClmmPoolKeys(m.id);for(let w of t[d.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:m,poolKeys:h,ownerPosition:w,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(yr(e).publicKey);return t?Tu.decode(t.data).whitelistMints.filter(r=>!r.equals(ae.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 ae(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=So.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 Ve(this.scope.connection,e.map(i=>({pubkey:new ae(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(R({},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 Ve(this.scope.connection,Array.from(n).map(c=>({pubkey:new ae(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=ku.decode(c.accountInfo.data))});let s=await Ce.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var d,m,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:ft({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||_u.toBase58(),extensions:{feeConfig:(d=t[u])!=null&&d.feeConfig?Rn((m=t[u])==null?void 0:m.feeConfig):void 0}}),mintB:ft({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||_u.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Rn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(R({},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}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as Eo,TOKEN_PROGRAM_ID as rn,AccountLayout as Wd}from"@solana/spl-token";import Eu from"bn.js";var ss=new Eu(1e6);function Sd(o,e,t){return o.mul(e).add(t).sub(new Eu(1)).div(t)}function Vu(o,e,t){return o.mul(e).div(t)}var Co=class{static tradingFee(e,t){return Sd(e,t,ss)}static protocolFee(e,t){return Vu(e,t,ss)}static fundFee(e,t){return Vu(e,t,ss)}};import Tr from"bn.js";function Ro(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Kd(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=Ro(o,e);return n.gt(_n)&&(t=t.add(new Tr(1)),e=o.div(t),n=Ro(o,t),n.gt(_n)&&(e=e.add(new Tr(1)))),[t,e]}var _n=new Tr(0),Lo=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Kd(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 Ro(e.mul(n),t).gt(_n)&&s.gt(_n)&&(s=s.add(new Tr(1))),Ro(e.mul(r),t).gt(_n)&&a.gt(_n)&&(a=a.add(new Tr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var vu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(vu||{}),Oo=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=Co.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Lo.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Cd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Rd=Buffer.from("amm_config","utf8"),Ld=Buffer.from("pool","utf8"),Od=Buffer.from("pool_lp_mint","utf8"),Nd=Buffer.from("pool_vault","utf8"),Md=Buffer.from("observation","utf8");function Ir(o){return se([Cd],o)}function _d(o,e){return se([Rd,vd(e)],o)}function Vd(o,e,t,n){return se([Ld,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Ed(o,e){return se([Od,e.toBuffer()],o)}function Fu(o,e,t){return se([Nd,e.toBuffer(),t.toBuffer()],o)}function No(o,e){return se([Md,e.toBuffer()],o)}function vd(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Du({programId:o,mintA:e,mintB:t}){let n=_d(o,0).publicKey,r=Ir(o).publicKey,i=Vd(o,n,e,t).publicKey,s=Ed(o,i).publicKey,a=Fu(o,i,e).publicKey,c=Fu(o,i,t).publicKey,u=No(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as xr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as as,TOKEN_2022_PROGRAM_ID as Wu,ASSOCIATED_TOKEN_PROGRAM_ID as Fd}from"@solana/spl-token";var Dd=ue("Raydium_cpmm"),Br={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 qu(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,w){let k=_([P("amountMaxA"),P("amountMaxB"),P("openTime")]),T=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:as,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Fd,isSigner:!1,isWritable:!1},{pubkey:Xr,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],I=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:w},I),new xr({keys:T,programId:o,data:Buffer.from([...Br.initialize,...I])})}function Uu(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){let f=_([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:as,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Dd.debug("cpmm deposit data",{lpAmount:m.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:m,amountMaxA:p,amountMaxB:y},g),new xr({keys:b,programId:o,data:Buffer.from([...Br.deposit,...g])})}function Gu(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){let f=_([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:as,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ur,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:m,amountMinA:p,amountMinB:y},g),new xr({keys:b,programId:o,data:Buffer.from([...Br.withdraw,...g])})}function Mo(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y,f){let b=_([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new xr({keys:g,programId:o,data:Buffer.from([...Br.swapBaseInput,...h])})}function _o(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y,f){let b=_([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new xr({keys:g,programId:o,data:Buffer.from([...Br.swapBaseOutput,...h])})}import Fe from"bn.js";var Xu=_([fe(8),D("bump"),Ue("disableCreatePool"),Lt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),G(P(),16)]),Vo=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),G(P(),32)]);var Sr=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 Ve(this.scope.connection,e.map(d=>({pubkey:new z(d)}))),r={},i=new Set,s=[];for(let d=0;d<e.length;d++){let m=n[d];if(m.accountInfo===null)throw Error("fetch pool info error: "+String(e[d]));let p=Vo.decode(m.accountInfo.data);r[String(e[d])]=F(R({},p),{programId:m.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let d=[...i],m=await Ve(this.scope.connection,d.map(p=>({pubkey:new z(p)})));for(let p=0;p<d.length;p++){let y=m[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+d[p]);a[d[p]]=Xu.decode(y.data)}}let c={},u=await Ve(this.scope.connection,s.map(d=>({pubkey:new z(d)})));for(let d=0;d<s.length;d++){let m=u[d].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[d]);c[String(s[d])]=new Fe(Wd.decode(m.data).amount.toString())}let l={};for(let[d,m]of Object.entries(r)){let p=c[m.vaultA.toString()].sub(m.protocolFeesMintA).sub(m.fundFeesMintA),y=c[m.vaultB.toString()].sub(m.protocolFeesMintB).sub(m.fundFeesMintB);l[d]=F(R({},m),{baseReserve:p,quoteReserve:y,configInfo:a[m.configId.toString()],poolPrice:new V(y.toString()).div(new V(10).pow(m.mintDecimalB)).div(new V(p.toString()).div(new V(10).pow(m.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var c,u,l,d;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(R({},n),{[r]:F(R({},i),{id:new z(r),configInfo:i.configInfo,version:7,authority:Ir(i.programId).publicKey,mintA:ft({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?Rn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:ft({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Rn((d=t[a])==null?void 0:d.feeConfig):void 0}})})})},{})}async createPool(l){var d=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=d,u=xe(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var U,v,Z;let m=r.feePayer||((U=this.scope.owner)==null?void 0:U.publicKey),p=new Fe(new z(u.mintA.address).toBuffer()).lte(new Fe(new z(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===Eo.toBase58(),w=r.useSOLBalance&&f.address===Eo.toBase58(),[k,T]=[new z(y.address),new z(f.address)],I=this.createTxBuilder(),{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:m,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});I.addInstruction(B||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:m,amount:g}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:i,checkCreateATAOwner:s});if(I.addInstruction(x||{}),S===void 0||C===void 0)throw Error("you don't has some token account");let L=Du({programId:e,mintA:k,mintB:T});return I.addInstruction({instructions:[qu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,T,L.lpMint,S,C,be(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new z((v=y.programId)!=null?v:rn),new z((Z=f.programId)!=null?Z:rn),L.observationId,b,g,n)],instructionTypes:[E.CpmmCreatePool]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:a,extInfo:{address:F(R({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:r,slippage:i,computeResult:s,computeBudgetConfig:a,config:c,txVersion:u}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:l}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:m}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),p=s?void 0:await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:f,anotherAmount:b}=s||this.computePairAmount({poolInfo:F(R({},t),{lpAmount:new V(p.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:p.baseReserve,quoteReserve:p.quoteReserve,slippage:new Ze(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new V(n.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),g=b.amount,h=t.mintA.address===Eo.toString(),w=t.mintB.address===Eo.toString(),k=this.createTxBuilder(),[T,I]=[new z(t.mintA.address),new z(t.mintB.address)],{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(r?n:g).isZero()?{payer:this.scope.ownerPubKey,amount:r?n:g}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:m});k.addInstruction(B||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(r?g:n).isZero()?{payer:this.scope.ownerPubKey,amount:r?g:n}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:m});k.addInstruction(x||{}),!S&&!C&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let L=await l.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),W=await l.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:U}=W,v=xe(W,["tokenAccount"]);k.addInstruction(v);let Z=await this.getCpmmPoolKeys(t.id),$=new Ze(new Fe(1)).sub(i);return k.addInstruction({instructions:[Uu(new z(t.programId),this.scope.ownerPubKey,new z(Z.authority),new z(t.id),U,S,C,new z(Z.vault.A),new z(Z.vault.B),T,I,new z(t.lpMint.address),s?s==null?void 0:s.liquidity:$.mul(y).quotient,r?f.amount:g,r?g:f.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),k.addCustomComputeBudget(a),k.versionBuild({txVersion:u})}async withdrawLiquidity(e){var U,v;let{poolInfo:t,lpAmount:n,slippage:r,computeBudgetConfig:i,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new Ze(new Fe(1)).sub(r),c=await this.getRpcPoolInfo(t.id),[u,l]=[a.mul(n.mul(c.baseReserve).div(c.lpAmount)).quotient,a.mul(n.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[m,p]=[Pe(u,t.mintA.extensions.feeConfig,d,!0),Pe(l,t.mintB.extensions.feeConfig,d,!0)],{account:y}=this.scope,f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)],h=b.equals(ee),w=g.equals(ee),k,T,{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});k=I,S&&f.addInstruction(S);let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});T=B,C&&f.addInstruction(C),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let x=await y.getCreatedTokenAccount({mint:new z(t.lpMint.address)});x||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let L=await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[Gu(new z(t.programId),this.scope.ownerPubKey,new z(L.authority),new z(t.id),x,k,T,new z(L.vault.A),new z(L.vault.B),b,g,new z(t.lpMint.address),n,u.sub((U=m.fee)!=null?U:new Fe(0)),l.sub((v=p.fee)!=null?v:new Fe(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),f.addCustomComputeBudget(i),f.versionBuild({txVersion:s})}async swap(e){var I,S,B,C,x,L;let{poolInfo:t,baseIn:n,swapResult:r,slippage:i=0,config:s,computeBudgetConfig:a,txVersion:c}=e,{bypassAssociatedCheck:u,checkCreateATAOwner:l,associatedOnly:d}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},s),m=this.createTxBuilder(),[p,y]=[new z(t.mintA.address),new z(t.mintB.address)];r.destinationAmountSwapped=r.destinationAmountSwapped.mul(new Fe((1-i)*1e4)).div(new Fe(1e4));let f=t.mintA.address===ee.toBase58(),b=t.mintB.address===ee.toBase58(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:p,tokenProgram:new z((I=t.mintA.programId)!=null?I:rn),owner:this.scope.ownerPubKey,createInfo:f||!n?{payer:this.scope.ownerPubKey,amount:n?r.sourceAmountSwapped:0}:void 0,notUseTokenAccount:f,skipCloseAccount:!f,associatedOnly:f?!1:d,checkCreateATAOwner:l});h&&m.addInstruction(h);let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((S=t.mintB.programId)!=null?S:rn),owner:this.scope.ownerPubKey,createInfo:b||n?{payer:this.scope.ownerPubKey,amount:n?0:r.sourceAmountSwapped}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:l});k&&m.addInstruction(k),!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getCpmmPoolKeys(t.id);return m.addInstruction({instructions:[n?Mo(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),g,w,new z(T.vault.A),new z(T.vault.B),new z((B=t.mintA.programId)!=null?B:rn),new z((C=t.mintB.programId)!=null?C:rn),p,y,No(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped):_o(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),w,g,new z(T.vault.B),new z(T.vault.A),new z((x=t.mintB.programId)!=null?x:rn),new z((L=t.mintA.programId)!=null?L:rn),y,p,No(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped)],instructionTypes:[n?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut]}),m.addCustomComputeBudget(a),m.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Oo.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,w,k,T,I,S,B,C;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),d=u.sub((h=l.fee)!=null?h:new Fe(0)),m=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=(w=l.fee)==null?void 0:w.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=d.mul(m).div(p==="base"?t:n),f={amount:dt,fee:void 0,expirationTime:void 0};if(!d.isZero()){let x=qd(y,t,n,m);this.logDebug("lpAmountData:",{amountA:x.amountA.toString(),amountB:x.amountB.toString()}),f=Pe(x[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ze(new Fe(1)).add(i),g=Pe(b.mul(f.amount.sub((T=f.fee)!=null?T:new Fe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(I=f.fee)==null?void 0:I.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(C=(B=g.fee)==null?void 0:B.toString())!=null?C:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function qd(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 An}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Le,TOKEN_2022_PROGRAM_ID as ds,createTransferInstruction as Zu}from"@solana/spl-token";import Do from"bn.js";import{TOKEN_PROGRAM_ID as us,TOKEN_2022_PROGRAM_ID as Ud,ASSOCIATED_TOKEN_PROGRAM_ID as Gd}from"@solana/spl-token";import{PublicKey as X,TransactionInstruction as cs,SystemProgram as ls}from"@solana/web3.js";import wn from"bn.js";function gx(o,e,t,n,r,i,s,a,c,u,l,d){let m=_([D("instruction"),P("amountIn"),P("amountOut")]),p=[{pubkey:ls.programId,isSigner:!1,isWritable:!1},{pubkey:us,isSigner:!1,isWritable:!1},{pubkey:new X(t.programId),isSigner:!1,isWritable:!1},{pubkey:new X(t.id),isSigner:!1,isWritable:!0},{pubkey:new X(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},...d.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 X("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(m.span);return m.encode({instruction:4,amountIn:u,amountOut:l},y),new cs({keys:p,programId:o,data:y})}function wx(o,e,t,n,r,i,s,a,c,u){let l=_([D("instruction")]),d=[{pubkey:ls.programId,isSigner:!1,isWritable:!1},{pubkey:us,isSigner:!1,isWritable:!1},{pubkey:new X(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new X(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new X(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);d.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);d.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new X("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);d.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 m=Buffer.alloc(l.span);return l.encode({instruction:5},m),new cs({keys:d,programId:o,data:m})}function Xd(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){var I;let f=[],b=[A({pubkey:us,isWritable:!1}),A({pubkey:Ud,isWritable:!1}),A({pubkey:Gd,isWritable:!1}),A({pubkey:ls.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:r}));let g=[c,u],h=[l,d],w=[i,s,a];for(let S=0;S<g.length;S++){let B=g[S],C=w[S]===B.mintA.address;if(b.push(A({pubkey:new X(B.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:r})):b.push(A({pubkey:n})),b.push(A({pubkey:new X(w[S])})),b.push(A({pubkey:new X(w[S+1])})),B.version===6){let x=h[S];b.push(A({pubkey:new X(x.config.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(C?x.vault.A:x.vault.B)})),b.push(A({pubkey:new X(C?x.vault.B:x.vault.A)})),b.push(A({pubkey:new X(B.observationId)})),b.push(A({pubkey:Ur})),b.push(A({pubkey:ut(new X(B.programId),new X(B.id)).publicKey})),f.push(zd(B.sqrtPriceX64.toString(),C));for(let L of(I=y[S])!=null?I:[])b.push(A({pubkey:new X(L)}))}else if(B.version===5){let x=h[S];b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.authority),isWritable:!1})),b.push(A({pubkey:new X(x.marketProgramId)})),b.push(A({pubkey:new X(x.marketAuthority)})),b.push(A({pubkey:ma,isWritable:!1})),b.push(A({pubkey:new X(x.openOrders)})),b.push(A({pubkey:new X(x.vault.A)})),b.push(A({pubkey:new X(x.vault.B)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.marketId)})),b.push(A({pubkey:new X(x.marketBids)})),b.push(A({pubkey:new X(x.marketAsks)})),b.push(A({pubkey:new X(x.marketEventQueue)})),b.push(A({pubkey:new X(x.marketBaseVault)})),b.push(A({pubkey:new X(x.marketQuoteVault)}))}else if(B.version===4){let x=h[S],L=B.status!==1;b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(x.authority),isWritable:!1})),b.push(A({pubkey:new X(L?x.id:x.marketProgramId)})),b.push(A({pubkey:new X(L?x.id:x.marketAuthority)})),b.push(A({pubkey:new X(L?x.id:x.openOrders)})),b.push(A({pubkey:new X(x.vault.A)})),b.push(A({pubkey:new X(x.vault.B)})),b.push(A({pubkey:new X(L?x.id:x.marketId)})),b.push(A({pubkey:new X(L?x.id:x.marketBids)})),b.push(A({pubkey:new X(L?x.id:x.marketAsks)})),b.push(A({pubkey:new X(L?x.id:x.marketEventQueue)})),b.push(A({pubkey:new X(L?x.id:x.marketBaseVault)})),b.push(A({pubkey:new X(L?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=h[S];b.push(A({pubkey:new X(x.authority)})),b.push(A({pubkey:new X(x.config.id)})),b.push(A({pubkey:new X(x.id)})),b.push(A({pubkey:new X(C?x.vault.A:x.vault.B)})),b.push(A({pubkey:new X(C?x.vault.B:x.vault.A)})),b.push(A({pubkey:new X(B.observationId)}))}else throw Error("pool type error")}let k=_([D("insId"),P("amountIn"),P("amountOut"),G(Y(),f.length,"clmmPriceLimit")]),T=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:m,amountOut:p,clmmPriceLimit:f},T),new cs({keys:b,programId:o,data:T})}function zd(o,e){if(o)if(e){let t=new wn(o).div(new wn(25));return t.gt(Io)?t:Io}else{let t=new wn(o).mul(new wn(25));return t.lt(xo)?t:xo}else return e?Io:xo}function zu({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 d=n.poolKey[0],m=ke(d),p=t.equals(m.mintA.address)?Ot.add(ct):Nt.sub(ct);return Se.makeSwapBaseInInstructions({poolInfo:d,poolKeys:d,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:m.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:m.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 wn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let d=n.poolInfo[0],m=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[m?Mo(d.programId,e.wallet,d.authority,d.configId,d.id,e.sourceToken,e.destinationToken,d.vaultA,d.vaultB,d.mintProgramA,d.mintProgramA,new X(d.mintA.address),new X(d.mintB.address),d.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):_o(d.programId,e.wallet,d.authority,d.configId,d.id,e.destinationToken,e.sourceToken,d.vaultB,d.vaultA,d.mintProgramB,d.mintProgramA,new X(d.mintB.address),new X(d.mintA.address),d.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[m?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let d=n.poolKey[0];return{signers:[],instructions:[Po({poolKeys:d,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 wn(0)),fixedSide:"in"})],lookupTableAddress:d.lookupTableAccount?[d.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let d=n.poolInfo[0],m=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:[Xd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),d,m,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new wn(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Yu={[li.toBase58()]:3},Qu={3:li};var ms=_([fe(5),fe(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),fe(7)]),ju={3:ms};import{PublicKey as Hu}from"@solana/web3.js";var vo=ue("Serum"),Fo=class{static getProgramId(e){let t=Qu[e];return t||vo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Yu[t];return n||vo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=ju[e];return t||vo.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=Hu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return vo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Hu.default,nonce:r}}};var Gt=new Do(0),Kr=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(ee));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=H(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ft({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ft({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),er({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:[er({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ft({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(ee),d=c.amount.token.mint,m=u.amount.token.mint,{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?ds:Le,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(y&&a.addInstruction(y),p===void 0)throw Error("input account check error");let f=this.scope.account.getAssociatedTokenAccount(m,u.amount.token.isToken2022?ds:Le),b;if(e.routeType==="route"){let w=e.middleToken;b=this.scope.account.getAssociatedTokenAccount(w.mint,w.isToken2022?ds:Le)}let g=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),h=zu({routeProgram:i,inputMint:d,swapInfo:F(R({},e),{poolInfo:[...e.poolInfoList],poolKey:g,outputMint:m}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:p,routeToken:b,destinationToken:f}});if(e.feeConfig!==void 0){let w=this.createTxBuilder();w.addInstruction({instructions:[Zu(p,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),w.addInstruction(h);let{transactions:k}=s===0?await w.sizeCheckBuildV0():await w.sizeCheckBuild();k.length<2&&a.addInstruction({instructions:[Zu(p,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(h),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:h.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:h.address})}async fetchRoutePoolBasicInfo(){let e=await this.scope.connection.getProgramAccounts(ro,{dataSlice:{offset:pr.offsetOf("baseMint"),length:64}}),t=_([K("baseMint"),K("quoteMint")]),n=e.map(u=>({id:u.pubkey,version:4,mintA:t.decode(u.account.data).baseMint,mintB:t.decode(u.account.data).quoteMint})),r=_([K("mintA"),K("mintB")]),s=(await this.scope.connection.getProgramAccounts(da,{filters:[{dataSize:yn.span}],dataSlice:{offset:yn.offsetOf("mintA"),length:64}})).map(u=>{let l=r.decode(u.account.data);return{id:u.pubkey,version:6,mintA:l.mintA,mintB:l.mintB}}),c=(await this.scope.connection.getProgramAccounts(pa,{dataSlice:{offset:Vo.offsetOf("mintA"),length:64}})).map(u=>{let l=r.decode(u.account.data);return{id:u.pubkey,version:7,mintA:l.mintA,mintB:l.mintB}});return{clmmPools:s,ammPools:n,cpmmPools:c}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:i}){e=e.toString()===An.default.toString()?ee:e,t=t.toString()===An.default.toString()?ee:t;let s={},a={},c={},u=[],l={};for(let m of n!=null?n:[]){if((m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),a[m.id.toString()]=m),m.mintA.equals(e)){let p=m.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[p].in.push(m)}if(m.mintB.equals(e)){let p=m.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[p].in.push(m)}if(m.mintA.equals(t)){let p=m.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[p].out.push(m)}if(m.mintB.equals(t)){let p=m.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[p].out.push(m)}}let d=[];for(let m of r)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),s[m.id.toBase58()]=m,d.push(m)),m.mintA.equals(e)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].out.push(m));for(let m of i)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),c[m.id.toBase58()]=m),m.mintA.equals(e)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Le,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].out.push(m));for(let m of Object.keys(l)){if(l[m].in.length===1&&l[m].out.length===1&&l[m].in[0].id.equals(l[m].out[0].id)){delete l[m];continue}if(l[m].in.length===0||l[m].out.length===0){delete l[m];continue}let p=l[m];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:d,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=Nu(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new An(f.mintA.address),programId:Le,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 An(f.mintB.address),programId:Le,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(Le)?(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(Le)?(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 oa({connection:this.scope.connection,mints:Array.from(r).map(f=>new An(f))});a=R(R({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let d=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:m,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:d,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(R({},f),{[b]:F(R({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||m[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||m[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:d,computeClmmPoolInfo:m,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,w,k,T,I,S,B,C;let d=l===void 0?new Do(0):e.raw.mul(new Do(l.feeBps.toNumber())).div(new Do(1e4)),m=e.raw.sub(d),p=new ye(e.token,m),y=l===void 0?void 0:{feeAmount:d,feeAccount:l.feeAccount},f=F(R({},t),{address:st(t.address).toString()}),b=[];for(let x of n)try{b.push(F(R({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",x.version,x.id.toString(),L.message)}this.logDebug("direct done");for(let[x,L]of Object.entries(r)){let U={chainId:101,address:x,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},v=L.in.map($=>{try{return{pool:$,data:this.computeAmountOut({itemPool:$,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:U,amountIn:p})}}catch(W){this.logDebug("route in error",$.version,$.id.toString(),W.message);return}}).sort(($,W)=>{var on,Xt,sn,_t;let mt=$===void 0?Gt:$.data.amountOut.amount.raw.sub((Xt=(on=$.data.amountOut.fee)==null?void 0:on.raw)!=null?Xt:Gt),hn=W===void 0?Gt:W.data.amountOut.amount.raw.sub((_t=(sn=W.data.amountOut.fee)==null?void 0:sn.raw)!=null?_t:Gt);return mt.lt(hn)?1:-1})[0];if(v===void 0)continue;let Z=new ye(Ao(U),v.data.amountOut.amount.raw.sub((h=(g=v.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Gt));for(let $ of L.out)try{let W=this.computeAmountOut({itemPool:$,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:Z});b.push(F(R({},W),{allTrade:!!(v.data.allTrade&&W.allTrade),amountIn:v.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new V(new nt({baseToken:v.data.amountIn.amount.token,denominator:v.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(w=W.amountOut.fee)==null?void 0:w.raw)!=null?k:Gt)}).toFixed()),priceImpact:new V(v.data.priceImpact.add(W.priceImpact).toFixed()),fee:[v.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[v.pool,$],remainingAccounts:[v.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(T=W.amountOut.fee)!=null&&T.raw?new ye(v.data.amountOut.amount.token,((S=(I=v.data.amountOut.fee)==null?void 0:I.raw)!=null?S:Gt).add((C=(B=W.amountOut.fee)==null?void 0:B.raw)!=null?C:Gt)):void 0,middleToken:v.data.amountOut.amount.token,poolReady:v.data.poolReady&&W.poolReady,poolType:[v.data.poolType,W.poolType],feeConfig:y,expirationTime:Rt(v.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",$.version,$.id.toString(),W.message)}}return b.filter(x=>x.allTrade).sort((x,L)=>x.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Gt)?-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:d,minAmountOut:m,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:w}=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:d,minAmountOut:m,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:[w],expirationTime:Rt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:d,minAmountOut:m,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:dr(F(R({},a),{amount:d})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:dr(F(R({},a),{amount:m})),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:d,executionPrice:m,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:dr(F(R({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:dr(F(R({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:d,executionPrice:m,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 Ve(this.scope.connection,Array.from(s).map(l=>({pubkey:new An(l)})))).forEach(l=>{if(!l.accountInfo)return;let d=ms.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Fo.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:d.baseVault.toString(),marketQuoteVault:d.quoteVault.toString(),marketBids:d.bids.toString(),marketAsks:d.asks.toString(),marketEventQueue:d.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],d={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(R({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(d)}else if(u.version===4){let l=n[u.id.toString()],d=R({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:is({programId:new An(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(d)}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:Ir(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:ft({address:u.mintLp.toBase58(),programId:Le.toBase58(),decimals:u.lpDecimals}),config:F(R({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as Yd}from"@solana/spl-token";import{PublicKey as Qd,Transaction as ps,TransactionInstruction as jd}from"@solana/web3.js";import $u from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return se([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return se([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new $u(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(d=>He.getPdaOwnerId(t,d,r,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let d=Math.floor(l/n.length),m=l%n.length,p=s[m],y=a[l],f=c[m],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),w=g.openTime.toNumber(),k=g.endTime.toNumber(),T=h.tokenInfo.map(B=>B.debtAmount.gt(new $u(0))).filter(B=>!B).length!==3,I=i>w&&i<k&&g.status===1,S=T&&I;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[d],openTime:w,endTime:k,canClaim:S,canClaimErrorType:T?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:h.tokenInfo[C].debtAmount.add(h.tokenInfo[C].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 d of u.tokenInfo){let{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!d.mintAddress.equals(Ie.WSOL.mint),associatedOnly:d.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),m&&(i[d.mintAddress.toString()]=m,l.push(m))}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 Jr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ps().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ps().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ps().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:Yd,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})}},wt=He;wt.CLAIMED_NUM=3,wt.POOL_LAYOUT=_([fe(8),D("bump"),D("status"),P("openTime"),P("endTime"),K("ammId"),G(_([D("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),G(P(),10,"padding")]),wt.OWNER_LAYOUT=_([fe(8),D("bump"),D("version"),K("poolId"),K("owner"),P("lpAmount"),G(_([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),G(P(),4,"padding")]),wt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qd(e)),wt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},wt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Cr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";import Rr from"bn.js";import{TransactionInstruction as Zd,SYSVAR_RENT_PUBKEY as $d}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ju}from"@solana/spl-token";import{createInitializeAccountInstruction as ec}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as tc}from"@solana/web3.js";function Hd(o="accountFlags"){let e=new co(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 fs=_([fe(5),Hd("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),fe(7)]);function Jd({programId:o,marketInfo:e}){let t=_([D("version"),ze("instruction"),P("baseLotSize"),P("quoteLotSize"),Lt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:$d,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 Zd({keys:n,programId:o,data:r})}async function nc({connection:o,wallet:e,marketInfo:t}){let n=new tc,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:Ju}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Ju}),ec(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ec(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new tc;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(fs.span),space:fs.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}),Jd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:i,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var Vn=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=Ye({fromPublicKey:c,programId:i}),l=Ye({fromPublicKey:c,programId:i}),d=Ye({fromPublicKey:c,programId:i}),m=Ye({fromPublicKey:c,programId:i}),p=Ye({fromPublicKey:c,programId:i}),y=Ye({fromPublicKey:c,programId:rc}),f=Ye({fromPublicKey:c,programId:rc}),b=0,g=new Rr(100);function h(){let C=new Rr(0);for(;;)try{return{vaultOwner:Cr.createProgramAddressSync([u.publicKey.toBuffer(),C.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:C}}catch{if(C.iaddn(1),C.gt(new Rr(25555)))throw Error("find vault owner error")}}let{vaultOwner:w,vaultSignerNonce:k}=h(),T=new Rr(Math.round(10**e.decimals*n)),I=new Rr(Math.round(n*10**t.decimals*r));if(T.eq(dt))throw Error("lot size is too small");if(I.eq(dt))throw Error("tick size or lot size is too small");let S=await nc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:u,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:w,requestQueue:l,eventQueue:d,bids:m,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:T,quoteLotSize:I}}),B=this.createTxBuilder();B.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let C of S.slice(1,S.length))B.addInstruction({instructions:C.transaction.instructions,signers:C.signer,instructionTypes:C.instructionTypes});return s===0?B.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:d.publicKey,bids:m.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Cr(e.mint),quoteMin:new Cr(t.mint)}}):B.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:d.publicKey,bids:m.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Cr(e.mint),quoteMin:new Cr(t.mint)}})}};import{PublicKey as Or}from"@solana/web3.js";import{TransactionInstruction as bs,SYSVAR_CLOCK_PUBKEY as ep}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as gs}from"@solana/spl-token";var ys=_([D("instruction"),Aa("amount")]),Lr=_([D("instruction")]);function tS({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:Xr,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:ei,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(ys.span);return ys.encode({instruction:1,amount:Number(e)},r),new bs({keys:n,programId:o,data:r})}function Wo({programId:o},e){let t=[{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:ei,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Lr.span);return Lr.encode({instruction:2},n),new bs({keys:t,programId:o,data:n})}function ws(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(Lr.span);Lr.encode({instruction:2},s);let a=[{pubkey:gs,isWritable:!1,isSigner:!1},{pubkey:ep,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 bs({programId:e.programId,keys:a,data:s})}import oc from"bn.js";var tp={[Zn.IDO_PROGRAM_ID_V1.toString()]:1,[Zn.IDO_PROGRAM_ID_V2.toString()]:2,[Zn.IDO_PROGRAM_ID_V3.toString()]:3,[Zn.IDO_PROGRAM_ID_V4.toString()]:4},En=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=tp[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new oc(e.coin).isZero(),!new oc(e.pc).isZero()],d=c.projectInfo.mint.address.equals(ee),{account:m,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:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:r});!m&&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(ee),{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(!m&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!m||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Wo({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:m,userIdoInfo:new Or(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Wo({programId:new Or(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Or(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Wo({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:m,userIdoInfo:new Or(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:m,quoteTokenAccount:f,ledgerAccount:new Or(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ws(F(R({},g),{side:"base"}))]:[],...l?[ws(F(R({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as np}from"@solana/web3.js";import{MintLayout as rp,TOKEN_2022_PROGRAM_ID as As,TOKEN_PROGRAM_ID as Ps}from"@solana/spl-token";var Nr=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(R({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?As.toBase58():Ps.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?As.toBase58():Ps.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(R({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?As.toBase58():Ps.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(R({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new np(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=rp.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 qo=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 mr({scope:this,moduleName:"Raydium_Farm"}),this.account=new tr({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new hr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Nr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Kr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new kr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Sr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new wt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Vn({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=op({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new so({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new qo(F(R({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(ao);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(ba);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(ao),new Error(ao)}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(R({},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{sd as AMM_CONFIG_SEED,yu as BIT_PRECISION,kr as Clmm,ku as ClmmConfigLayout,Se as ClmmInstrument,Lo as ConstantProductCurve,Xu as CpmmConfigInfoLayout,Co as CpmmFee,Vo as CpmmPoolInfoLayout,Oo as CurveCalculator,Xm as DataElement,$i as EXTENSION_TICKARRAY_BITMAP_SIZE,Fa as FARM_LOCK_MINT,Da as FARM_LOCK_VAULT,pt as FARM_PROGRAM_TO_VERSION,qa as FARM_VERSION_TO_LEDGER_LAYOUT,Wa as FARM_VERSION_TO_STATE_LAYOUT,Bo as FEE_RATE_DENOMINATOR,ss as FEE_RATE_DENOMINATOR_VALUE,fd as FETCH_TICKARRAY_COUNT,pd as Fee,Cu as LIQUIDITY_FEES_DENOMINATOR,Ku as LIQUIDITY_FEES_NUMERATOR,hd as LIQUIDITY_VERSION_TO_SERUM_VERSION,SP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,bu as LOG_B_2_X32,gu as LOG_B_P_ERR_MARGIN_LOWER_X64,wu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,fs as MARKET_STATE_LAYOUT_V2,ms as MARKET_STATE_LAYOUT_V3,ju as MARKET_VERSION_TO_STATE_LAYOUT,Nt as MAX_SQRT_PRICE_X64,xo as MAX_SQRT_PRICE_X64_SUB_ONE,Je as MAX_TICK,Ot as MIN_SQRT_PRICE_X64,Io as MIN_SQRT_PRICE_X64_ADD_ONE,je as MIN_TICK,On as MODEL_DATA_PUBKEY,Fo as Market,ne as MathUtil,Zi as MaxU64,fu as MaxUint128,qt as NEGATIVE_ONE,ct as ONE,md as OPERATION_SEED,es as ObservationInfoLayout,gd as ObservationLayout,Tu as OperationLayout,cd as POOL_REWARD_VAULT_SEED,ad as POOL_SEED,dd as POOL_TICK_ARRAY_BITMAP_SEED,ud as POOL_VAULT_SEED,mu as POSITION_SEED,yn as PoolInfoLayout,Ce as PoolUtils,So as PositionInfoLayout,Ad as PositionRewardInfoLayout,Ar as PositionUtils,mk as ProtocolPositionLayout,To as Q128,lt as Q64,qo as Raydium,wd as RewardInfo,vu as RoundDirection,Yu as SERUM_PROGRAMID_TO_VERSION,Qu as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,tP as SPL_MINT_LAYOUT,te as SqrtPriceMath,Ln as StableLayout,fn as SwapMath,pn as TICK_ARRAY_BITMAP_SIZE,ld as TICK_ARRAY_SEED,_e as TICK_ARRAY_SIZE,eh as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,hu as TickArrayBitmapExtensionLayout,wr as TickArrayBitmapExtensionUtils,gr as TickArrayLayout,Pd as TickLayout,bn as TickMath,le as TickQuery,Q as TickUtils,br as U64Resolution,nh as U64_IGNORE_RANGE,Ea as Voter,Bm as VoterDepositEntry,xm as VoterLockup,Va as VoterRegistrar,Im as VoterVotingMintConfig,de as ZERO,Gi as addLiquidityLayout,Ii as associatedLedgerAccountLayout,Ei as calFarmRewardAmount,Sd as ceilDiv,Lr as claimLayout,Ft as closeAccountInstruction,wo as createAssociatedLedgerAccountInstruction,Za as createPoolFeeLayout,su as createPoolV4InstructionV2,BP as createPoolV4Layout,Dt as createWSolAccountInstructions,$e as dwLayout,Ki as farmAddRewardLayout,Dw as farmLedgerLayoutV3_1,rr as farmLedgerLayoutV3_2,Ww as farmLedgerLayoutV5_1,Ma as farmLedgerLayoutV5_2,_a as farmLedgerLayoutV6_1,Ga as farmRewardInfoToConfig,Bi as farmRewardLayout,Si as farmRewardRestartLayout,Tm as farmRewardTimeInfoLayout,Oa as farmStateV3Layout,Na as farmStateV5Layout,nr as farmStateV6Layout,dA as fetchMultipleFarmInfoAndUpdate,Uk as fetchMultipleInfo,Wi as fixedSwapInLayout,qi as fixedSwapOutLayout,Vu as floorDiv,td as formatLayout,Ye as generatePubKey,Ua as getAssociatedAuthority,os as getAssociatedConfigId,Qe as getAssociatedLedgerAccount,ir as getAssociatedLedgerPoolAccount,xd as getAssociatedOpenOrders,Ou as getAssociatedPoolKeys,_d as getCpmmPdaAmmConfigId,Vd as getCpmmPdaPoolId,Du as getCreatePoolKeys,vi as getDepositEntryIndex,tu as getDxByDyBaseIn,eu as getDyByDxBaseIn,Cn as getFarmLedgerLayout,Sm as getFarmStateLayout,is as getLiquidityAssociatedAuthority,gn as getLiquidityAssociatedId,Wh as getLiquidityFromAmounts,ZP as getPdaAmmConfigId,ut as getPdaExBitmapAccount,Ed as getPdaLpMint,ko as getPdaMetadataKey,No as getPdaObservationId,yr as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Ir as getPdaPoolAuthority,du as getPdaPoolId,pu as getPdaPoolRewardVaulId,Hi as getPdaPoolVaultId,dn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Fu as getPdaVault,Li as getRegistrarAddress,nu as getStablePrice,Vi as getTokenOwnerRecordAddress,Mi as getVoterAddress,_i as getVoterWeightRecordAddress,Ni as getVotingMintAuthority,Oi as getVotingTokenMint,Vm as governanceCreateTokenOwnerRecord,zP as i16ToBytes,ho as i32ToBytes,Ui as initPoolLayout,ki as initTokenAccountInstruction,Jd as initializeMarket,Ci as isValidFarmVersion,fr as isZero,pA as judgeFarmType,Qi as leadingZeros,lu as leastSignificantBit,pr as liquidityStateV4Layout,Um as liquidityStateV5Layout,Po as makeAMMSwapInstruction,iu as makeAddLiquidityInstruction,Di as makeAddNewRewardInstruction,Wo as makeClaimInstruction,ws as makeClaimInstructionV4,qu as makeCreateCpmmPoolInInstruction,Xa as makeCreateFarmInstruction,nc as makeCreateMarketInstruction,za as makeCreatorWithdrawFarmRewardInstruction,Uu as makeDepositCpmmInInstruction,Ya as makeDepositInstructionV3,Qa as makeDepositInstructionV5,ja as makeDepositInstructionV6,RA as makeDepositTokenInstruction,OA as makeDepositWithdrawInstruction,GP as makeInitPoolInstructionV4,tS as makePurchaseInstruction,Fi as makeRestartRewardInstruction,au as makeSimulatePoolInfoInstruction,Mo as makeSwapCpmmBaseInInInstruction,_o as makeSwapCpmmBaseOutInInstruction,od as makeSwapFixedInInstruction,id as makeSwapFixedOutInstruction,zu as makeSwapInstruction,er as makeTransferInstruction,Gu as makeWithdrawCpmmInInstruction,lr as makeWithdrawInstructionV3,cr as makeWithdrawInstructionV5,ur as makeWithdrawInstructionV6,LA as makeWithdrawTokenInstruction,th as mockCreatePoolInfo,Au as mockV3CreatePoolInfo,zm as modelDataInfoLayout,cu as mostSignificantBit,La as parseTokenAccountResp,mP as parseTokenInfo,tn as poolTypeV6,ys as purchaseLayout,Pm as realFarmStateV3Layout,hm as realFarmStateV5Layout,km as realFarmV6Layout,Yi as removeLiquidityInstruction,Xi as removeLiquidityLayout,gx as route1Instruction,wx as route2Instruction,Xd as routeInstruction,UP as simulatePoolInfoInstruction,pP as solToWSolToken,Zt as splAccountLayout,Nu as toAmmComputePoolInfo,ft as toApiV3Token,Rn as toFeeConfig,Ao as toToken,dr as toTokenAmount,dP as toTokenInfo,ji as trailingZeros,uu as u16ToBytes,YP as u32ToBytes,rK as unionArr,Km as updateFarmPoolInfo,Ri as validateFarmRewards,vm as voterStakeRegistryCreateDepositEntry,Em as voterStakeRegistryCreateVoter,Nm as voterStakeRegistryDeposit,Mm as voterStakeRegistryUpdateVoterWeightRecord,_m as voterStakeRegistryWithdraw,fP as wSolToSolToken,xi as withdrawRewardLayout};
1
+ var ac=Object.defineProperty,uc=Object.defineProperties;var cc=Object.getOwnPropertyDescriptors;var Mr=Object.getOwnPropertySymbols;var Is=Object.prototype.hasOwnProperty,xs=Object.prototype.propertyIsEnumerable;var Ts=(o,e,t)=>e in o?ac(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,R=(o,e)=>{for(var t in e||(e={}))Is.call(e,t)&&Ts(o,t,e[t]);if(Mr)for(var t of Mr(e))xs.call(e,t)&&Ts(o,t,e[t]);return o},F=(o,e)=>uc(o,cc(e));var xe=(o,e)=>{var t={};for(var n in o)Is.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Mr)for(var n of Mr(o))e.indexOf(n)<0&&xs.call(o,n)&&(t[n]=o[n]);return t};import{merge as op}from"lodash";import ya from"axios";import{get as Bs,set as lc}from"lodash";import Ks from"dayjs";import mc from"dayjs/plugin/utc";Ks.extend(mc);var Go=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 Ks().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}},Ss={},dc={};function ue(o){let e=Bs(Ss,o);if(!e){let t=Bs(dc,o);e=new Go({name:o,logLevel:t}),lc(Ss,o,e)}return e}import{PublicKey as hl}from"@solana/web3.js";import kl from"bn.js";import wl from"big.js";import Hr from"bn.js";import rt from"bn.js";var Tn=9e15,Ht=1e9,Xo="0123456789abcdef",Vr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Er="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",zo={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Tn,maxE:Tn,crypto:!1},Os,Et,re=!0,Fr="[DecimalError] ",jt=Fr+"Invalid argument: ",Ns=Fr+"Precision limit exceeded",Ms=Fr+"crypto unavailable",_s="[object Decimal]",Xe=Math.floor,Oe=Math.pow,pc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,fc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,yc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Vs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,ee=7,bc=9007199254740991,gc=Vr.length-1,Yo=Er.length-1,M={toStringTag:_s};M.absoluteValue=M.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),j(o)};M.ceil=function(){return j(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(jt+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=wc(n,Ws(n,t)),n.precision=o,n.rounding=e,j(Et==2||Et==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,d=l.constructor;if(!l.isFinite()||l.isZero())return new d(l);for(re=!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 d(t),n.s=l.s):n=new d(i.toString()),s=(o=d.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Ae(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&&(j(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")&&(j(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,j(n,o,d.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 Ae(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return j(Ae(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 j(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/Wr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=In(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 j(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=In(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Wr(5,o)),r=In(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,j(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,Ae(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()?At(t,r,i):new t(0):new t(NaN):e.isZero()?At(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=At(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,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!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,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!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?j(new i(r),o,e,!0):(i.precision=t=n-r.e,r=Ae(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=At(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,d=l.precision,m=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&d+4<=Yo)return s=At(l,d+4,m).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(d+4<=Yo)return s=At(l,d+4,m).times(.5),s.s=u.s,s}for(l.precision=a=d+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(re=!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)),re=!0,j(s,l.precision=d,l.rounding=m,!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,d=l.precision,m=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(re=!1,a=d+p,s=Qt(u,a),n=e?vr(l,a+10):Qt(o,a),c=Ae(s,n,a,1),vn(c.d,r=d,m))do if(a+=10,s=Qt(u,a),n=e?vr(l,a+10):Qt(o,a),c=Ae(s,n,a,1),!i){+De(c.d).slice(r+1,r+15)+1==1e14&&(c=j(c,d+1,0));break}while(vn(c.d,r+=10,m));return re=!0,j(c,d,m)};M.minus=M.sub=function(o){var e,t,n,r,i,s,a,c,u,l,d,m,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,m=o.d,a=y.precision,c=y.rounding,!u[0]||!m[0]){if(m[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return re?j(o,a,c):o}if(t=Xe(o.e/ee),l=Xe(p.e/ee),u=u.slice(),i=l-t,i){for(d=i<0,d?(e=u,i=-i,s=m.length):(e=m,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=m.length,d=n<s,d&&(s=n),n=0;n<s;n++)if(u[n]!=m[n]){d=u[n]<m[n];break}i=0}for(d&&(e=u,u=m,m=e,o.s=-o.s),s=u.length,n=m.length-s;n>0;--n)u[s++]=0;for(n=m.length;n>i;){if(u[--n]<m[n]){for(r=n;r&&u[--r]===0;)u[r]=Pt-1;--u[r],u[n]+=Pt}u[n]-=m[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=Dr(u,t),re?j(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]?j(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=Ae(t,o.abs(),0,3,1),e.s*=o.s):e=Ae(t,o,0,n.modulo,1),e=e.times(o),re=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Qo(this)};M.naturalLogarithm=M.ln=function(){return Qt(this)};M.negated=M.neg=function(){var o=new this.constructor(this);return o.s=-o.s,j(o)};M.plus=M.add=function(o){var e,t,n,r,i,s,a,c,u,l,d=this,m=d.constructor;if(o=new m(o),!d.d||!o.d)return!d.s||!o.s?o=new m(NaN):d.d||(o=new m(o.d||d.s===o.s?d:NaN)),o;if(d.s!=o.s)return o.s=-o.s,d.minus(o);if(u=d.d,l=o.d,a=m.precision,c=m.rounding,!u[0]||!l[0])return l[0]||(o=new m(d)),re?j(o,a,c):o;if(i=Xe(d.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=Dr(u,n),re?j(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(jt+o);return t.d?(e=Es(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var o=this,e=o.constructor;return j(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=Pc(n,Ws(n,t)),n.precision=o,n.rounding=e,j(Et>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(re=!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(Ae(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&&(j(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")&&(j(n,c+1,1),o=!n.times(n).eq(s));break}return re=!0,j(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=Ae(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,j(Et==2||Et==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,d=l.constructor,m=l.d,p=(o=new d(o)).d;if(o.s*=l.s,!m||!m[0]||!p||!p[0])return new d(!o.s||m&&!m[0]&&!p||p&&!p[0]&&!m?NaN:!m||!p?o.s/0:o.s*0);for(t=Xe(l.e/ee)+Xe(o.e/ee),c=m.length,u=p.length,c<u&&(i=m,m=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]*m[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=Dr(i,t),re?j(o,d.precision,d.rounding):o};M.toBinary=function(o,e){return Ho(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:(et(o,0,Ht),e===void 0?e=n.rounding:et(e,0,8),j(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):(et(o,0,Ht),e===void 0?e=r.rounding:et(e,0,8),n=j(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):(et(o,0,Ht),e===void 0?e=i.rounding:et(e,0,8),n=j(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,d,m,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=Es(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(jt+a);o=a.gt(e)?i>0?e:u:a}for(re=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*ee*2;d=Ae(a,e,0,1,1),r=t.plus(d.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(d.times(r)),c=r,r=e,e=a.minus(d.times(r)),a=r;return r=Ae(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,m=Ae(u,n,i,1).minus(p).abs().cmp(Ae(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,re=!0,m};M.toHexadecimal=M.toHex=function(o,e){return Ho(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:et(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]?(re=!1,t=Ae(t,o,0,e,1).times(o),re=!0,j(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Ho(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 j(a,n,i);if(e=Xe(o.e/ee),e>=o.d.length-1&&(t=u<0?-u:u)<=bc)return r=vs(c,a,t,n),o.s<0?new c(1).div(r):j(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):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Qo(o.times(Qt(a,n+t)),n),r.d&&(r=j(r,n+5,1),vn(r.d,n,i)&&(e=n+10,r=j(Qo(o.times(Qt(a,e+t)),e),e+5,1),+De(r.d).slice(n+1,n+15)+1==1e14&&(r=j(r,n+1,0)))),r.s=s,re=!0,c.rounding=i,j(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):(et(o,1,Ht),e===void 0?e=r.rounding:et(e,0,8),n=j(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):(et(o,1,Ht),e===void 0?e=n.rounding:et(e,0,8)),j(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 j(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+=Yt(t)),i+=n;s=o[e],n=s+"",t=ee-n.length,t&&(i+=Yt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function et(o,e,t){if(o!==~~o||o<e||o>t)throw Error(jt+o)}function vn(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 _r(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]+=Xo.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 wc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Wr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=In(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 Ae=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,d,m,p,y,f,b,g,h,A,k,T,I,S,B,C,x,L,U,v=n.constructor,Z=n.s==r.s?1:-1,$=n.d,W=r.d;if(!$||!$[0]||!W||!W[0])return new v(!n.s||!r.s||($?W&&$[0]==W[0]:!W)?NaN:$&&$[0]==0||!W?Z*0:Z/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,C=$.length,g=new v(Z),h=g.d=[],d=0;W[d]==($[d]||0);d++);if(W[d]>($[d]||0)&&l--,i==null?(I=i=v.precision,s=v.rounding):a?I=i+(n.e-r.e)+1:I=i,I<0)h.push(1),y=!0;else{if(I=I/p+2|0,d=0,L==1){for(m=0,W=W[0],I++;(d<C||m)&&I--;d++)S=m*c+($[d]||0),h[d]=S/W|0,m=S%W|0;y=m||d<C}else{for(m=c/(W[0]+1)|0,m>1&&(W=o(W,m,c),$=o($,m,c),L=W.length,C=$.length),B=L,A=$.slice(0,L),k=A.length;k<L;)A[k++]=0;U=W.slice(),U.unshift(0),x=W[0],W[1]>=c/2&&++x;do m=0,u=e(W,A,L,k),u<0?(T=A[0],L!=k&&(T=T*c+(A[1]||0)),m=T/x|0,m>1?(m>=c&&(m=c-1),f=o(W,m,c),b=f.length,k=A.length,u=e(f,A,b,k),u==1&&(m--,t(f,L<b?U:W,b,c))):(m==0&&(u=m=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,c),u==-1&&(k=A.length,u=e(W,A,L,k),u<1&&(m++,t(A,L<k?U:W,k,c))),k=A.length):u===0&&(m++,A=[0]),h[d++]=m,u&&A[0]?A[k++]=$[B]||0:(A=[$[B]],k=1);while((B++<C||A[0]!==void 0)&&I--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Os=y;else{for(d=1,m=h[0];m>=10;m/=10)d++;g.e=d+l*p-1,j(g,a?i+g.e+1:i,s,y)}return g}}();function j(o,e,t,n){var r,i,s,a,c,u,l,d,m,p=o.constructor;e:if(e!=null){if(d=o.d,!d)return o;for(r=1,a=d[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=ee,s=e,l=d[m=0],c=l/Oe(10,r-s-1)%10|0;else if(m=Math.ceil((i+1)/ee),a=d.length,m>=a)if(n){for(;a++<=m;)d.push(0);l=c=0,r=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=d[m],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||d[m+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:d[m-1])%10&1||t==(o.s<0?8:7)),e<1||!d[0])return d.length=0,u?(e-=o.e+1,d[0]=Oe(10,(ee-e%ee)%ee),o.e=-e||0):d[0]=o.e=0,o;if(i==0?(d.length=m,a=1,m--):(d.length=m+1,a=Oe(10,ee-i),d[m]=s>0?(l/Oe(10,r-s)%Oe(10,s)|0)*a:0),u)for(;;)if(m==0){for(i=1,s=d[0];s>=10;s/=10)i++;for(s=d[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,d[0]==Pt&&(d[0]=1));break}else{if(d[m]+=a,d[m]!=Pt)break;d[m--]=0,a=1}for(i=d.length;d[--i]===0;)d.pop()}return re&&(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 Ds(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)+Yt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Yt(-r-1)+i,t&&(n=t-s)>0&&(i+=Yt(n))):r>=s?(i+=Yt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Yt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Yt(n))),i}function Dr(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function vr(o,e,t){if(e>gc)throw re=!0,t&&(o.precision=t),Error(Ns);return j(new o(Vr),e,1,!0)}function At(o,e,t){if(e>Yo)throw Error(Ns);return j(new o(Er),e,t,!0)}function Es(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 Yt(o){for(var e="";o--;)e+="0";return e}function vs(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/ee+4);for(re=!1;;){if(t%2&&(i=i.times(e),Rs(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),Rs(e.d,s)}return re=!0,i}function Cs(o){return o.d[o.d.length-1]&1}function Fs(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 Qo(o,e){var t,n,r,i,s,a,c,u=0,l=0,d=0,m=o.constructor,p=m.rounding,y=m.precision;if(!o.d||!o.d[0]||o.e>17)return new m(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(re=!1,c=y):c=e,a=new m(.03125);o.e>-2;)o=o.times(a),d+=5;for(n=Math.log(Oe(2,d))/Math.LN10*2+5|0,c+=n,t=i=s=new m(1),m.precision=c;;){if(i=j(i.times(o),c,1),t=t.times(++l),a=s.plus(Ae(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(r=d;r--;)s=j(s.times(s),c,1);if(e==null)if(u<3&&vn(s.d,c-n,p,u))m.precision=c+=10,t=i=a=new m(1),l=0,u++;else return j(s,m.precision=y,p,re=!0);else return m.precision=y,s}s=a}}function Qt(o,e){var t,n,r,i,s,a,c,u,l,d,m,p=1,y=10,f=o,b=f.d,g=f.constructor,h=g.rounding,A=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?(re=!1,l=A):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=vr(g,l+2,A).times(i+""),f=Qt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?j(f,A,h,re=!0):f;for(d=f,c=s=f=Ae(f.minus(1),f.plus(1),l,1),m=j(f.times(f),l,1),r=3;;){if(s=j(s.times(m),l,1),u=c.plus(Ae(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(vr(g,l+2,A).times(i+""))),c=Ae(c,new g(p),l,1),e==null)if(vn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=Ae(d.minus(1),d.plus(1),l,1),m=j(f.times(f),l,1),r=a=1;else return j(c,g.precision=A,h,re=!0);else return g.precision=A,c;c=u,r+=2}}function Ds(o){return String(o.s*o.s/0)}function jo(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),re&&(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 Ac(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Vs.test(e))return jo(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(fc.test(e))t=16,e=e.toLowerCase();else if(pc.test(e))t=2;else if(yc.test(e))t=8;else throw Error(jt+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=vs(n,new n(t),i,i*2)),u=_r(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=Dr(u,l),o.d=u,re=!1,s&&(o=Ae(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?Oe(2,c):Fn.pow(2,c))),re=!0,o)}function Pc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:In(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Wr(5,t)),e=In(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 In(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,d=Math.ceil(l/ee);for(re=!1,c=t.times(t),a=new o(n);;){if(s=Ae(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=Ae(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[d]!==void 0){for(i=d;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return re=!0,s.d.length=d+1,s}function Wr(o,e){for(var t=o;--e;)t*=o;return t}function Ws(o,e){var t,n=e.s<0,r=At(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Et=n?4:1,e;if(t=e.divToInt(r),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Et=Cs(t)?n?2:3:n?4:1,e;Et=Cs(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Ho(o,e,t,n){var r,i,s,a,c,u,l,d,m,p=o.constructor,y=t!==void 0;if(y?(et(t,1,Ht),n===void 0?n=p.rounding:et(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=Ds(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(".",""),m=new p(1),m.e=l.length-s,m.d=_r(Kt(m),10,r),m.e=m.d.length),d=_r(l,10,r),i=c=d.length;d[--c]==0;)d.pop();if(!d[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=d,o.e=i,o=Ae(o,m,t,n,0,r),d=o.d,i=o.e,u=Os),s=d[t],a=r/2,u=u||d[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&&d[t-1]&1||n===(o.s<0?8:7)),d.length=t,u)for(;++d[--t]>r-1;)d[t]=0,t||(++i,d.unshift(1));for(c=d.length;!d[c-1];--c);for(s=0,l="";s<c;s++)l+=Xo.charAt(d[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(d=_r(l,r,e),c=d.length;!d[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Xo.charAt(d[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 Rs(o,e){if(o.length>e)return o.length=e,!0}function hc(o){return new this(o).abs()}function kc(o){return new this(o).acos()}function Tc(o){return new this(o).acosh()}function Ic(o,e){return new this(o).plus(e)}function xc(o){return new this(o).asin()}function Bc(o){return new this(o).asinh()}function Sc(o){return new this(o).atan()}function Kc(o){return new this(o).atanh()}function Cc(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=At(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?At(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=At(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Ae(o,e,i,1)),e=At(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Ae(o,e,i,1)),t}function Rc(o){return new this(o).cbrt()}function Lc(o){return j(o=new this(o),o.e+1,2)}function Oc(o,e,t){return new this(o).clamp(e,t)}function Nc(o){if(!o||typeof o!="object")throw Error(Fr+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Ht,"rounding",0,8,"toExpNeg",-Tn,0,"toExpPos",0,Tn,"maxE",0,Tn,"minE",-Tn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=zo[t]),(n=o[t])!==void 0)if(Xe(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(jt+t+": "+n);if(t="crypto",r&&(this[t]=zo[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(Ms);else this[t]=!1;else throw Error(jt+t+": "+n);return this}function Mc(o){return new this(o).cos()}function _c(o){return new this(o).cosh()}function qs(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,Ls(i)){u.s=i.s,re?!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++;re?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 jo(u,i.toString())}else if(c!=="string")throw Error(jt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Vs.test(i)?jo(u,i):Ac(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=Nc,r.clone=qs,r.isDecimal=Ls,r.abs=hc,r.acos=kc,r.acosh=Tc,r.add=Ic,r.asin=xc,r.asinh=Bc,r.atan=Sc,r.atanh=Kc,r.atan2=Cc,r.cbrt=Rc,r.ceil=Lc,r.clamp=Oc,r.cos=Mc,r.cosh=_c,r.div=Vc,r.exp=Ec,r.floor=vc,r.hypot=Fc,r.ln=Dc,r.log=Wc,r.log10=Uc,r.log2=qc,r.max=Gc,r.min=Xc,r.mod=zc,r.mul=Yc,r.pow=Qc,r.random=jc,r.round=Hc,r.sign=Zc,r.sin=$c,r.sinh=Jc,r.sqrt=el,r.sub=tl,r.sum=nl,r.tan=rl,r.tanh=ol,r.trunc=il,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 Vc(o,e){return new this(o).div(e)}function Ec(o){return new this(o).exp()}function vc(o){return j(o=new this(o),o.e+1,3)}function Fc(){var o,e,t=new this(0);for(re=!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 re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function Ls(o){return o instanceof Fn||o&&o.toStringTag===_s||!1}function Dc(o){return new this(o).ln()}function Wc(o,e){return new this(o).log(e)}function qc(o){return new this(o).log(2)}function Uc(o){return new this(o).log(10)}function Gc(){return Fs(this,arguments,"lt")}function Xc(){return Fs(this,arguments,"gt")}function zc(o,e){return new this(o).mod(e)}function Yc(o,e){return new this(o).mul(e)}function Qc(o,e){return new this(o).pow(e)}function jc(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:et(o,1,Ht),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(Ms);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 Hc(o){return j(o=new this(o),o.e+1,this.rounding)}function Zc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function $c(o){return new this(o).sin()}function Jc(o){return new this(o).sinh()}function el(o){return new this(o).sqrt()}function tl(o,e){return new this(o).sub(e)}function nl(){var o=0,e=arguments,t=new this(e[o]);for(re=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return re=!0,j(t,this.precision,this.rounding)}function rl(o){return new this(o).tan()}function ol(o){return new this(o).tanh()}function il(o){return j(o=new this(o),o.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var Fn=M.constructor=qs(zo);Vr=new Fn(Vr);Er=new Fn(Er);var V=Fn;import{PublicKey as ti}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sl}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Us,SYSVAR_RENT_PUBKEY as al}from"@solana/web3.js";function w({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Zo=[w({pubkey:sl,isWritable:!1}),w({pubkey:Us.programId,isWritable:!1}),w({pubkey:al,isWritable:!1})];function $o({publicKey:o,transformSol:e}){let t=Jo(o.toString());if(t instanceof Te)return e&&t.equals(Ne)?J:t;if(e&&t.toString()===Ne.toBase58())return J;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 Jo(o){try{return new Te(o)}catch{return o}}var qr=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Ur=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Te("SysvarRent111111111111111111111111111111111"),ei=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Gr=new Te("Sysvar1nstructions1111111111111111111111111"),Xr=Us.programId,fp=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),yp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),bp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),gp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),wp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ap=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Pp=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),hp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),kp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Tp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Ip=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),J=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function st(o){return $o({publicKey:o,transformSol:!0})}import{PublicKey as ul}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gs}from"@solana/spl-token";var Ct={chainId:101,address:ul.default.toBase58(),programId:Gs.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:Gs.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 ni=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof ti&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new ti(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?ti.default:$o({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=ni;Ie.WSOL=new ni(F(R({},Me),{mint:Me.address}));import Yr from"big.js";import ml from"bn.js";import dl from"decimal.js-light";import cl from"toformat";var ll=cl,Dn=ll;var zr=ue("module/fraction"),ri=Dn(Yr),Wn=Dn(dl),pl={[0]:Wn.ROUND_DOWN,[1]:Wn.ROUND_HALF_UP,[2]:Wn.ROUND_UP},fl={[0]:Yr.roundDown,[1]:Yr.roundHalfUp,[2]:Yr.roundUp},pe=class{constructor(e,t=new ml(1)){this.numerator=H(e),this.denominator=H(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(H(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(H(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(H(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(H(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||zr.logWithError(`${e} is not an integer.`),e<=0&&zr.logWithError(`${e} is not positive.`),Wn.set({precision:e+1,rounding:pl[n]});let r=new Wn(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)||zr.logWithError(`${e} is not an integer.`),e<0&&zr.logWithError(`${e} is negative.`),ri.DP=e,ri.RM=fl[n]||1,new ri(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var bl=ue("Raydium_price"),nt=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(oi(n.decimals),oi(r.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&bl.logWithError("mul token not equals");let n=super.mul(t);return new nt({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 ii=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Qr=ii;Qr.SOL=new ii(Ct);import gl from"bn.js";var Xs=new pe(new gl(100)),Ze=class extends pe{toSignificant(e=5,t,n){return this.mul(Xs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Xs).toFixed(e,t,n)}};var dt=new rt(0),Ys=new rt(1),hf=new rt(2),kf=new rt(3),Tf=new rt(5),si=new rt(10),If=new rt(100),xf=new rt(1e3),Bf=new rt(1e4),zs=9007199254740991;function H(o){let e=ue("Raydium_parseBigNumberish");if(o instanceof rt)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new rt(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=zs||o<=-zs)&&e.logWithError(`BigNumberish number overflow: ${o}`),new rt(String(o))):typeof o=="bigint"?new rt(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new rt(0))}function oi(o){return si.pow(H(o))}function jr(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 Al=ue("Raydium_amount"),js=Dn(wl);function Pl(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")):Al.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 Hr(0),a=si.pow(new Hr(t.decimals));if(r)s=H(n);else{let c=new Hr(0),u=new Hr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,d]=Pl(n.toString(),t.decimals);c=H(l),u=H(d)}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 Qs(o){return typeof o=="object"&&o!==null&&![Ie,ye,hl,pe,kl,nt,Ze].some(e=>typeof e=="object"&&o instanceof e)}function ke(o){return typeof o=="string"?Jo(o):Array.isArray(o)?o.map(e=>ke(e)):Qs(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,ke(t)])):o}import{PublicKey as Gn,sendAndConfirmTransaction as Xn,Transaction as zn,TransactionMessage as Yn,VersionedTransaction as Qn}from"@solana/web3.js";import Ll from"axios";var E={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",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 Zs,ComputeBudgetProgram as Hs,Transaction as Zr,TransactionMessage as Tl,Keypair as $s,VersionedTransaction as Js}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Il}from"@solana/spl-token";var vt=ue("Raydium_txUtil"),ea=1644;function $r(o){let e=[],t=[];return o.microLamports&&(e.push(Hs.setComputeUnitPrice({microLamports:o.microLamports})),t.push(E.SetComputeUnitPrice)),o.units&&(e.push(Hs.setComputeUnitLimit({units:o.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Bn(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 Jr(o,e){o.length<1&&vt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&vt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Zr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ea}catch{return!1}}async function ta(o,e,t,n=!0){let r=new Zs("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new Zr;s.feePayer=r;for(let u of e)Jr([...s.instructions,u],[r])||(i.push(s),s=new Zr,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await xl(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&vt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(vt.debug("simulate result:",u),u.logs){let l=u.logs.filter(d=>d&&d.includes(t));vt.debug("filteredLog:",c),l.length||vt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function na(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?vt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Ft(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?vt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function se(o,e){let[t,n]=Zs.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function xl(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 d=u._compile().serialize(),p=u._serialize(d).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&&vt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function qn({instructions:o,payer:e,signers:t}){return Jr(o,[e,...t])}function Un({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=$s.generate().publicKey.toString()}){let i=new Tl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Js(i).serialize()).toString("base64").length<ea}catch{return!1}}var Bl=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 Zr&&(t.recentBlockhash||(t.recentBlockhash=Il.toBase58()),t.feePayer||(t.feePayer=$s.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Js&&(n=Bl(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as ia,AddressLookupTableAccount as eo}from"@solana/web3.js";import{PublicKey as ra}from"@solana/web3.js";import{MINT_SIZE as Sl,TOKEN_PROGRAM_ID as Kl,getTransferFeeConfig as Cl,unpackMint as Rl}from"@solana/spl-token";var ai=ue("Raydium_accountInfo_util");async function ht(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=R({batchRequest:!1},t),s=ui(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(d=>{let m=o._buildArgs([d.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=ui(c,10);a=(await(await Promise.all(u.map(async d=>await o._rpcBatchRequest(d)))).flat()).map(d=>(d.error&&ai.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${d.error.message}`),d.result.value.map(m=>{if(m){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=m;return p.length!==2&&p[1]!=="base64"&&ai.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ra(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&ai.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Ve(o,e,t){let n=await ht(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>F(R({},r),{accountInfo:n[i]}))}async function oa({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ve(o,e.map(c=>({pubkey:st(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Sl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Rl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=F(R({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Kl,feeConfig:(a=Cl(u))!=null?a:void 0})}return r[ra.default.toBase58()]=r[J.toBase58()],r}async function ci({connection:o,address:e}){let t=await ht(o,[...new Set(e.map(r=>r.toString()))].map(r=>new ia(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new eo({key:s,state:eo.deserialize(i.data)});n[s.toString()]=a,to[s.toString()]=a}return n}var to={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new eo({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:eo.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 no=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 Ll.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}=$r(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!==Gn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(R({},t||{})):this.build(t)}build(e){let t=new zn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async n=>{var a;let{recentBlockHash:r,skipPreflight:i=!0}=n||{},s=r!=null?r:await Bn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),an([t]),(a=this.owner)!=null&&a.isKeyPair)return{txId:await Xn(this.connection,t,this.signers.find(c=>c.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:i}),signedTx:t};if(this.signAllTransactions){let c=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(c[0].serialize(),{skipPreflight:i}),signedTx:c[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(u=>u.transaction.instructions.length>0),s=[r,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],c=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async u=>{var f;let{sequentially:l,onTxUpdate:d,recentBlockHash:m,skipPreflight:p=!0}=u||{},y=m!=null?m:await Bn(this.connection,this.blockhashCommitment);if((f=this.owner)!=null&&f.isKeyPair){if(l){let b=[];for(let g of s){let h=await Xn(this.connection,g,this.signers.find(A=>A.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:p});b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await await Promise.all(s.map(async(b,g)=>(b.recentBlockhash=y,await Xn(this.connection,b,a[g].find(h=>h.publicKey.equals(this.owner.publicKey))?a[g]:[...a[g],this.owner.signer],{skipPreflight:p})))),signedTxs:s}}if(this.signAllTransactions){let b=s.map((h,A)=>(h.recentBlockhash=y,a[A].length&&h.sign(...a[A]),h));an(b);let g=await this.signAllTransactions(b);if(l){let h=0,A=[],k=async()=>{if(!g[h])return;let T=await this.connection.sendRawTransaction(g[h].serialize(),{skipPreflight:p});A.push({txId:T,status:"sent",signedTx:g[h]}),d==null||d([...A]),h++,this.connection.onSignature(T,I=>{let S=A.findIndex(B=>B.txId===T);S>-1&&(A[S].status=I.err?"error":"success"),d==null||d([...A]),I.err||k()},"processed"),this.connection.getSignatureStatus(T)};return await k(),{txIds:A.map(T=>T.txId),signedTxs:g}}else{let h=[];for(let A=0;A<g.length;A+=1){let k=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:p});h.push(k)}return{txIds:h,signedTxs:g}}}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){let m=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=m,i=xe(m,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=R(R({},this.cluster==="devnet"?{}:to),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let p of a)s[p]===void 0&&c.push(new Gn(p));let u=await ci({connection:this.connection,address:c});for(let[p,y]of Object.entries(u))s[p]=y;let l=new Yn({payerKey:this.feePayer,recentBlockhash:r?Gn.default.toBase58():await Bn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),d=new Qn(l);return d.sign(this.signers),{builder:this,transaction:d,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async p=>{var b;let{recentBlockHash:y,skipPreflight:f=!0}=p||{};if(y&&(d.message.recentBlockhash=y),an([d]),(b=this.owner)!=null&&b.isKeyPair){this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))||d.sign([this.owner.signer]);let g=await this.connection.sendTransaction(d,{skipPreflight:f}),{lastValidBlockHeight:h,blockhash:A}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});return await this.connection.confirmTransaction({blockhash:A,lastValidBlockHeight:h,signature:g},"confirmed"),{txId:g,signedTx:d}}if(this.signAllTransactions){let g=await this.signAllTransactions([d]);return{txId:await this.connection.sendTransaction(g[0],{skipPreflight:f}),signedTx:g[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(u=>u.builder.instructions.length>0),s=[r,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],c=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return s.forEach(async(u,l)=>{u.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async u=>{var y;let{sequentially:l,onTxUpdate:d,recentBlockHash:m,skipPreflight:p=!0}=u||{};if(m&&s.forEach(f=>f.message.recentBlockhash=m),an(s),(y=this.owner)!=null&&y.isKeyPair){let{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});if(s.forEach((g,h)=>{a[h].find(A=>A.publicKey.equals(this.owner.publicKey))||g.sign([this.owner.signer])}),l){let g=[];for(let h of s){let A=await this.connection.sendTransaction(h,{skipPreflight:p}),{lastValidBlockHeight:k,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:k,signature:A},"confirmed"),g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await Promise.all(s.map(async g=>{let h=await this.connection.sendTransaction(g,{skipPreflight:p});return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:h},"confirmed"),h})),signedTxs:s}}if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(l){let b=0,g=[],h=async()=>{if(!f[b])return;let A=await this.connection.sendTransaction(f[b],{skipPreflight:p});g.push({txId:A,status:"sent",signedTx:f[b]}),d==null||d([...g]),b++,this.connection.onSignature(A,k=>{let T=g.findIndex(I=>I.txId===A);T>-1&&(g[T].status=k.err?"error":"success"),d==null||d([...g]),k.err||h()},"processed"),this.connection.getSignatureStatus(A)};return h(),{txIds:[],signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let h=await this.connection.sendTransaction(f[g],{skipPreflight:p});b.push(h)}return{txIds:b,signedTxs:f}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){let u=e||{},{computeBudgetConfig:t}=u,n=xe(u,["computeBudgetConfig"]),r=t?$r(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((l,d)=>F(R({},l),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(l=>{let d=[...c,l],m=t?[...r.instructions,...d]:d,y=[...new Set(d.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new Gn(f));if(c.length<12&&qn({instructions:m,payer:this.feePayer,signers:y})||qn({instructions:d,payer:this.feePayer,signers:y}))c.push(l);else{if(c.length===0)throw Error("item ins too big");qn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:y})?s.push(new zn().add(...r.instructions,...c)):s.push(new zn().add(...c)),a.push(Array.from(new Set(c.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>i[f]).filter(f=>f!==void 0)),c=[l]}}),c.length>0){let d=[...new Set(c.map(m=>m.keys.filter(p=>p.isSigner).map(p=>p.pubkey.toString())).flat()).values()].map(m=>i[m]).filter(m=>m!==void 0);qn({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(m=>m.publicKey)})?s.push(new zn().add(...r.instructions,...c)):s.push(new zn().add(...c)),a.push(d)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var b;let{sequentially:d,onTxUpdate:m,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Bn(this.connection,this.blockhashCommitment);if(s.forEach(async(g,h)=>{g.recentBlockhash=f,a[h].length&&g.sign(...a[h])}),an(s),(b=this.owner)!=null&&b.isKeyPair){if(d){let g=[];for(let h of s){let A=await Xn(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await Promise.all(s.map(async(g,h)=>await Xn(this.connection,g,a[h].find(A=>A.publicKey.equals(this.owner.publicKey))?a[h]:[...a[h],this.owner.signer],{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let g=await this.signAllTransactions(s);if(d){let h=0,A=[],k=async()=>{if(!g[h])return;let T=await this.connection.sendRawTransaction(g[h].serialize(),{skipPreflight:y});A.push({txId:T,status:"sent",signedTx:g[h]}),m==null||m([...A]),h++,this.connection.onSignature(T,I=>{let S=A.findIndex(B=>B.txId===T);S>-1&&(A[S].status=I.err?"error":"success"),m==null||m([...A]),I.err||k()},"processed"),this.connection.getSignatureStatus(T)};return await k(),{txIds:A.map(T=>T.txId),signedTxs:g}}else{let h=[];for(let A=0;A<g.length;A+=1){let k=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:y});h.push(k)}return{txIds:h,signedTxs:g}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,i=xe(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=R(R({},this.cluster==="devnet"?{}:to),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let g of a)s[g]===void 0&&c.push(new Gn(g));let u=await ci({connection:this.connection,address:c});for(let[g,h]of Object.entries(u))s[g]=h;let l=t?$r(t):{instructions:[],instructionTypes:[]},d=await Bn(this.connection,this.blockhashCommitment),m=this.signers.reduce((g,h)=>F(R({},g),{[h.publicKey.toBase58()]:h}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let h=[...f,g],A=t?[...l.instructions,...h]:h;if(f.length<12&&Un({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||Un({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let k={};for(let T of[...new Set(a)])s[T]!==void 0&&(k[T]=s[T]);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:d})){let T=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Qn(T))}else{let T=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Qn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(T=>m[T]).filter(T=>T!==void 0)),f=[g]}}),f.length>0){let h=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>m[A]).filter(A=>A!==void 0);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:d})){let A=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Qn(A))}else{let A=new Yn({payerKey:this.feePayer,recentBlockhash:d,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Qn(A))}y.push(h)}return{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var I;let{sequentially:h,onTxUpdate:A,recentBlockHash:k,skipPreflight:T=!0}=g||{};if(p.map(async(S,B)=>{y[B].length&&S.sign(y[B]),k&&(S.message.recentBlockhash=k)}),an(p),(I=this.owner)!=null&&I.isKeyPair){let{lastValidBlockHeight:S,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});if(p.forEach((C,x)=>{y[x].find(L=>L.publicKey.equals(this.owner.publicKey))||C.sign([this.owner.signer])}),h){let C=[];for(let x of p){let L=await this.connection.sendTransaction(x,{skipPreflight:T}),{lastValidBlockHeight:U,blockhash:v}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:v,lastValidBlockHeight:U,signature:L},"confirmed"),C.push(L)}return{txIds:C,signedTxs:p}}return{txIds:await Promise.all(p.map(async C=>{let x=await this.connection.sendTransaction(C,{skipPreflight:T});return await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:S,signature:x},"confirmed"),x})),signedTxs:p}}if(this.signAllTransactions){let S=await this.signAllTransactions(p);if(h){let B=0,C=[],x=async()=>{if(!S[B])return;let L=await this.connection.sendTransaction(S[B],{skipPreflight:T});C.push({txId:L,status:"sent",signedTx:S[B]}),A==null||A([...C]),B++,this.connection.onSignature(L,U=>{let v=C.findIndex(Z=>Z.txId===L);v>-1&&(C[v].status=U.err?"error":"success"),A==null||A([...C]),U.err||x()},"processed"),this.connection.getSignatureStatus(L)};return x(),{txIds:[],signedTxs:S}}else{let B=[];for(let C=0;C<S.length;C+=1){let x=await this.connection.sendTransaction(S[C],{skipPreflight:T});B.push(x)}return{txIds:B,signedTxs:S}}}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 ui(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var sa=o=>typeof o=="number";function aa(o,e,t){let n=sa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function ua(o,e,t){let n=sa(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 ca=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),la=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Hn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Vy=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ey=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),li=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ro=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),vy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ma=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),da=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Fy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Dy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ol=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Nl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ml=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),_l=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),pa=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Wy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),qy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Vl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),El=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),vl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Zn={IDO_PROGRAM_ID_V1:Ol,IDO_PROGRAM_ID_V2:Nl,IDO_PROGRAM_ID_V3:Ml,IDO_PROGRAM_ID_V4:_l};var Uy={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:Vl,CREATE_CPMM_POOL_AUTH:El,CREATE_CPMM_POOL_FEE_ACC:vl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Fl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dl}from"@solana/spl-token";function be(o,e,t){return se([o.toBuffer(),(t!=null?t:Dl).toBuffer(),e.toBuffer()],new Fl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var $n=1e4;function Pe(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=F(R({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),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===$n){let c=new Tt(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=Jn(o.mul(new Tt($n)),new Tt($n-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,d=Jn(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt($n)),m=d.gt(s)?s:d;return{amount:l,fee:m,expirationTime:a}}else{let c=Jn(o.mul(new Tt(i.transferFeeBasisPoints)),new Tt($n)),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 Jn(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"},yb=R({},We);var fa="ray_tab_hash",mi="ray_req_hash",Wl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(fa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(fa,o)),o},oo=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=xe(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(mi)||"[]").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(R({},t),{time:Date.now(),session:Wl()}));try{localStorage.setItem(mi,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(mi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return oo(F(R({},t),{logCount:o,removeLastLog:!0}))}};var io=ue("Raydium_Api"),di=new Map;var so=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=ya.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 io.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(io.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:d,url:m}=a;return n&&oo({status:u,url:`${d}${m}`,params:a.params,data:c,logCount:this.logCount}),io.debug(`${l==null?void 0:l.toUpperCase()} ${d}${m} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:d,url:m}=a;return n&&oo({status:u,url:`${d}${m}`,params:a.params,data:s.message,logCount:this.logCount}),io.error(`${l.toUpperCase()} ${d}${m} ${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 ya.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=>di.has(s)?(n.push(di.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=>{di.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&&st(t).toBase58(),n&&n!=="undefined"?st(n).toBase58():""],[l,d]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${d}&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 ao="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ba="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ti,TOKEN_PROGRAM_ID as en,AccountLayout as Kn,TOKEN_2022_PROGRAM_ID as gm}from"@solana/spl-token";import{PublicKey as bo,SystemProgram as wm}from"@solana/web3.js";var pi=(...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 no({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(pi(e))}logInfo(...e){this.logger.info(pi(e))}logAndCreateError(...e){let t=pi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as mm,createCloseAccountInstruction as dm,createTransferInstruction as pm,TOKEN_PROGRAM_ID as Sn}from"@solana/spl-token";import{PublicKey as fm,SystemProgram as ym}from"@solana/web3.js";import bm from"bn.js";import{PublicKey as Ra,Keypair as am}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as um}from"@solana/spl-token";import cm from"bn.js";import{PublicKey as em}from"@solana/web3.js";import ha,{isBN as ka}from"bn.js";import{bits as Ul,BitStructure as jb,blob as Gl,Blob as Hb,cstr as Zb,f32 as $b,f32be as Jb,f64 as eg,f64be as tg,greedy as ng,Layout as Xl,ns64 as rg,ns64be as og,nu64 as zl,nu64be as ig,offset as sg,s16 as ag,s16be as ug,s24 as cg,s24be as lg,s32 as Yl,s32be as mg,s40 as dg,s40be as pg,s48 as fg,s48be as yg,s8 as bg,seq as Ql,struct as gg,Structure as jl,u16 as Hl,u16be as wg,u24 as Ag,u24be as Pg,u32 as Zl,u32be as hg,u40 as kg,u40be as Tg,u48 as Ig,u48be as xg,u8 as $l,UInt as Jl,union as Bg,Union as Sg,unionLayoutDiscriminator as Kg,utf8 as Cg}from"@solana/buffer-layout";var uo=Xl,ga=jl;var fi=Jl;var wa=$l,Lt=Hl;var yi=Zl;var Aa=zl;var qe=Yl;var Pa=Ql;var fe=Gl;var bi=Ul;var un=class extends uo{constructor(t,n,r){super(t,r);this.blob=fe(t),this.signed=n}decode(t,n=0){let r=new ha(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 ha(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},co=class extends uo{constructor(t){super(8,t);this._lower=bi(yi(),!1),this._upper=bi(yi(),!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 R(R({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function D(o){return new fi(1,o)}function ze(o){return new fi(4,o)}function P(o){return new un(8,!1,o)}function Y(o){return new un(16,!1,o)}function Ta(o){return new un(1,!0,o)}function mo(o){return new un(8,!0,o)}function Ia(o){return new un(16,!0,o)}var lo=class extends uo{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 lo(fe(32),e=>new em(e),e=>e.toBuffer(),o)}function Ue(o){return new lo(wa(),tm,nm,o)}function tm(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function nm(o){return o?1:0}var gi=class extends ga{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new gi(o,e,t)}function G(o,e,t){let n,r=typeof e=="number"?e:ka(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=ka(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 Pa(o,r,t)}var Zt=_([K("mint"),K("owner"),P("amount"),ze("delegateOption"),K("delegate"),D("state"),ze("isNativeOption"),P("isNative"),P("delegatedAmount"),ze("closeAuthorityOption"),K("closeAuthority")]);function rm(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function wi(o,...e){if(!rm(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 Ai(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 xa(o,e){wi(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var fo=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),It=(o,e)=>o<<32-e|o>>>e;var Gg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function om(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Pi(o){return typeof o=="string"&&(o=om(o)),wi(o),o}var po=class{clone(){return this._cloneInto()}},Xg={}.toString;function Ba(o){let e=n=>o().update(Pi(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function im(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 Sa=(o,e,t)=>o&e^~o&t,Ka=(o,e,t)=>o&e^o&t^e&t,yo=class extends po{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=fo(this.buffer)}update(e){Ai(this);let{view:t,buffer:n,blockLen:r}=this;e=Pi(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=fo(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){Ai(this),xa(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 d=s;d<r;d++)t[d]=0;im(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=fo(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 d=0;d<u;d++)a.setUint32(4*d,l[d],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 sm=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]),$t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Jt=new Uint32Array(64),hi=class extends yo{constructor(){super(64,32,8,!1),this.A=$t[0]|0,this.B=$t[1]|0,this.C=$t[2]|0,this.D=$t[3]|0,this.E=$t[4]|0,this.F=$t[5]|0,this.G=$t[6]|0,this.H=$t[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 d=0;d<16;d++,t+=4)Jt[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let m=Jt[d-15],p=Jt[d-2],y=It(m,7)^It(m,18)^m>>>3,f=It(p,17)^It(p,19)^p>>>10;Jt[d]=f+Jt[d-7]+y+Jt[d-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let d=0;d<64;d++){let m=It(a,6)^It(a,11)^It(a,25),p=l+m+Sa(a,c,u)+sm[d]+Jt[d]|0,f=(It(n,2)^It(n,13)^It(n,22))+Ka(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(){Jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ca=Ba(()=>new hi);var uw=ue("Raydium_Util");function La({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=Zt.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:Ra.default,amount:new cm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ye({fromPublicKey:o,programId:e=um}){let t=am.generate().publicKey.toBase58().slice(0,32);return{publicKey:lm(o,t,e),seed:t}}function lm(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=Ca(n);return new Ra(r)}function ki(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Sn}=o;return mm(t,e,n,r)}function Ot(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Sn}=o;return dm(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(Zt.span,n),c=H(t).add(new bm(a)),u=Ye({fromPublicKey:r,programId:Sn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ym.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Zt.span,programId:Sn}),ki({mint:new fm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Sn})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:r,owner:i})]}}function er({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Sn}){return pm(o,e,t,BigInt(String(n)),r,i)}var tr=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=R(R({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:en},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:gm},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=La({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=en,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 bo(t.tokenProgram||en),d=this.getAssociatedTokenAccount(n,new bo(l)),m=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(d))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||m.length>0)return m.length>0?{account:m[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=Ti(s,d,s,n,l);if(u){let A=await this.scope.connection.getAccountInfo(d);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(E.CreateATA);else if(!(A.owner.equals(l)&&Kn.decode(A.data).mint.equals(n)&&Kn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(E.CreateATA);if(n.equals(J)&&r.amount){let A=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(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),r.amount&&(p.instructions.push(er({source:A.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:en})),p.instructionTypes.push(E.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:r.payer||s,tokenAccount:d,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:d,instructionParams:p}}else{let h=Ye({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Kn.span),k=wm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:A+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Kn.span,programId:l});return p.instructions.push(k,ki({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=en,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 Ti(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],i=u}return r&&J.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=en,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:d}=t,m=this.getAssociatedTokenAccount(i,s);if(new bo(J).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return R({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!m.equals(a)&&!u){let p=[],y=Ti(this.scope.ownerPubKey,m,this.scope.ownerPubKey,i,s);if(d){let f=await this.scope.connection.getAccountInfo(m);if(f===null)p.push(y);else if(!(f.owner.equals(en)&&Kn.decode(f.data).mint.equals(i)&&Kn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${m.toString()}`)}else p.push(y);return{tokenAccount:m,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=en,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new bo(J))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:m}=l,p=xe(l,["tokenAccount"]);c=m,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:m}=d,p=xe(d,["tokenAccount"]);c=m,u.addInstruction(p)}return R({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Fm}from"@solana/spl-token";import{PublicKey as he,SystemProgram as Dm}from"@solana/web3.js";import{PublicKey as va}from"@solana/web3.js";var Ii=_([D("instruction")]),xi=_([D("instruction")]),Am=_([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),G(P(),15,"padding")]),Pm=_([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),Y("perShareReward"),P("lastSlot"),P("perSlotReward")]),hm=_([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),Y("perShareRewardA"),P("perSlotRewardA"),D("option"),K("rewardVaultB"),fe(7),P("totalRewardB"),Y("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),km=_([P(),P("state"),P("nonce"),P("validRewardTokenNum"),Y("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),G(Am,5,"rewardInfos"),K("creator"),K(),G(P(),32,"padding")]),Oa=new Proxy(Pm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(R({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),Na=new Proxy(hm,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(R({},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)}}),nr=new Proxy(km,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return F(R({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return F(R({},i),{rewardType:((s=Object.entries(tn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Tm=_([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Bi=_([D("instruction"),P("nonce"),G(Tm,5,"rewardTimeInfo")]),Si=_([D("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Ki=_([D("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Dw=_([P("state"),K("id"),K("owner"),P("deposited"),G(P(),1,"rewardDebts")]),rr=_([P("state"),K("id"),K("owner"),P("deposited"),G(Y(),1,"rewardDebts"),P(""),P("voteLockedBalance"),G(P(),15)]),Ww=_([P("state"),K("id"),K("owner"),P("deposited"),G(P(),2,"rewardDebts")]),Ma=_([P("state"),K("id"),K("owner"),P("deposited"),G(Y(),2,"rewardDebts"),G(P(),17)]),_a=_([P(),P("state"),K("id"),K("owner"),P("deposited"),G(Y(),5,"rewardDebts"),G(P(),16)]),$e=_([D("instruction"),P("amount")]),Im=_([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),Ta("digitShift"),G(D(),7,"reserved1"),G(P(),7,"reserved2")]),Va=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),G(D(),32,"reserved1"),G(Im,4,"votingMints"),mo("timeOffset"),D("bump"),G(D(),7,"reserved2"),G(P(),11,"reserved3")]),xm=_([mo("startTime"),mo("endTime"),D("kind"),G(D(),15,"reserved")]),Bm=_([G(xm,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ue("isUsed"),Ue("allowClawback"),D("votingMintConfigIdx"),G(D(),29,"reserved")]),Ea=_([fe(8),K("voterAuthority"),K("registrar"),G(Bm,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),G(D(),94,"reserved")]);var jw=ue("Raydium_farm_config"),Fa=new va("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Da=new va("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Wa={3:Oa,5:Na,6:nr},qa={3:rr,5:Ma,6:_a},Ci=o=>[3,5,6].indexOf(o)!==-1,Ri=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)},tn={"Standard SPL":0,"Option tokens":1},pt={[ca.toString()]:3,[la.toString()]:5,[Hn.toString()]:6};import{PublicKey as ie,SystemProgram as cn,SYSVAR_RENT_PUBKEY as Cm,SYSVAR_CLOCK_PUBKEY as sr,TransactionInstruction as Ee}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Rm,TOKEN_PROGRAM_ID as at,ASSOCIATED_TOKEN_PROGRAM_ID as Lm}from"@solana/spl-token";import go from"bn.js";function Li(o,e,t){return se([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function Oi(o,e){return se([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function Ni(o,e){return se([e.toBuffer()],o)}function Mi(o,e,t){return se([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function _i(o,e,t){return se([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function Vi(o,e,t,n){return se([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import ot from"bn.js";var or=ue("Raydium.farm.util");function ir({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=se([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}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var Ua=({programId:o,poolId:e})=>se([e.toBuffer()],o);function Ga(o){return{isSet:new ot(1),rewardPerSecond:H(o.perSecond),rewardOpenTime:H(o.openTime),rewardEndTime:H(o.endTime),rewardType:H(tn[o.rewardType])}}function Ei(o){return H(o.endTime).sub(H(o.openTime)).mul(H(o.perSecond))}function Cn(o){let e=qa[o];return e||or.logWithError("invalid version",o),e}function Sm(o){let e=Wa[o];return e||or.logWithError("invalid version",o),e}function Km(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new ot(t)))return o;let r=new ot(t).sub(o.lastSlot);o.lastSlot=new ot(t);for(let i of o.rewardInfos){if(e.amount.eq(new ot(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new ot(10).pow(new ot(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 ot(0)))continue;let i=ot.min(new ot(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 ot(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function dA({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new ot(10),c=[];for(let m of e){let p=ke(m);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:m.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await Ve(o,c,n);for(let{pubkey:m,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=R({},u[g]),y==="state"){let h=Sm(p);(!b||!b.data||b.data.length!==h.span)&&or.logWithError(`invalid farm state account info, pools.id, ${m}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Zt.span)&&or.logWithError(`invalid farm lp vault account info, pools.lpVault, ${m}`),u[g].lpVault=Zt.decode(b.data);else if(y==="ledger"){let h=Cn(p);b&&b.data&&(b.data.length!==h.span&&or.logWithError(`invalid farm ledger account info, ledger, ${m}`),u[g].ledger=h.decode(b.data))}}let d=s||i?await o.getSlot():0;for(let m of Object.keys(u))u[m]!==void 0&&(u[m].state=Km(u[m].state,u[m].lpVault,d,r));for(let[m,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new ot(9)):a.pow(new ot(15)),b=p.rewardInfos.map((g,h)=>{let A=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[m].wrapped=F(R({},u[m].wrapped),{pendingRewards:b})}return u}function pA(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>aa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ua(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function vi(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=Va.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=Ea.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Om=ue("Raydium_farm_instruction"),ar={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 wo(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Om.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ii.span);Ii.encode({instruction:s},a);let c=[w({pubkey:t}),w({pubkey:n}),w({pubkey:i,isWritable:!1}),w({pubkey:cn.programId,isWritable:!1}),w({pubkey:Cm,isWritable:!1})];return{instruction:new Ee({programId:r,keys:c,data:a}),instructionType:E.FarmV3CreateLedger}}function Xa(o){var n;let e=Buffer.alloc(Bi.span);Bi.encode({instruction:0,nonce:new go(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Zo,w({pubkey:o.farmId}),w({pubkey:o.farmAuthority,isWritable:!1}),w({pubkey:o.lpVault}),w({pubkey:o.lpMint,isWritable:!1}),w({pubkey:o.lockVault}),w({pubkey:o.lockMint,isWritable:!1}),w({pubkey:(n=o.lockUserAccount)!=null?n:Ne}),w({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(w({pubkey:r.rewardMint,isWritable:!1}),w({pubkey:r.rewardVault}),w({pubkey:r.userRewardToken}));return{instruction:new Ee({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function za(o){let e=Buffer.alloc(xi.span);xi.encode({instruction:5},e);let t=[w({pubkey:at,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.authority,isWritable:!1}),w({pubkey:o.lpVault,isWritable:!1}),w({pubkey:o.rewardVault}),w({pubkey:o.userRewardToken}),w({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ee({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function Nm(o,e,t,n,r,i,s,a,c,u,l,d,m){let p=_([D("depositEntryIndex"),P("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:at,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:Gr,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:d,amount:m},f);let b=Buffer.from([...ar.voterStakeRegistryDeposit,...f]);return new Ee({keys:y,programId:o,data:b})}function Mm(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([...ar.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ee({keys:i,programId:o,data:a})}function _m(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){let f=_([D("depositEntryIndex"),P("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:at,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...ar.voterStakeRegistryWithdraw,...g]);return new Ee({keys:b,programId:o,data:h})}function Vm(o,e,t,n,r,i){let s=_([D("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 Ee({keys:a,programId:o,data:c})}function Em(o,e,t,n,r,i,s,a){let c=_([D("voterBump"),D("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:tt,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let d=Buffer.from([...ar.voterStakeRegistryCreateVoter,...l]);return new Ee({keys:u,programId:o,data:d})}function vm(o,e,t,n,r,i,s,a,c,u,l,d){let m=_([D("depositEntryIndex"),D("kind"),D("option"),P("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:at,isSigner:!1,isWritable:!1},{pubkey:Lm,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(m.span);m.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:d},y);let f=Buffer.from([...ar.voterStakeRegistryCreateDepositEntry,...y]);return new Ee({keys:p,programId:o,data:f})}async function RA({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Li(n,r,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),d=await o.getAccountInfo(l);if(d===null)throw Error("user is not staker");let m=rr.decode(d.data),p=m.deposited.sub(m.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new go(0)))throw Error("user do not has new stake amount");let y=Oi(e,a).publicKey,f=Ni(e,a).publicKey,{publicKey:b,nonce:g}=Mi(n,u,s),h=be(b,y,c).publicKey,{publicKey:A,nonce:k}=_i(n,u,s),T=Vi(t,r,i,s).publicKey,I=[],S=be(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&I.push(Rm(s,S,s,y)),await o.getAccountInfo(b)===null){let U=Vm(t,r,s,i,s,T);I.push(U,Em(n,u,b,A,s,s,g,k))}let{index:x,isInit:L}=await vi(o,u,b,y);return L||I.push(vm(n,u,b,h,s,s,y,x,0,void 0,0,!1)),I.push(Nm(n,u,b,h,S,s,l,a,y,f,e,x,p),Mm(n,u,b,A)),I}async function LA({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Li(n,r,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),d=await o.getAccountInfo(l);if(d===null)throw Error("user is not staker");let m=rr.decode(d.data);if(m.voteLockedBalance.eq(new go(0)))throw Error("user has vote locked balance = 0");let p=Oi(e,a).publicKey,y=Ni(e,a).publicKey,{publicKey:f}=Mi(n,u,s),b=be(f,p,c).publicKey,{publicKey:g}=_i(n,u,s),h=Vi(t,r,i,s).publicKey,A=[],{index:k,isInit:T}=await vi(o,u,f,p);if(!T)throw Error("deposit entry index check error");return A.push(_m(n,u,f,s,h,g,b,be(s,p,c).publicKey,l,a,p,y,e,k,m.voteLockedBalance)),A}function Fi({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Si.span);Si.encode({instruction:3,rewardReopenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardPerSecond:H(r.perSecond)},i);let s=[w({pubkey:at,isWritable:!1}),w({pubkey:n.id}),w({pubkey:n.lpVault,isWritable:!1}),w({pubkey:e}),w({pubkey:t}),w({pubkey:o,isWritable:!1,isSigner:!0})];return new Ee({programId:n.programId,keys:s,data:i})}function Di({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Ki.span);Ki.encode({instruction:4,isSet:new go(1),rewardPerSecond:H(r.perSecond),rewardOpenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardType:H(tn[r.rewardType])},i);let s=[...Zo,w({pubkey:t.id}),w({pubkey:t.authority,isWritable:!1}),w({pubkey:r.mint,isWritable:!1}),w({pubkey:n}),w({pubkey:e}),w({pubkey:o,isWritable:!1,isSigner:!0})];return new Ee({programId:t.programId,keys:s,data:i})}function OA(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,d]=[new ie(e.programId),new ie(e.id)],m=Qe({programId:l,poolId:d,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:c},p);let y=n===6?[w({pubkey:at,isWritable:!1}),...u?[w({pubkey:cn.programId,isWritable:!1})]:[],w({pubkey:d}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:new ie(t.lpVault)}),w({pubkey:m}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:r})]:[w({pubkey:d}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:m}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:r}),w({pubkey:new ie(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new ie(t.rewardInfos[0].vault)}),w({pubkey:sr,isWritable:!1}),w({pubkey:at,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(w({pubkey:i[f]})),y.push(w({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(w({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(w({pubkey:i[f]}));return new Ee({programId:l,keys:y,data:p})}function ur(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($e.span);$e.encode({instruction:2,amount:H(s)},l);let d=[w({pubkey:at,isWritable:!1}),w({pubkey:c}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:new ie(t.lpVault)}),w({pubkey:u}),w({pubkey:i,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)d.push(w({pubkey:new ie(t.rewardInfos[m].vault)})),d.push(w({pubkey:r[m]}));return new Ee({programId:a,keys:d,data:l})}function cr(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}),d=Buffer.alloc($e.span);$e.encode({instruction:12,amount:H(s)},d);let m=[w({pubkey:u}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:i,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ie(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new ie(t.rewardInfos[0].vault)}),w({pubkey:sr,isWritable:!1}),w({pubkey:at,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(w({pubkey:r[p]})),m.push(w({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(w({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}function lr(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}),d=Buffer.alloc($e.span);$e.encode({instruction:11,amount:H(s)},d);let m=[w({pubkey:u}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:i,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ie(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new ie(t.rewardInfos[0].vault)}),w({pubkey:sr,isWritable:!1}),w({pubkey:at,isWritable:!1})];if(a)for(let p of a)m.push(w({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}function Ya(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}),d=Buffer.alloc($e.span);$e.encode({instruction:10,amount:H(s)},d);let m=[w({pubkey:u}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:i,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ie(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new ie(t.rewardInfos[0].vault)}),w({pubkey:sr,isWritable:!1}),w({pubkey:at,isWritable:!1})];if(a)for(let p of a)m.push(w({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}function Qa(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}),d=Buffer.alloc($e.span);$e.encode({instruction:11,amount:H(s)},d);let m=[w({pubkey:u}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:i,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ie(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new ie(t.rewardInfos[0].vault)}),w({pubkey:sr,isWritable:!1}),w({pubkey:at,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(w({pubkey:r[p]})),m.push(w({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(w({pubkey:p}));return new Ee({programId:c,keys:m,data:d})}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($e.span);$e.encode({instruction:1,amount:H(s)},l);let d=[w({pubkey:at,isWritable:!1}),w({pubkey:cn.programId,isWritable:!1}),w({pubkey:c}),w({pubkey:new ie(t.authority),isWritable:!1}),w({pubkey:new ie(t.lpVault)}),w({pubkey:u}),w({pubkey:i,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)d.push(w({pubkey:new ie(t.rewardInfos[m].vault)})),d.push(w({pubkey:r[m]}));return new Ee({programId:a,keys:d,data:l})}var mr=class extends Be{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:Ei(F(R({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:r=Hn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new he(e.lpMint.address),lockInfo:{lockMint:Fa,lockVault:Da},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Ye({fromPublicKey:u,programId:a.programId}),d=await this.scope.connection.getMinimumBalanceForRentExemption(nr.span);c.addInstruction({instructions:[Dm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:d,space:nr.span,programId:a.programId})]});let{publicKey:m,nonce:p}=Ua({programId:new he(a.programId),poolId:l.publicKey}),y=ir({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let T of a.rewardInfos){T.openTime>=T.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",T.openTime.toString()),isNaN(tn[T.rewardType])&&this.logAndCreateError("rewardType error",T.rewardType),Number(T.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",T.perSecond),f.push(Ga(T));let{rewardPubKey:I,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:T,payer:u});S&&c.addInstruction(S),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=T.mint.equals(Ne)?new he(Me.address):T.mint;b.push({rewardMint:B,rewardVault:ir({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:I})}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:A,instructionType:k}=Xa({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:m,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:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:m,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=pt[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)),d=s.rewardInfos[l];d||this.logAndCreateError("configuration does not exist","rewardMint",u);let m=(b=d.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:[Fi({payer:this.scope.ownerPubKey,rewardVault:m,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=pt[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(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let d of n){let m=d.mint.equals(Ne)?new he(Me.address):d.mint,p=a.rewardInfos.findIndex(A=>new he(A.mint.address).equals(m)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",m);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:d,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Fi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:d});u.addInstruction({instructions:[h],instructionTypes:[E.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=pt[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,d=ir({programId:new he(n.programId),poolId:new he(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:m,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),m||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[Di({payer:this.scope.ownerPubKey,userRewardTokenPub:m,farmKeys:a,rewardVault:d,rewardInfo:r})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=pt[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 d=l.mint.equals(Ne)?new he(Me.address):l.mint,m=ir({programId:new he(n.programId),poolId:new he(n.id),mint:d,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=Di({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:m,rewardInfo:F(R({},l),{mint:d})});u.addInstruction({instructions:[f],instructionTypes:[E.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:d,programId:m}=n,p=pt[m];Ci(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 A={};for(let v of this.scope.account.tokenAccounts)if(a){let Z=be(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&Z.equals(v.publicKey)&&(A[v.mint.toString()]=v.publicKey)}else A[v.mint.toString()]=v.publicKey;let k=b.lpMint,T=A[k.address];T||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let v of d){let Z=s&&v.mint.address===J.toString(),$=A[v.mint.address];if(!$){let{account:W,instructionParams:mt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new he(v.mint.address),notUseTokenAccount:Z,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:c});$=W,mt&&h.addInstruction(mt)}A[v.mint.address]=$,I.push($)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=Cn(p).decode(B.data)),n.programId!==Hn.toString()&&!S){let{instruction:v,instructionType:Z}=wo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[v],instructionTypes:[Z]})}let C=Ri({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:I});C&&this.logAndCreateError(C);let x={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:u==null?void 0:u.map(v=>new he(v))},L=p===6?ja(x):p===5?Qa(x):Ya(x),U={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[U[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:d}=e,{rewardInfos:m}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=pt[n.programId];Ci(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(d);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=be(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=Qe({programId:new he(n.programId),poolId:new he(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);x||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x}),Cn(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===J.toString(),A=b[g.toString()];if(!A){let{account:C,instructionParams:x}=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});A=C,x&&f.addInstruction(x)}b[g.toString()]=A;let k=[];for(let C of m){let x=s&&C.mint.address===J.toString(),L=b[C.mint.address];if(!L){let{account:U,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new he(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});L=U,v&&f.addInstruction(v)}b[C.mint.address]=L,k.push(L)}let T=Ri({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:k});T&&this.logAndCreateError(T);let I={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new he(C))},S=p===6?ur(I):p===5?cr(I):lr(I),B={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=pt[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:Ei(F(R({},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:[Fm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:d,instructionType:m}=za({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[d],instructionTypes:[m]}).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(),d={};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)&&(d[y.mint.toString()]=y.publicKey)}else d[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(R({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=pt[f],k=b.address,T=n&&k===J.toString(),I=d[k];if(!I){let{account:U,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new he(k),notUseTokenAccount:T,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:i,checkCreateATAOwner:s});I=U,v&&l.addInstruction(v)}d[k.toString()]=I;let S=[];for(let U of g){let v=n&&U.mint.address===J.toString(),Z=d[U.mint.address];if(!Z){let{account:$,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:U.mint.programId,mint:new he(U.mint.address),notUseTokenAccount:v,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:i,checkCreateATAOwner:s});Z=$,W&&l.addInstruction(W)}d[U.mint.address]=Z,S.push(Z)}let B=p[h],C={amount:dt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:I,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(U=>new he(U))},x=A===6?ur(C):A===5?cr(C):lr(C),L={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[L[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as Le}from"@solana/web3.js";import{AccountLayout as Bd,NATIVE_MINT as Mu,TOKEN_PROGRAM_ID as Ko}from"@solana/spl-token";var tP=_([ze("mintAuthorityOption"),K("mintAuthority"),P("supply"),D("decimals"),D("isInitialized"),ze("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Wm}from"@solana/web3.js";import{MintLayout as Ha,TOKEN_PROGRAM_ID as qm}from"@solana/spl-token";var mP=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new Wm(e));return!t||t.data.length!==Ha.span?void 0:Ha.decode(t.data)},dP=({mint:o,decimals:e,programId:t=qm,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}},Ao=o=>new Ie({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),dr=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=xe(i,["amount","isRaw","name"]);return new ye(new Ie({mint:st(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function pP(o){return o.address===Ct.address?Me:o}function fP(o){return o.address===Me.address?Ct:o}var ft=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=xe(i,["address","programId","decimals"]);return R({chainId:101,address:st(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Rn=o=>o?F(R({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(R({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(R({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Nn,ASSOCIATED_TOKEN_PROGRAM_ID as nd}from"@solana/spl-token";import{PublicKey as ge,TransactionInstruction as Wt,SystemProgram as ou,SYSVAR_RENT_PUBKEY as rd}from"@solana/web3.js";var Wi=_([D("instruction"),P("amountIn"),P("minAmountOut")]),qi=_([D("instruction"),P("maxAmountIn"),P("amountOut")]),BP=_([D("instruction"),D("nonce")]),Ui=_([D("instruction"),D("nonce"),P("startTime")]),pr=_([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),P("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),P("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),P("lpReserve"),G(P(),3,"padding")]),Um=_([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),G(P(),64,"padding")]),Gi=_([D("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide")]),Xi=_([D("instruction"),P("amountIn")]),SP={4:pr,5:Um},Za=_([P("fee")]);import{PublicKey as Gm}from"@solana/web3.js";var On=new Gm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),mn=5e4,Xm=_([P("x"),P("y"),P("price")]),zm=_([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),G(Xm,mn,"DataElement")]);function Ym(o,e){return[0,mn-2]}function Qm(o){return[0,mn-2]}function jm(o){return[0,mn-2]}function Hm(o,e,t){let[n,r]=Ym(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,d=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===d)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<d)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function zi(o,e,t){let[n,r,i]=Hm(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),d=s*l,m=(c-s)*(e*a-s*t)*u,p=d+m;return e*o.multiplier*l/p}}function ln(o,e,t){return e*o.multiplier/t}function $a(o,e,t){return e*t/o.multiplier}function Zm(o,e){let[t,n]=Qm(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 $m(o,e){let[t,n]=jm(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 Ja(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=Zm(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,d=o.DataElement[s].price,m=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[d,p,!0,a]:[l,m,!0,a];{let y,f;return n?(y=l+(d-l)*(e-c)/(u-c),f=m-(r-c)*o.multiplier/d):(y=l+(d-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function Jm(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=$m(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,d=o.DataElement[s].price,m=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=m)return n?[d,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(d-l)*(m-e)/(m-p),f=c+d*(m-r)/o.multiplier):(y=l+(d-l)*(m-e)/(m-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function ed(o,e){let t=Ja(o,e,0,!1);return t[3]?t[0]:0}function eu(o,e,t,n){let r=zi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!0,[u,l,d,m]=Ja(o,i,a,c);if(!m)return 0;if(d)return n*o.multiplier/u;{let p=s-l;return $a(o,p,r)}}function tu(o,e,t,n){let r=zi(o,e,t),i=ln(o,e,r),s=ln(o,t,r),a=ln(o,n,r),c=!1,[u,l,d,m]=Jm(o,s,a,c);if(!m)return 0;if(d)return n*u/o.multiplier;{let p=i-l;return $a(o,p,r)}}function td(o){let e=zm.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 nu(o,e,t,n){let r=ed(o,ln(o,e,zi(o,e,t)))/o.multiplier;return n?r:1/r}var Ln=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(On);e&&(this._layoutData=td(e==null?void 0:e.data))}}};var ru=ue("Raydium_liquidity_instruction");function iu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Gi.span);Gi.encode({instruction:3,baseAmountIn:H(r),quoteAmountIn:H(i),fixedSide:s==="base"?dt:Ys},a);let c=[w({pubkey:Nn,isWritable:!1}),w({pubkey:new ge(e.id)}),w({pubkey:new ge(t.authority),isWritable:!1}),w({pubkey:new ge(t.openOrders),isWritable:!1}),w({pubkey:new ge(t.targetOrders)}),w({pubkey:new ge(e.lpMint.address)}),w({pubkey:new ge(t.vault.A)}),w({pubkey:new ge(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(w({pubkey:On})),c.push(w({pubkey:new ge(e.marketId),isWritable:!1}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:new ge(t.marketEventQueue),isWritable:!1})),new Wt({programId:new ge(e.programId),keys:c,data:a})}function Yi(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(Xi.span);Xi.encode({instruction:4,amountIn:H(r)},a);let c=[w({pubkey:Nn,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.openOrders}),w({pubkey:i.targetOrders}),w({pubkey:i.mintLp.address}),w({pubkey:i.vault.A}),w({pubkey:i.vault.B})];return s===5?c.push(w({pubkey:On})):(c.push(w({pubkey:i.id})),c.push(w({pubkey:i.id}))),c.push(w({pubkey:i.marketProgramId,isWritable:!1}),w({pubkey:i.marketId}),w({pubkey:i.marketBaseVault}),w({pubkey:i.marketQuoteVault}),w({pubkey:i.marketAuthority,isWritable:!1}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:i.marketEventQueue}),w({pubkey:i.marketBids}),w({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function su({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:d,marketProgramId:m,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:T,ammConfigId:I,feeDestinationId:S}){let B=_([D("instruction"),D("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),C=[{pubkey:Nn,isSigner:!1,isWritable:!1},{pubkey:nd,isSigner:!1,isWritable:!1},{pubkey:ou.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:I,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:h,openTime:A,coinAmount:k,pcAmount:T},x),{instruction:new Wt({keys:C,programId:o,data:x}),instructionType:E.AmmV4CreatePool}}function UP(o){let e=_([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new ge(o.id),isWritable:!1}),w({pubkey:new ge(o.authority),isWritable:!1}),w({pubkey:new ge(o.openOrders),isWritable:!1}),w({pubkey:new ge(o.vault.A),isWritable:!1}),w({pubkey:new ge(o.vault.B),isWritable:!1}),w({pubkey:new ge(o.mintLp.address),isWritable:!1}),w({pubkey:new ge(o.marketId),isWritable:!1}),w({pubkey:new ge(o.marketEventQueue),isWritable:!1})];return new Wt({programId:new ge(o.programId),keys:n,data:t})}function od({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=ke(o),s=Buffer.alloc(Wi.span);Wi.encode({instruction:9,amountIn:H(t),minAmountOut:H(n)},s);let a=[w({pubkey:Nn,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.openOrders})];return r===4&&a.push(w({pubkey:i.targetOrders})),a.push(w({pubkey:i.vault.A}),w({pubkey:i.vault.B})),r===5&&a.push(w({pubkey:On})),a.push(w({pubkey:i.marketProgramId,isWritable:!1}),w({pubkey:i.marketId}),w({pubkey:i.marketBids}),w({pubkey:i.marketAsks}),w({pubkey:i.marketEventQueue}),w({pubkey:i.marketBaseVault}),w({pubkey:i.marketQuoteVault}),w({pubkey:i.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function id({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=ke(o),s=Buffer.alloc(qi.span);qi.encode({instruction:11,maxAmountIn:H(t),amountOut:H(n)},s);let a=[w({pubkey:Nn,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.openOrders}),w({pubkey:i.targetOrders}),w({pubkey:i.vault.A}),w({pubkey:i.vault.B})];return r===5&&a.push(w({pubkey:On})),a.push(w({pubkey:i.marketProgramId,isWritable:!1}),w({pubkey:i.marketId}),w({pubkey:i.marketBids}),w({pubkey:i.marketAsks}),w({pubkey:i.marketEventQueue}),w({pubkey:i.marketBaseVault}),w({pubkey:i.marketQuoteVault}),w({pubkey:i.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function Po(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 od(F(R({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return id(F(R({},a),{maxAmountIn:r,amountOut:i}),t);ru.logWithError("invalid params","params",o)}throw ru.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function GP({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Ui.span);Ui.encode({instruction:0,nonce:5,startTime:H(t)},n);let r=ke(o),i=[w({pubkey:Nn,isWritable:!1}),w({pubkey:ou.programId,isWritable:!1}),w({pubkey:rd,isWritable:!1}),w({pubkey:r.id}),w({pubkey:r.authority,isWritable:!1}),w({pubkey:r.openOrders}),w({pubkey:r.mintLp.address}),w({pubkey:r.mintA.address,isWritable:!1}),w({pubkey:r.mintB.address,isWritable:!1}),w({pubkey:r.vault.A,isWritable:!1}),w({pubkey:r.vault.B,isWritable:!1}),w({pubkey:r.id}),w({pubkey:r.targetOrders}),w({pubkey:e.lpTokenAccount}),w({pubkey:r.id,isWritable:!1}),w({pubkey:r.marketProgramId,isWritable:!1}),w({pubkey:r.marketId,isWritable:!1}),w({pubkey:e.payer,isSigner:!0})];return new Wt({programId:r.programId,keys:i,data:n})}function au({poolKeys:o}){let e=_([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new ge(o.id),isWritable:!1}),w({pubkey:new ge(o.authority),isWritable:!1}),w({pubkey:new ge(o.openOrders),isWritable:!1}),w({pubkey:new ge(o.vault.A),isWritable:!1}),w({pubkey:new ge(o.vault.B),isWritable:!1}),w({pubkey:new ge(o.mintLp.address),isWritable:!1}),w({pubkey:new ge(o.marketId),isWritable:!1}),w({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 nn,ASSOCIATED_TOKEN_PROGRAM_ID as Iu}from"@solana/spl-token";import{PublicKey as q,TransactionInstruction as Bt,SystemProgram as Mn,Keypair as ts}from"@solana/web3.js";import xu from"bn.js";import bd from"bn.js";function uu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function zP(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function YP(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function ho(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Qi(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 fr(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function cu(o,e){return fr(o,e)?null:Qi(o,e)}function lu(o,e){return fr(o,e)?null:ji(o,e)}var sd=Buffer.from("amm_config","utf8"),ad=Buffer.from("pool","utf8"),ud=Buffer.from("pool_vault","utf8"),cd=Buffer.from("pool_reward_vault","utf8"),mu=Buffer.from("position","utf8"),ld=Buffer.from("tick_array","utf8"),md=Buffer.from("operation","utf8"),dd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function ZP(o,e){return se([sd,uu(e)],o)}function du(o,e,t,n){return se([ad,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Hi(o,e,t){return se([ud,e.toBuffer(),t.toBuffer()],o)}function pu(o,e,t){return se([cd,e.toBuffer(),t.toBuffer()],o)}function we(o,e,t){return se([ld,e.toBuffer(),ho(t)],o)}function dn(o,e,t,n){return se([mu,e.toBuffer(),ho(t),ho(n)],o)}function yt(o,e){return se([mu,e.toBuffer()],o)}function ko(o){return se([Buffer.from("metadata","utf8"),xn.toBuffer(),o.toBuffer()],xn)}function yr(o){return se([md],o)}function ut(o,e){return se([dd,e.toBuffer()],o)}import bt from"bn.js";var de=new bt(0),ct=new bt(1),qt=new bt(-1),lt=new bt(1).shln(64),To=new bt(1).shln(128),Zi=lt.sub(ct),br=64,fu=To.subn(1),je=-443636,Je=-je,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),Io=new bt("4295048017"),xo=new bt("79226673521066979257578248090"),yu=16,bu="59543866431248",gu="184467440737095516",wu="15793534762490258745",Bo=new bt(10).pow(new bt(6)),pd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(pd||{}),eh={[500]:10,[3e3]:60,[1e4]:200},th={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},Au={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:[]},nh=new bt("18446744073700000000");var fd=15,le=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=Q.getTickArrayStartIndexByTick(r,i),l=Q.getInitializedTickArrayInRange(s,a,i,u,Math.floor(fd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);c.push(y)}let d=(await ht(e,c)).map(p=>p!==null?gr.decode(p.data):null),m={};for(let p=0;p<c.length;p++){let y=d[p];y!==null&&(m[y.startTickIndex]=F(R({},y),{address:c[p]}))}return m}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=Q.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:d,tickArrayAddress:m,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[d,m,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?Q.searchLowBitFromStart(r,i,s-1,1,t):Q.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}=we(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=Q.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 m=u.ticks[c];if(m.liquidityGross.gtn(0)){l=m;break}c=c-1}else for(c=c+1;c<_e;){let m=u.ticks[c];if(m.liquidityGross.gtn(0)){l=m;break}c=c+1}let{publicKey:d}=we(e,t,a);return{initializedTick:l,tickArrayAddress:d,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Q.checkIsOutOfBoundary(e)){if(e>Je)return!1;let n=Q.getTickArrayStartIndexByTick(je,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return _e*e}};import oe from"bn.js";import{PublicKey as xt}from"@solana/web3.js";import Ke from"bn.js";var $i=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),d=cu(1024,l);if(d!==null){let m=(u-d-512)*a;return{isInit:!0,tickIndex:m}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),d=lu(1024,l);if(d!==null){let m=(u+d-512)*a;return{isInit:!0,tickIndex:m}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},wr=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(Je<=t)throw Error(`extensionTickBoundary check error: ${Je}, ${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:Q.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=Q.mergeTickArrayBitmap(e).shln(pn-1-a),u=fr(512,c)?null:Qi(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=Q.mergeTickArrayBitmap(e).shrn(a),u=fr(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 Ar=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,lt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),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,lt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),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),d=ne.mulDivFloor(l,t.liquidity,lt),m=u.rewardAmountOwed.add(d);i.push(m)}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),d=ne.mulDivFloor(l,t.liquidity,lt),m=u.rewardAmountOwed.add(d);i.push(m)}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,A;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,d=ce.getAmountsFromLiquidity(a,c,u,n,i),[m,p]=[Pe(d.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Pe(d.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Pe(new _t(new V(d.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),Pe(new _t(new V(d.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:m,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(m.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Pu}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:d}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!d)throw new Error("Invalid tick array");c.push(d);let{allTrade:m,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:m,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}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:d,accounts:m,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(...m),{expectedAmountIn:d,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?wr.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(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}=we(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),r=t?Q.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Q.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(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=wr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<je||t>Je)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 d=i[l],m=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(d.tokenMint))==null?void 0:c.owner;if(m===void 0)throw Error("get new reward mint info error");let p=F(R({},d),{perSecond:ne.x64ToDecimal(d.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new xt(m)});if(p.tokenMint.equals(xt.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,lt),A=p.rewardTotalEmissioned.add(h);s.push(F(R({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=Q.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>Je&&(t=le.getArrayStartIndex(Je,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 Ve(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=hu.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=Q.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Q.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let d of l){let{publicKey:m}=we(c.programId,c.id,d);i.push({pubkey:m}),r[m.toString()]=c.id}}let s=await Ve(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=gr.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(R({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest: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(m=>m.accountInfo.mint),u=[];for(let m of c)for(let p of s)u.push(yt(p,m).publicKey);let l=await ht(t,u,{batchRequest:r}),d={};for(let m of l){if(m===null)continue;let p=So.decode(m.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),T=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:A,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(B=>F(R({},B),{pendingReward:new Ke(0)})),leverage:T,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let I=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);d[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=I,d[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let m=Object.values(d),p=await ht(t,m,{batchRequest:r}),y={};for(let f=0;f<m.length;f++){let b=p[f];if(b===null)continue;let g=m[f].toString();y[g]=gr.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}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[d[h].toString()],T=y[d[A].toString()],I=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=T.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await Ar.GetPositionFees(f,g,I,S),x=await Ar.GetPositionRewards(f,g,I,S);g.tokenFeeAmountA=B.gte(new Ke(0))?B:new Ke(0),g.tokenFeeAmountB=C.gte(new Ke(0))?C:new Ke(0);for(let L=0;L<x.length;L++)g.rewardInfos[L].pendingReward=x[L].gte(new Ke(0))?x[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 U;let u,l=n.toBase58()===e.mintA.address,[d,m]=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,d,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((U=p.fee)!=null?U:de),u,c),A=Pe(f,m,r,!1),k=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=l?k:new V(1).div(k),I=f.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=Pe(I,m,r,!1),B=l?e.currentPrice:new V(1).div(e.currentPrice),C=new V(T).sub(B).abs(),x=B,L=new Ze(new V(C).mul(10**15).toFixed(0),new V(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:Rt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:T,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],[d,m]=[new Ie(F(R({},u),{mint:u.address,isToken2022:u.programId===Pu.toBase58()})),new Ie(F(R({},l),{mint:l.address,isToken2022:l.programId===Pu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:T,remainingAccounts:I,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new xt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),B=F(R({},y),{amount:new ye(d,y.amount),fee:y.fee===void 0?void 0:new ye(d,y.fee)}),C=F(R({},f),{amount:new ye(m,f.amount),fee:f.fee===void 0?void 0:new ye(m,f.fee)}),x=F(R({},b),{amount:new ye(m,b.amount),fee:b.fee===void 0?void 0:new ye(m,b.fee)}),L=new nt({baseToken:d,denominator:new Ke(10).pow(new Ke(20+d.decimals)),quoteToken:m,numerator:h.mul(new V(10**(20+m.decimals))).toFixed(0)}),U=new nt({baseToken:d,denominator:new Ke(10).pow(new Ke(20+d.decimals)),quoteToken:m,numerator:A.mul(new V(10**(20+m.decimals))).toFixed(0)}),v=new ye(d,T);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:L,executionPrice:U,priceImpact:k,fee:v,remainingAccounts:I,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=Q.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Q.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,d=a-s,m=i.priceMax-i.priceMin,p;return l<=0?p=0:d===l?p=m/l:m===l?p=l/d:p=l/m*(l/d),{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],d=r[st(e.mintA.address).toString()],m=r[st(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!d||!m)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:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:T}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),I=new V(h.toString()).div(new V(10).pow(p)).mul(d.value).add(new V(A.toString()).div(new V(10).pow(y)).mul(m.value)),S=new V(k.toString()).div(new V(10).pow(p)).mul(d.value).add(new V(T.toString()).div(new V(10).pow(y)).mul(m.value)),B=S.div(I.add(S)).div(S),x=new V(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),L=3600*24*365,U=e.rewardDefaultInfos.map(v=>{var W,mt;let Z=v.mint.decimals,$=r[v.mint.address];return c<((W=v.startTime)!=null?W:0)||c>((mt=v.endTime)!=null?mt:0)||!v.perSecond||!$||Z===void 0?0:new V($.value).mul(new V(v.perSecond).mul(L)).div(new V(10).pow(Z)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:U,apr:x+U.reduce((v,Z)=>v+Z,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),d=te.getSqrtPriceX64FromTick(n),m=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(d))b=t?ce.getLiquidityFromTokenAmountA(d,m,f,!a):new Ke(0);else if(l.lte(m)){let A=ce.getLiquidityFromTokenAmountA(l,m,f,!a),k=ce.getLiquidityFromTokenAmountB(d,l,f);b=t?A:k}else b=t?new Ke(0):ce.getLiquidityFromTokenAmountB(d,m,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,A;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,d=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new V(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[m,p]=[Pe(d.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Pe(d.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Pe(d.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),Pe(d.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:m,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(m.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new xt(c.id));(await ht(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=yn.decode(c.data))});let s=t.map(c=>ut(new xt(c.programId),new xt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(R({},c),{[u.id]:F(R({},n[u.id]),{id:new xt(u.id),version:6,programId:new xt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(R({},u.config),{id:new xt(u.config.id),fundOwner:""}),currentPrice:new V(u.price),exBitmapInfo:a[ut(new xt(u.programId),new xt(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 Wh({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var A,k,T,I;let[u,l,d,m]=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(d,(A=o.mintA.extensions)==null?void 0:A.feeConfig,a,!c),Pe(m,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((T=b.fee)!=null?T:de),g.amount.sub((I=g.fee)!=null?I:de));return ce.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}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(ct)),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(ct)).div(n)}static x64ToDecimal(e,t){return new V(e.toString()).div(V.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(V.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(To).sub(t).mod(To)}};function ve(o,e){return Ji(o.mul(e),64,256)}function yd(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ji(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(br);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,ct,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(br);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,ct,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>Je)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new oe("18445821805675395072"):new oe("18446744073709551616");return(t&2)!=0&&(n=ve(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=ve(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=ve(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=ve(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=ve(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=ve(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=ve(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=ve(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=ve(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=ve(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=ve(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=ve(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=ve(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=ve(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=ve(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=ve(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=ve(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=ve(n,new oe("37481735321082"))),e>0&&(n=fu.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 oe(t-64),r=yd(n,32,128),i=new oe("8000000000000000","hex"),s=0,a=new oe(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new oe(0))&&s<yu;){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),d=r.add(u).mul(new oe(bu)),m=Ji(d.sub(new oe(gu)),64,128).toNumber(),p=Ji(d.add(new oe(wu)),64,128).toNumber();return m==p?m:te.getSqrtPriceX64FromTick(p).lte(e)?p:m}},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(br),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),ct,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),lt):ne.mulDivFloor(n,t.sub(e),lt)}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,ct,Zi):a.shrn(br)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Zi,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 oe(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 oe(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,d=new oe(new V(c.toString()).mul(l).toFixed(0)),m=new oe(new V(u.toString()).mul(l).toFixed(0));return{amountSlippageA:d,amountSlippageB:m}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,A,k,T;let u=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),d=te.getSqrtPriceX64FromTick(n),m=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,d,r,s),[y,f]=[Pe(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),Pe(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[Pe(new oe(new V(p.amountA.toString()).mul(m).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),Pe(new oe(new V(p.amountB.toString()).mul(m).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.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,d,m,p,y,f=!1){if(m.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(ct):Mt.sub(ct)),s){if(y.lt(Nt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(d))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(d))throw new Error("sqrtPriceX64 must greater than current")}let b=m.gt(de),g={amountSpecifiedRemaining:m,amountCalculated:de,sqrtPriceX64:d,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new oe(0)},h=p,A=n[p],k=0,T=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let I={};I.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(A,g.tick,l,s,T),B=S||null,C=null;if(!(B!=null&&B.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:U}=we(e,t,h);C=U,A=n[h];try{B=Q.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}I.tickNext=B.tick,I.initialized=B.liquidityGross.gtn(0),p!==h&&C&&(g.accounts.push(C),p=h),I.tickNext<je?I.tickNext=je:I.tickNext>Je&&(I.tickNext=Je),I.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(I.tickNext);let x;if(s&&I.sqrtPriceNextX64.lt(y)||!s&&I.sqrtPriceNextX64.gt(y)?x=y:x=I.sqrtPriceNextX64,[g.sqrtPriceX64,I.amountIn,I.amountOut,I.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(I.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(I.amountIn.add(I.feeAmount)),g.amountCalculated=g.amountCalculated.sub(I.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(I.amountOut),g.amountCalculated=g.amountCalculated.add(I.amountIn.add(I.feeAmount))),g.sqrtPriceX64.eq(I.sqrtPriceNextX64)){if(I.initialized){let L=B.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}T=I.tickNext!=g.tick&&!s&&A.startTickIndex===I.tickNext,g.tick=s?I.tickNext-1:I.tickNext}else if(g.sqrtPriceX64!=I.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);T=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:I,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==I&&(g.accounts.push(we(e,t,I).publicKey),p=I)}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 oe(0),amountIn:new oe(0),amountOut:new oe(0),feeAmount:new oe(0)},a=e.gte(t),c=r.gte(de);if(c){let l=ne.mulDivFloor(r,Bo.sub(new oe(i.toString())),Bo);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 oe(i),Bo.sub(new oe(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var _e=60,pn=512,Q=class{static getTickArrayAddressByTick(e,t,n,r){let i=Q.getTickArrayStartIndexByTick(n,r),{publicKey:s}=we(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Q.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 bd(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[...Q.searchLowBitFromStart(e,t,s-1,i,n),...Q.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Q.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=we(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Q.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=>Q.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>Je}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 ku=_([fe(8),D("bump"),Lt("index"),K(""),ze("protocolFeeRate"),ze("tradeFeeRate"),Lt("tickSpacing"),G(P(),8,"")]),gd=_([ze("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),G(Y(),1,"")]),es=_([fe(8),Ue("initialized"),K("poolId"),G(gd,1e3,"observations"),G(Y(),5,"")]),wd=_([D("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),Y("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),yn=_([fe(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),Lt("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),qe("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),D("status"),G(D(),7,""),G(wd,3,"rewardInfos"),G(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),G(P(),15*4-3,"padding")]),Ad=_([Y("growthInsideLastX64"),P("rewardAmountOwed")]),So=_([fe(8),D("bump"),K("nftMint"),K("poolId"),qe("tickLower"),qe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),G(Ad,3,"rewardInfos"),G(P(),8,"")]),mk=_([fe(8),D("bump"),K("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),G(Y(),3,"rewardGrowthInside"),G(P(),8,"")]),Pd=_([qe("tick"),Ia("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),G(Y(),3,"rewardGrowthsOutsideX64"),G(ze(),13,"")]),gr=_([fe(8),K("poolId"),qe("startTickIndex"),G(Pd,_e,"ticks"),D("initializedTickCount"),G(D(),115,"")]),Tu=_([fe(329),G(K(),100,"whitelistMints")]),hu=_([fe(8),K("poolId"),G(G(P(),8),$i,"positiveTickArrayBitmap"),G(G(P(),8),$i,"negativeTickArrayBitmap")]);var Bu=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,d,m,p,y){let f=_([Y("sqrtPriceX64"),P("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:m,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,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 Bt({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,d=Ye({fromPublicKey:r,programId:n}),[m,p]=[new q(i.address),new q(s.address)],y=[Mn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:d.seed,newAccountPubkey:d.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(es.span),space:es.span,programId:n})],{publicKey:f}=du(n,a,m,p),{publicKey:b}=Hi(n,f,m),{publicKey:g}=Hi(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,d.publicKey,m,b,new q(i.programId||Ge),p,g,new q(s.programId||Ge),ut(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:f,observationId:d.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,A,k,T,I,S,B,C,x){let L=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Y("liquidity"),P("amountMaxA"),P("amountMaxB"),Ue("withMetadata"),D("optionBaseFlag"),Ue("baseFlag")]),U=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],v=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Iu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...U],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:I,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},Z);let $=Buffer.from([...St.openPosition,...Z]);return new Bt({keys:v,programId:e,data:$})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let d=[],[m,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let B=ts.generate();d.push(B),y=B.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(m,p,f),{publicKey:h}=we(m,p,b),{publicKey:A}=be(n.wallet,y,Ge),{publicKey:k}=ko(y),{publicKey:T}=yt(m,y),{publicKey:I}=dn(m,p,r,i),S=this.openPositionFromLiquidityInstruction(m,n.feePayer,p,n.wallet,y,A,k,I,g,h,T,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,i,f,b,s,a,c,u);return{signers:d,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let d=[],[m,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let B=ts.generate();d.push(B),y=B.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(m,p,f),{publicKey:h}=we(m,p,b),{publicKey:A}=be(n.wallet,y,Ge),{publicKey:k}=ko(y),{publicKey:T}=yt(m,y),{publicKey:I}=dn(m,p,r,i),S=this.openPositionFromBaseInstruction(m,n.feePayer,p,n.wallet,y,A,k,I,g,h,T,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(m,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:I},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,A,k,T,I,S,B,C,x){let L=_([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Y("liquidity"),P("amountMaxA"),P("amountMaxB"),Ue("withMetadata"),D("optionBaseFlag"),Ue("baseFlag")]),U=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],v=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Iu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...U],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new xu(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:I==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let $=Buffer.from([...St.openPosition,...Z]);return new Bt({keys:v,programId:e,data:$})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let d,m=[];if(l)d=new q((await l(1))[0]);else{let B=ts.generate();m.push(B),d=B.publicKey}let[p,y]=[new q(e.programId),new q(e.id)],f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:h}=we(p,y,b),{publicKey:A}=be(n.wallet,d,Ge),{publicKey:k}=ko(d),{publicKey:T}=yt(p,d),{publicKey:I}=dn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,d,A,k,I,g,h,T,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(t.mintA.address),new q(t.mintB.address),r,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(p,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:I},instructions:[S],signers:m,instructionTypes:[E.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:Mn.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 Bt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new q(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:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h){let A=_([Y("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ue("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],T=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let S=Buffer.from([...St.increaseLiquidity,...I]);return new Bt({keys:T,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:m}=we(c,u,l),{publicKey:p}=we(c,u,d),{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,m,p,r.tokenAccountA,r.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,d])?ut(c,u).publicKey:void 0);return{address:{tickArrayLower:m,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:m}=we(c,u,l),{publicKey:p}=we(c,u,d),{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:m,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,m,p,r.tokenAccountA,r.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,d])?ut(c,u).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h){let A=_([Y("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ue("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],T=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],I=Buffer.alloc(A.span);A.encode({liquidity:new xu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let S=Buffer.from([...St.increaseLiquidity,...I]);return new Bt({keys:T,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,A){let k=_([Y("liquidity"),P("amountMinA"),P("amountMinB")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let B=Buffer.from([...St.decreaseLiquidity,...S]);return new Bt({keys:I,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new q(e.programId),new q(e.id)],d=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,d),{publicKey:y}=we(u,l,m),{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 q(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new q(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),h,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,m])?ut(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g){let h=_([P("amount"),P("otherAmountThreshold"),Y("sqrtPriceLimitX64"),Ue("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...d.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:m,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:nn,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],T=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},T);let I=Buffer.from([...St.swap,...T]);return new Bt({keys:k,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,d]=[new q(e.programId),new q(e.id)],[m,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,r.wallet,d,new q(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?m:p,b?p:m,b?y:f,b?f:y,u,n,s,a,c,!0,ut(l,d).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,d,m){let p=_([P("openTime"),P("endTime"),Y("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:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:H(l),endTime:H(d),emissionsPerSecondX64:m},f);let b=Buffer.from([...St.initReward,...f]);return new Bt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new q(e.programId),new q(e.id)],a=pu(i,s,r.mint).publicKey,c=yr(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new q(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:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,d,m){let p=_([D("rewardIndex"),Y("emissionsPerSecondX64"),P("openTime"),P("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:nn,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:m,openTime:H(l),endTime:H(d)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new Bt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new q(e.programId),new q(e.id)],a,c,u;for(let m=0;m<e.rewardDefaultInfos.length;m++)e.rewardDefaultInfos[m].mint.address===r.mint.toString()&&(a=m,c=new q(t.rewardInfos[m].vault),u=new q(t.rewardInfos[m].mint.address));(a===void 0||c===void 0)&&Bu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=yr(i).publicKey,d=[this.setRewardInstruction(i,n.wallet,s,l,new q(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:d,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=_([D("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:nn,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let d=Buffer.from([...St.collectReward,...l]);return new Bt({keys:u,programId:e,data:d})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new q(e.programId),new q(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,c=new q(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Bu.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:[E.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 q(e.programId),new q(e.id)],[d,m]=[new q(t.vault.A),new q(t.vault.B)],[p,y]=[new q(e.mintA.address),new q(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(u,n.wallet,l,new q(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?m:d,f?d:m,f?p:y,f?y:p,c,d,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Lu}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Id}from"@solana/spl-token";import{PublicKey as kd}from"@solana/web3.js";import Su from"bn.js";var Ku=new Su(25),Cu=new Su(1e4),hd={4:3,5:3};var Td=ue("Raydium_liquidity_serum");function Ru({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=kd.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw Td.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 Pr from"bn.js";function os({programId:o}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function gn({name:o,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function xd({programId:o,marketId:e}){let{publicKey:t}=se([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function is({programId:o}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Ou({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:d,nonce:m}=is({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=xd({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:A}=Ru({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:d,nonce:m,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Lu.default,configId:os({programId:a})}}var ns;async function Uk({connection:o,poolKeysList:e,config:t}){ns||(ns=new Ln({connection:o}),await ns.initStableModelLayout());let n=e.map(s=>au({poolKeys:s}));return(await ta(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=na(s,"GetPoolData"),c=new Pr(Ft(a,"status")),u=Number(Ft(a,"coin_decimals")),l=Number(Ft(a,"pc_decimals")),d=Number(Ft(a,"lp_decimals")),m=new Pr(Ft(a,"pool_coin_amount")),p=new Pr(Ft(a,"pool_pc_amount")),y=new Pr(Ft(a,"pool_lp_supply")),f="0";try{f=Ft(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:d,baseReserve:m,quoteReserve:p,lpSupply:y,startTime:new Pr(f)}})}var rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Nu=o=>{let e={},t=Id.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:ft({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:ft({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new V(r.baseReserve.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new V(r.quoteReserve.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:rs,week:rs,month:rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Lu.default.toBase58(),lpPrice:0,lpAmount:0,lpMint:ft({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import it from"bn.js";var hr=class extends Be{constructor(t){super(t);this.stableLayout=new Ln({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 it(new V(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Ao(t[i?"mintB":"mintA"]),[c,u]=[new it(new V(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new it(new V(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new it(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 d=i?"base":"quote";this.logDebug("input side:",d);let m=dt;s.isZero()||(m=d==="base"?jr(s.mul(u),c):jr(s.mul(c),u)),this.logDebug("amountRaw:",m.toString(),"lpAmount:",l.toString());let p=jr(s.mul(l),d==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Ze(new it(1)).add(r).mul(m).quotient,b=new ye(a,m),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,amountInA:r,amountInB:i,fixedSide:s,config:a,txVersion:c,computeBudgetConfig:u}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",i),(r.isZero()||i.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:i.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:m}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[p,y]=[r.token,i.token],f=await l.getCreatedTokenAccount({mint:p.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new Le(n.lpMint.address)}),h=[p,y],A=[f,b],k=[r.raw,i.raw],T=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",s),T==="quote"?(h.reverse(),A.reverse(),k.reverse(),I=s==="a"?"quote":"base"):T==="base"&&(I=s==="a"?"base":"quote");let[S,B]=h,[C,x]=A,[L,U]=k,v=await this.getAmmPoolKeys(n.id),Z=this.createTxBuilder(),sn=await l.handleTokenAccount({side:"in",amount:L,mint:S.mint,tokenAccount:C,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:$}=sn,W=xe(sn,["tokenAccount"]);Z.addInstruction(W);let Vt=await l.handleTokenAccount({side:"in",amount:U,mint:B.mint,tokenAccount:x,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:mt}=Vt,hn=xe(Vt,["tokenAccount"]);Z.addInstruction(hn);let kn=await l.handleTokenAccount({side:"out",amount:0,mint:new Le(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:on}=kn,Xt=xe(kn,["tokenAccount"]);return Z.addInstruction(Xt),Z.addInstruction({instructions:[iu({poolInfo:n,poolKeys:v,userKeys:{baseTokenAccount:$,quoteTokenAccount:mt,lpTokenAccount:on,owner:this.scope.ownerPubKey},baseAmountIn:L,quoteAmountIn:U,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:v.lookupTableAccount?[v.lookupTableAccount]:[]}),Z.addCustomComputeBudget(u),c===0&&await Z.buildV0(),Z.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:r,config:i,txVersion:s,computeBudgetConfig:a}=t,c=await this.getAmmPoolKeys(n.id),[u,l,d]=[new Le(n.mintA.address),new Le(n.mintB.address),new Le(n.lpMint.address)];this.logDebug("amountIn:",r),r.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",r.toString());let{account:m}=this.scope,p=await m.getCreatedTokenAccount({mint:d,associatedOnly:!1});p||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",m.tokenAccounts);let y=await m.getCreatedTokenAccount({mint:u}),f=await m.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:h}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},i),S=await m.handleTokenAccount({side:"out",amount:0,mint:u,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:A}=S,k=xe(S,["tokenAccount"]);b.addInstruction(k);let B=await m.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:T}=B,I=xe(B,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[Yi({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:p,baseTokenAccount:A,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:r})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:d,tokenProgram:m=Ko,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,Ko).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 A=r.add(a!=null?a:new it(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),T=t.mintB.address===Ie.WSOL.mint.toString(),{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ko,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||{}),I===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ko,mint:new Le(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=I,g[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let W=pt[s.programId],mt=Qe({programId:new Le(s.programId),poolId:new Le(s.id),owner:this.scope.ownerPubKey,version:W}),hn,on=await this.scope.connection.getAccountInfo(mt);if(on&&(hn=Cn(W).decode(on.data)),W!==6&&!hn){let{instruction:zt,instructionType:Uo}=wo({id:new Le(s.id),programId:new Le(s.programId),version:W,ledger:mt,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[zt],instructionTypes:[Uo]})}let Xt=[];for(let zt of s.rewardInfos){let Uo=zt.mint.address===Ie.WSOL.mint.toString();if(g[zt.mint.address])Xt.push(g[zt.mint.address]);else{let{account:hs,instructionParams:ks}=await this.scope.account.getOrCreateTokenAccount({mint:new Le(zt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Uo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});hs||this.logAndCreateError("farm reward account not found:",zt.mint.address),ks&&b.addInstruction(ks),Xt.push(hs)}}let sn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Vt={userAuxiliaryLedgers:d,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:sn,lpAccount:h,rewardAccounts:Xt},kn=pt[s.programId],ic=kn===6?ur(Vt):kn===5?cr(Vt):lr(Vt),sc={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[ic],instructionTypes:[sc[kn]]})}let x=await this.getAmmPoolKeys(t.id),L=Yi({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:h,baseTokenAccount:I,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[U,v]=t.mintA.address===n.mintA.address?[I,B]:[B,I],Z=await this.scope.clmm.getClmmPoolKeys(t.id),$=await Se.openPositionFromBaseInstructions(F(R({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:U,tokenAccountB:v},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...$.instructions],signers:$.signers,instructionTypes:[...$.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.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:d=!1,tokenProgram:m,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var U;let b=u.feePayer||((U=this.scope.owner)==null?void 0:U.publicKey),g=u.useSOLBalance&&r.mint.equals(Mu),h=u.useSOLBalance&&i.mint.equals(Mu),A=this.createTxBuilder(),{account:k,instructionParams:T}=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:d});A.addInstruction(T||{});let{account:I,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:d});if(A.addInstruction(S||{}),k===void 0||I===void 0)throw Error("you don't has some token account");let B=Ou({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:L}=su(F(R({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:I,userLpVault:be(this.scope.ownerPubKey,B.lpMint,m).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[x],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=os({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Za.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,d=[u,l],m=a==t.mintA.address?"base":"quote";m==="quote"&&d.reverse();let[p,y]=d,f=t.programId===ro.toBase58(),b;if(f)b=new V(y.toString()).div(p.toString());else{let x=nu(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);m==="quote"?b=new V(1e6).div(x*1e6):b=new V(x*1e6).div(1e6)}let g=n,h=new it(0),A=new it(0);if(!g.isZero())if(f){A=Jn(g.mul(Ku),Cu);let x=g.sub(A),L=p.add(x);h=y.mul(x).div(L)}else{A=g.mul(new it(2)).div(new it(1e4));let x=g.sub(A);m==="quote"?h=new it(eu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),x.toNumber())):h=new it(tu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),x.toNumber()))}let k=new it(new V(h.toString()).mul(1-s).toFixed(0)),T=h,I=k,S=new V(h.toString()).div(new V(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new V(h.toString()).div(g.sub(A).toString()));let B=b.sub(S).div(b).mul(100);return{amountOut:T,minAmountOut:I,currentPrice:b,executionPrice:S,priceImpact:B,fee:A}}async swap({poolInfo:t,amountIn:n,amountOut:r,inputMint:i,fixedSide:s,txVersion:a,computeBudgetConfig:c}){let u=this.createTxBuilder(),[l,d]=i===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],m=await this.scope.account.getCreatedTokenAccount({mint:new Le(l.address),programId:new Le(l.programId),associatedOnly:!1}),p=await this.scope.account.getCreatedTokenAccount({mint:new Le(d.address),programId:new Le(d.programId),associatedOnly:!1}),k=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new Le(l.address),tokenAccount:m,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=k,f=xe(k,["tokenAccount"]);u.addInstruction(f);let T=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new Le(d.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=T,g=xe(T,["tokenAccount"]);u.addInstruction(g);let h=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),u.addInstruction({instructions:[Po({version:A,poolKeys:h,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:r,fixedSide:s})],instructionTypes:[A===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),u.addCustomComputeBudget(c),u.versionBuild({txVersion:a})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Ve(this.scope.connection,t.map(l=>({pubkey:new Le(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let d=r[l];if(d===null||!d.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let m=pr.decode(d.accountInfo.data);i[String(t[l])]=F(R({},m),{programId:d.accountInfo.owner}),s.push(m.baseVault,m.quoteVault)}let a={},c=await Ve(this.scope.connection,s.map(l=>({pubkey:new Le(l)})),n);for(let l=0;l<s.length;l++){let d=c[l].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new it(Bd.decode(d.data).amount.toString())}let u={};for(let[l,d]of Object.entries(i)){let m=a[d.baseVault.toString()].sub(d.baseNeedTakePnl),p=a[d.quoteVault.toString()].sub(d.quoteNeedTakePnl);u[l]=F(R({},d),{baseReserve:m,quoteReserve:p,poolPrice:new V(p.toString()).div(new V(10).pow(d.quoteDecimal.toString())).div(new V(m.toString()).div(new V(10).pow(d.baseDecimal.toString())))})}return u}};import{PublicKey as ae}from"@solana/web3.js";import gt from"bn.js";import{TOKEN_PROGRAM_ID as _u}from"@solana/spl-token";var kr=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)||ae.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:d}=e,m=this.createTxBuilder(),[p,y,f]=new gt(new ae(r.address).toBuffer()).gt(new gt(new ae(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 m.addInstruction(g),m.addCustomComputeBudget(u),m.versionBuild({txVersion:d,extInfo:{address:F(R({},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:R({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:[]}},Au),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:d="create",getEphemeralSigners:m,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===J.toString(),A=n.useSOLBalance&&e.mintB.address===J.toString(),[k,T]=s==="MintA"?[a,c]:[c,a],{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(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});I&&(b=I),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ae(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),L=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:F(R({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:m});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:d="create",txVersion:m,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===J.toBase58(),h=n.useSOLBalance&&e.mintB.address===J.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(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});A&&(f=A),y.addInstruction(k||{});let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ae(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});T&&(b=T),y.addInstruction(I||{}),(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),B=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:d,getEphemeralSigners:p});return y.addInstruction(B),y.versionBuild({txVersion:m,extInfo:{address:B.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:r,amountMaxB:i,liquidity:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:d}=e,m=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===J.toString(),b=a.useSOLBalance&&t.mintB.address===J.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),m.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ae(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),m.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},liquidity:s,amountMaxA:r,amountMaxB:i});return m.addInstruction(I),m.addCustomComputeBudget(l),m.versionBuild({txVersion:d,extInfo:{address:I.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:d}=e,m=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===J.toString(),b=a.useSOLBalance&&t.mintB.address===J.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(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),m.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ae(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});A&&(y=A),m.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return m.addInstruction(I),m.addCustomComputeBudget(l),m.versionBuild({txVersion:d,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:r,amountMinA:i,amountMinB:s,liquidity:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let m=this.createTxBuilder(),p=r.useSOLBalance&&t.mintA.address===J.toString(),y=r.useSOLBalance&&t.mintB.address===J.toString(),f,b,{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ae(t.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!p,associatedOnly:p?!1:c,checkCreateATAOwner:u});f=g,h&&m.addInstruction(h);let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ae(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});b=A,k&&m.addInstruction(k);let T=[];for(let C of t.rewardDefaultInfos){let x=r.useSOLBalance&&C.mint.address===J.toString(),L;if(C.mint.address===t.mintA.address)L=f;else if(C.mint.address===t.mintB.address)L=b;else{let{account:U,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(C.mint.programId),mint:new ae(C.mint.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});L=U,v&&m.addInstruction(v)}T.push(L)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),S=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:T},liquidity:a,amountMinA:i,amountMinB:s});m.addInstruction({instructions:S.instructions,instructionTypes:[E.ClmmDecreasePosition]});let B=R({},S.address);if(r.closePosition){let C=await Se.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});m.addInstruction({endInstructions:C.instructions,endInstructionTypes:C.instructionTypes}),B=R(R({},B),C.address)}return m.addCustomComputeBudget(l),m.versionBuild({txVersion:d,extInfo:{address:B}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),i=await this.getClmmPoolKeys(e.id),s=Se.closePositionInstructions({poolInfo:e,poolKeys:i,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return r.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.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()===J.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(n.mint.address),mint:new ae(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});m&&c.addInstruction(m),d||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:d},rewardInfo:{programId:new ae(n.mint.programId),mint:new ae(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,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let c=this.createTxBuilder(),u={};for(let l of n){let d=t.useSOLBalance&&l.mint.address===J.toString(),m=l.perSecond.mul(l.endTime-l.openTime),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(l.mint.programId),mint:new ae(l.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:i});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Se.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new ae(l.mint.programId),mint:new ae(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:ne.decimalToX64(l.perSecond)}});u=R(R({},u),b.address),c.addInstruction(b)}return c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:u}})}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(J),{account:l,instructionParams:d}=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});d&&c.addInstruction(d),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),p=Se.setRewardInstructions({poolInfo:e,poolKeys:m,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,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){let c=this.createTxBuilder(),u={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let d=t.useSOLBalance&&l.mint.address===J.toString(),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(l.mint.programId),mint:new ae(l.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:i});p&&c.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=Se.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{mint:new ae(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:ne.decimalToX64(l.perSecond)}});c.addInstruction(f),u=R(R({},u),f.address)}return c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:u}})}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(J),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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 d=await this.getClmmPoolKeys(e.id),m=Se.collectRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(m),a.build({address:m.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(J),{account:d,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(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});d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),m&&s.addInstruction(m);let p=await this.getClmmPoolKeys(e.id),y=Se.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardMint:c});s.addInstruction(y),a=R(R({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:r,priceLimit:i,observationId:s,ownerInfo:a,remainingAccounts:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,txVersion:d}){let m=this.createTxBuilder(),p=t.toString()===e.mintA.address,y=a.useSOLBalance&&e.mintA.address===J.toBase58(),f=a.useSOLBalance&&e.mintB.address===J.toBase58(),b;!i||i.equals(new V(0))?b=p?Nt.add(new gt(1)):Mt.sub(new gt(1)):b=te.priceToSqrtPriceX64(i,e.mintA.decimals,e.mintB.decimals);let g;if(!g){let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ae(e.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:y||!p?{payer:a.feePayer||this.scope.ownerPubKey,amount:y?n:0}:void 0,associatedOnly:y?!1:u,checkCreateATAOwner:l});g=k,T&&m.addInstruction(T)}let h;if(!h){let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ae(e.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||p?{payer:a.feePayer||this.scope.ownerPubKey,amount:p?0:n}:void 0,associatedOnly:f?!1:u,checkCreateATAOwner:l});h=k,T&&m.addInstruction(T)}(!g||!h)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let A=await this.getClmmPoolKeys(e.id);return m.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:A,observationId:s,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:h},inputMint:new ae(t),amountIn:n,amountOutMin:r,sqrtPriceLimitX64:b,remainingAccounts:c})),m.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 d of this.scope.account.tokenAccountRawInfos)r?be(this.scope.ownerPubKey,d.accountInfo.mint,s).publicKey.equals(d.pubkey)&&(u[d.accountInfo.mint.toString()]=d.pubkey):u[d.accountInfo.mint.toString()]=d.pubkey;let l=this.createTxBuilder();for(let d of Object.values(e)){if(t[d.id]===void 0||!t[d.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let m=d,p=n.useSOLBalance&&m.mintA.address===J.toString(),y=n.useSOLBalance&&m.mintB.address===J.toString(),f=u[m.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:m.mintA.programId,mint:new ae(m.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=A,k&&l.addInstruction(k)}let b=u[m.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:m.mintB.programId,mint:new ae(m.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=A,k&&l.addInstruction(k)}u[m.mintA.address]=f,u[m.mintB.address]=b;let g=[];for(let A of m.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===J.toString(),T=u[A.mint.address];if(!T){let{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ae(A.mint.programId),mint:new ae(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});T=I,S&&l.addInstruction(S)}u[A.mint.address]=T,g.push(T)}let h=await this.getClmmPoolKeys(m.id);for(let A of t[d.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:m,poolKeys:h,ownerPosition:A,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(yr(e).publicKey);return t?Tu.decode(t.data).whitelistMints.filter(r=>!r.equals(ae.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 ae(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=So.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 Ve(this.scope.connection,e.map(i=>({pubkey:new ae(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(R({},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 Ve(this.scope.connection,Array.from(n).map(c=>({pubkey:new ae(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=ku.decode(c.accountInfo.data))});let s=await Ce.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var d,m,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:ft({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||_u.toBase58(),extensions:{feeConfig:(d=t[u])!=null&&d.feeConfig?Rn((m=t[u])==null?void 0:m.feeConfig):void 0}}),mintB:ft({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||_u.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Rn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(R({},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}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as Eo,TOKEN_PROGRAM_ID as rn,AccountLayout as Wd}from"@solana/spl-token";import Eu from"bn.js";var ss=new Eu(1e6);function Sd(o,e,t){return o.mul(e).add(t).sub(new Eu(1)).div(t)}function Vu(o,e,t){return o.mul(e).div(t)}var Co=class{static tradingFee(e,t){return Sd(e,t,ss)}static protocolFee(e,t){return Vu(e,t,ss)}static fundFee(e,t){return Vu(e,t,ss)}};import Tr from"bn.js";function Ro(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Kd(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=Ro(o,e);return n.gt(_n)&&(t=t.add(new Tr(1)),e=o.div(t),n=Ro(o,t),n.gt(_n)&&(e=e.add(new Tr(1)))),[t,e]}var _n=new Tr(0),Lo=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Kd(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 Ro(e.mul(n),t).gt(_n)&&s.gt(_n)&&(s=s.add(new Tr(1))),Ro(e.mul(r),t).gt(_n)&&a.gt(_n)&&(a=a.add(new Tr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var vu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(vu||{}),Oo=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=Co.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Lo.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Cd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Rd=Buffer.from("amm_config","utf8"),Ld=Buffer.from("pool","utf8"),Od=Buffer.from("pool_lp_mint","utf8"),Nd=Buffer.from("pool_vault","utf8"),Md=Buffer.from("observation","utf8");function Ir(o){return se([Cd],o)}function _d(o,e){return se([Rd,vd(e)],o)}function Vd(o,e,t,n){return se([Ld,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Ed(o,e){return se([Od,e.toBuffer()],o)}function Fu(o,e,t){return se([Nd,e.toBuffer(),t.toBuffer()],o)}function No(o,e){return se([Md,e.toBuffer()],o)}function vd(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Du({programId:o,mintA:e,mintB:t}){let n=_d(o,0).publicKey,r=Ir(o).publicKey,i=Vd(o,n,e,t).publicKey,s=Ed(o,i).publicKey,a=Fu(o,i,e).publicKey,c=Fu(o,i,t).publicKey,u=No(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as xr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as as,TOKEN_2022_PROGRAM_ID as Wu,ASSOCIATED_TOKEN_PROGRAM_ID as Fd}from"@solana/spl-token";var Dd=ue("Raydium_cpmm"),Br={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 qu(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y,f,b,g,h,A){let k=_([P("amountMaxA"),P("amountMaxB"),P("openTime")]),T=[{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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:as,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Fd,isSigner:!1,isWritable:!1},{pubkey:Xr,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],I=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},I),new xr({keys:T,programId:o,data:Buffer.from([...Br.initialize,...I])})}function Uu(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){let f=_([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:as,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Dd.debug("cpmm deposit data",{lpAmount:m.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:m,amountMaxA:p,amountMaxB:y},g),new xr({keys:b,programId:o,data:Buffer.from([...Br.deposit,...g])})}function Gu(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){let f=_([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey: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:as,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ur,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:m,amountMinA:p,amountMinB:y},g),new xr({keys:b,programId:o,data:Buffer.from([...Br.withdraw,...g])})}function Mo(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y,f){let b=_([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new xr({keys:g,programId:o,data:Buffer.from([...Br.swapBaseInput,...h])})}function _o(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y,f){let b=_([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new xr({keys:g,programId:o,data:Buffer.from([...Br.swapBaseOutput,...h])})}import Fe from"bn.js";var Xu=_([fe(8),D("bump"),Ue("disableCreatePool"),Lt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),G(P(),16)]),Vo=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),G(P(),32)]);var Sr=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 Ve(this.scope.connection,e.map(d=>({pubkey:new z(d)}))),r={},i=new Set,s=[];for(let d=0;d<e.length;d++){let m=n[d];if(m.accountInfo===null)throw Error("fetch pool info error: "+String(e[d]));let p=Vo.decode(m.accountInfo.data);r[String(e[d])]=F(R({},p),{programId:m.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let d=[...i],m=await Ve(this.scope.connection,d.map(p=>({pubkey:new z(p)})));for(let p=0;p<d.length;p++){let y=m[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+d[p]);a[d[p]]=Xu.decode(y.data)}}let c={},u=await Ve(this.scope.connection,s.map(d=>({pubkey:new z(d)})));for(let d=0;d<s.length;d++){let m=u[d].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[d]);c[String(s[d])]=new Fe(Wd.decode(m.data).amount.toString())}let l={};for(let[d,m]of Object.entries(r)){let p=c[m.vaultA.toString()].sub(m.protocolFeesMintA).sub(m.fundFeesMintA),y=c[m.vaultB.toString()].sub(m.protocolFeesMintB).sub(m.fundFeesMintB);l[d]=F(R({},m),{baseReserve:p,quoteReserve:y,configInfo:a[m.configId.toString()],poolPrice:new V(y.toString()).div(new V(10).pow(m.mintDecimalB)).div(new V(p.toString()).div(new V(10).pow(m.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var c,u,l,d;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(R({},n),{[r]:F(R({},i),{id:new z(r),configInfo:i.configInfo,version:7,authority:Ir(i.programId).publicKey,mintA:ft({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?Rn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:ft({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Rn((d=t[a])==null?void 0:d.feeConfig):void 0}})})})},{})}async createPool(l){var d=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=d,u=xe(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var U,v,Z;let m=r.feePayer||((U=this.scope.owner)==null?void 0:U.publicKey),p=new Fe(new z(u.mintA.address).toBuffer()).lte(new Fe(new z(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===Eo.toBase58(),A=r.useSOLBalance&&f.address===Eo.toBase58(),[k,T]=[new z(y.address),new z(f.address)],I=this.createTxBuilder(),{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:m,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});I.addInstruction(B||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:m,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});if(I.addInstruction(x||{}),S===void 0||C===void 0)throw Error("you don't has some token account");let L=Du({programId:e,mintA:k,mintB:T});return I.addInstruction({instructions:[qu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,T,L.lpMint,S,C,be(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new z((v=y.programId)!=null?v:rn),new z((Z=f.programId)!=null?Z:rn),L.observationId,b,g,n)],instructionTypes:[E.CpmmCreatePool]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:a,extInfo:{address:F(R({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:r,slippage:i,computeResult:s,computeBudgetConfig:a,config:c,txVersion:u}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:l}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:m}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),p=s?void 0:await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:f,anotherAmount:b}=s||this.computePairAmount({poolInfo:F(R({},t),{lpAmount:new V(p.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:p.baseReserve,quoteReserve:p.quoteReserve,slippage:new Ze(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new V(n.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),g=b.amount,h=t.mintA.address===Eo.toString(),A=t.mintB.address===Eo.toString(),k=this.createTxBuilder(),[T,I]=[new z(t.mintA.address),new z(t.mintB.address)],{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(r?n:g).isZero()?{payer:this.scope.ownerPubKey,amount:r?n:g}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:m});k.addInstruction(B||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(r?g:n).isZero()?{payer:this.scope.ownerPubKey,amount:r?g:n}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:m});k.addInstruction(x||{}),!S&&!C&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let L=await l.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),W=await l.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:m}),{tokenAccount:U}=W,v=xe(W,["tokenAccount"]);k.addInstruction(v);let Z=await this.getCpmmPoolKeys(t.id),$=new Ze(new Fe(1)).sub(i);return k.addInstruction({instructions:[Uu(new z(t.programId),this.scope.ownerPubKey,new z(Z.authority),new z(t.id),U,S,C,new z(Z.vault.A),new z(Z.vault.B),T,I,new z(t.lpMint.address),s?s==null?void 0:s.liquidity:$.mul(y).quotient,r?f.amount:g,r?g:f.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),k.addCustomComputeBudget(a),k.versionBuild({txVersion:u})}async withdrawLiquidity(e){var U,v;let{poolInfo:t,lpAmount:n,slippage:r,computeBudgetConfig:i,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new Ze(new Fe(1)).sub(r),c=await this.getRpcPoolInfo(t.id),[u,l]=[a.mul(n.mul(c.baseReserve).div(c.lpAmount)).quotient,a.mul(n.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[m,p]=[Pe(u,t.mintA.extensions.feeConfig,d,!0),Pe(l,t.mintB.extensions.feeConfig,d,!0)],{account:y}=this.scope,f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)],h=b.equals(J),A=g.equals(J),k,T,{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});k=I,S&&f.addInstruction(S);let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});T=B,C&&f.addInstruction(C),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let x=await y.getCreatedTokenAccount({mint:new z(t.lpMint.address)});x||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let L=await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[Gu(new z(t.programId),this.scope.ownerPubKey,new z(L.authority),new z(t.id),x,k,T,new z(L.vault.A),new z(L.vault.B),b,g,new z(t.lpMint.address),n,u.sub((U=m.fee)!=null?U:new Fe(0)),l.sub((v=p.fee)!=null?v:new Fe(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]}),f.addCustomComputeBudget(i),f.versionBuild({txVersion:s})}async swap(e){var I,S,B,C,x,L;let{poolInfo:t,baseIn:n,swapResult:r,slippage:i=0,config:s,computeBudgetConfig:a,txVersion:c}=e,{bypassAssociatedCheck:u,checkCreateATAOwner:l,associatedOnly:d}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},s),m=this.createTxBuilder(),[p,y]=[new z(t.mintA.address),new z(t.mintB.address)];r.destinationAmountSwapped=r.destinationAmountSwapped.mul(new Fe((1-i)*1e4)).div(new Fe(1e4));let f=t.mintA.address===J.toBase58(),b=t.mintB.address===J.toBase58(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:p,tokenProgram:new z((I=t.mintA.programId)!=null?I:rn),owner:this.scope.ownerPubKey,createInfo:f||!n?{payer:this.scope.ownerPubKey,amount:n?r.sourceAmountSwapped:0}:void 0,notUseTokenAccount:f,skipCloseAccount:!f,associatedOnly:f?!1:d,checkCreateATAOwner:l});h&&m.addInstruction(h);let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((S=t.mintB.programId)!=null?S:rn),owner:this.scope.ownerPubKey,createInfo:b||n?{payer:this.scope.ownerPubKey,amount:n?0:r.sourceAmountSwapped}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:l});k&&m.addInstruction(k),!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getCpmmPoolKeys(t.id);return m.addInstruction({instructions:[n?Mo(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),g,A,new z(T.vault.A),new z(T.vault.B),new z((B=t.mintA.programId)!=null?B:rn),new z((C=t.mintB.programId)!=null?C:rn),p,y,No(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped):_o(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),A,g,new z(T.vault.B),new z(T.vault.A),new z((x=t.mintB.programId)!=null?x:rn),new z((L=t.mintA.programId)!=null?L:rn),y,p,No(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped)],instructionTypes:[n?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut]}),m.addCustomComputeBudget(a),m.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Oo.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,A,k,T,I,S,B,C;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),d=u.sub((h=l.fee)!=null?h:new Fe(0)),m=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=(A=l.fee)==null?void 0:A.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=d.mul(m).div(p==="base"?t:n),f={amount:dt,fee:void 0,expirationTime:void 0};if(!d.isZero()){let x=qd(y,t,n,m);this.logDebug("lpAmountData:",{amountA:x.amountA.toString(),amountB:x.amountB.toString()}),f=Pe(x[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ze(new Fe(1)).add(i),g=Pe(b.mul(f.amount.sub((T=f.fee)!=null?T:new Fe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(I=f.fee)==null?void 0:I.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(C=(B=g.fee)==null?void 0:B.toString())!=null?C:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function qd(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 An}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as ds,createTransferInstruction as Zu}from"@solana/spl-token";import Do from"bn.js";import{TOKEN_PROGRAM_ID as us,TOKEN_2022_PROGRAM_ID as Ud,ASSOCIATED_TOKEN_PROGRAM_ID as Gd}from"@solana/spl-token";import{PublicKey as X,TransactionInstruction as cs,SystemProgram as ls}from"@solana/web3.js";import wn from"bn.js";function gx(o,e,t,n,r,i,s,a,c,u,l,d){let m=_([D("instruction"),P("amountIn"),P("amountOut")]),p=[{pubkey:ls.programId,isSigner:!1,isWritable:!1},{pubkey:us,isSigner:!1,isWritable:!1},{pubkey:new X(t.programId),isSigner:!1,isWritable:!1},{pubkey:new X(t.id),isSigner:!1,isWritable:!0},{pubkey:new X(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},...d.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 X("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(m.span);return m.encode({instruction:4,amountIn:u,amountOut:l},y),new cs({keys:p,programId:o,data:y})}function wx(o,e,t,n,r,i,s,a,c,u){let l=_([D("instruction")]),d=[{pubkey:ls.programId,isSigner:!1,isWritable:!1},{pubkey:us,isSigner:!1,isWritable:!1},{pubkey:new X(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new X(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new X(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);d.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);d.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new X("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);d.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 m=Buffer.alloc(l.span);return l.encode({instruction:5},m),new cs({keys:d,programId:o,data:m})}function Xd(o,e,t,n,r,i,s,a,c,u,l,d,m,p,y){var I;let f=[],b=[w({pubkey:us,isWritable:!1}),w({pubkey:Ud,isWritable:!1}),w({pubkey:Gd,isWritable:!1}),w({pubkey:ls.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})];b.push(w({pubkey:t})),b.push(w({pubkey:r}));let g=[c,u],h=[l,d],A=[i,s,a];for(let S=0;S<g.length;S++){let B=g[S],C=A[S]===B.mintA.address;if(b.push(w({pubkey:new X(B.programId),isWritable:!1})),S===g.length-1?b.push(w({pubkey:r})):b.push(w({pubkey:n})),b.push(w({pubkey:new X(A[S])})),b.push(w({pubkey:new X(A[S+1])})),B.version===6){let x=h[S];b.push(w({pubkey:new X(x.config.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(C?x.vault.A:x.vault.B)})),b.push(w({pubkey:new X(C?x.vault.B:x.vault.A)})),b.push(w({pubkey:new X(B.observationId)})),b.push(w({pubkey:Ur})),b.push(w({pubkey:ut(new X(B.programId),new X(B.id)).publicKey})),f.push(zd(B.sqrtPriceX64.toString(),C));for(let L of(I=y[S])!=null?I:[])b.push(w({pubkey:new X(L)}))}else if(B.version===5){let x=h[S];b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.authority),isWritable:!1})),b.push(w({pubkey:new X(x.marketProgramId)})),b.push(w({pubkey:new X(x.marketAuthority)})),b.push(w({pubkey:ma,isWritable:!1})),b.push(w({pubkey:new X(x.openOrders)})),b.push(w({pubkey:new X(x.vault.A)})),b.push(w({pubkey:new X(x.vault.B)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.marketId)})),b.push(w({pubkey:new X(x.marketBids)})),b.push(w({pubkey:new X(x.marketAsks)})),b.push(w({pubkey:new X(x.marketEventQueue)})),b.push(w({pubkey:new X(x.marketBaseVault)})),b.push(w({pubkey:new X(x.marketQuoteVault)}))}else if(B.version===4){let x=h[S],L=B.status!==1;b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(x.authority),isWritable:!1})),b.push(w({pubkey:new X(L?x.id:x.marketProgramId)})),b.push(w({pubkey:new X(L?x.id:x.marketAuthority)})),b.push(w({pubkey:new X(L?x.id:x.openOrders)})),b.push(w({pubkey:new X(x.vault.A)})),b.push(w({pubkey:new X(x.vault.B)})),b.push(w({pubkey:new X(L?x.id:x.marketId)})),b.push(w({pubkey:new X(L?x.id:x.marketBids)})),b.push(w({pubkey:new X(L?x.id:x.marketAsks)})),b.push(w({pubkey:new X(L?x.id:x.marketEventQueue)})),b.push(w({pubkey:new X(L?x.id:x.marketBaseVault)})),b.push(w({pubkey:new X(L?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=h[S];b.push(w({pubkey:new X(x.authority)})),b.push(w({pubkey:new X(x.config.id)})),b.push(w({pubkey:new X(x.id)})),b.push(w({pubkey:new X(C?x.vault.A:x.vault.B)})),b.push(w({pubkey:new X(C?x.vault.B:x.vault.A)})),b.push(w({pubkey:new X(B.observationId)}))}else throw Error("pool type error")}let k=_([D("insId"),P("amountIn"),P("amountOut"),G(Y(),f.length,"clmmPriceLimit")]),T=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:m,amountOut:p,clmmPriceLimit:f},T),new cs({keys:b,programId:o,data:T})}function zd(o,e){if(o)if(e){let t=new wn(o).div(new wn(25));return t.gt(Io)?t:Io}else{let t=new wn(o).mul(new wn(25));return t.lt(xo)?t:xo}else return e?Io:xo}function zu({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 d=n.poolKey[0],m=ke(d),p=t.equals(m.mintA.address)?Nt.add(ct):Mt.sub(ct);return Se.makeSwapBaseInInstructions({poolInfo:d,poolKeys:d,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:m.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:m.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 wn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let d=n.poolInfo[0],m=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[m?Mo(d.programId,e.wallet,d.authority,d.configId,d.id,e.sourceToken,e.destinationToken,d.vaultA,d.vaultB,d.mintProgramA,d.mintProgramA,new X(d.mintA.address),new X(d.mintB.address),d.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):_o(d.programId,e.wallet,d.authority,d.configId,d.id,e.destinationToken,e.sourceToken,d.vaultB,d.vaultA,d.mintProgramB,d.mintProgramA,new X(d.mintB.address),new X(d.mintA.address),d.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[m?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let d=n.poolKey[0];return{signers:[],instructions:[Po({poolKeys:d,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 wn(0)),fixedSide:"in"})],lookupTableAddress:d.lookupTableAccount?[d.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let d=n.poolInfo[0],m=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:[Xd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),d,m,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new wn(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Yu={[li.toBase58()]:3},Qu={3:li};var ms=_([fe(5),fe(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),fe(7)]),ju={3:ms};import{PublicKey as Hu}from"@solana/web3.js";var vo=ue("Serum"),Fo=class{static getProgramId(e){let t=Qu[e];return t||vo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Yu[t];return n||vo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=ju[e];return t||vo.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=Hu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return vo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Hu.default,nonce:r}}};var Gt=new Do(0),Kr=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(J));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion: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=H(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})]}),er({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:[er({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(J),d=u.amount.token.mint.equals(J),m=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?ds:Re,mint:m,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?ds:Re);d&&a.addInstruction({endInstructions:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?ds:Re)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=zu({routeProgram:i,inputMint:m,swapInfo:F(R({},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:[Zu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),k.addInstruction(A);let{transactions:T}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();T.length<2&&a.addInstruction({instructions:[Zu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ro,clmm:n=da,cpmm:r=pa}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:pr.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}}),m=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Vo.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:m}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:i}){e=e.toString()===An.default.toString()?J:e,t=t.toString()===An.default.toString()?J:t;let s={},a={},c={},u=[],l={};for(let m of n!=null?n:[]){if((m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),a[m.id.toString()]=m),m.mintA.equals(e)){let p=m.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(m)}if(m.mintB.equals(e)){let p=m.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(m)}if(m.mintA.equals(t)){let p=m.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(m)}if(m.mintB.equals(t)){let p=m.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(m)}}let d=[];for(let m of r)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),s[m.id.toBase58()]=m,d.push(m)),m.mintA.equals(e)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].out.push(m));for(let m of i)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),c[m.id.toBase58()]=m),m.mintA.equals(e)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].out.push(m));for(let m of Object.keys(l)){if(l[m].in.length===1&&l[m].out.length===1&&l[m].in[0].id.equals(l[m].out[0].id)){delete l[m];continue}if(l[m].in.length===0||l[m].out.length===0){delete l[m];continue}let p=l[m];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:d,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=Nu(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new An(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 An(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 oa({connection:this.scope.connection,mints:Array.from(r).map(f=>new An(f))});a=R(R({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let d=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:m,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:d,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(R({},f),{[b]:F(R({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||m[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||m[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:d,computeClmmPoolInfo:m,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,A,k,T,I,S,B,C;let d=l===void 0?new Do(0):e.raw.mul(new Do(l.feeBps.toNumber())).div(new Do(1e4)),m=e.raw.sub(d),p=new ye(e.token,m),y=l===void 0?void 0:{feeAmount:d,feeAccount:l.feeAccount},f=F(R({},t),{address:st(t.address).toString()}),b=[];for(let x of n)try{b.push(F(R({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",x.version,x.id.toString(),L.message)}this.logDebug("direct done");for(let[x,L]of Object.entries(r)){let U={chainId:101,address:x,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},v=L.in.map($=>{try{return{pool:$,data:this.computeAmountOut({itemPool:$,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:U,amountIn:p})}}catch(W){this.logDebug("route in error",$.version,$.id.toString(),W.message);return}}).sort(($,W)=>{var on,Xt,sn,Vt;let mt=$===void 0?Gt:$.data.amountOut.amount.raw.sub((Xt=(on=$.data.amountOut.fee)==null?void 0:on.raw)!=null?Xt:Gt),hn=W===void 0?Gt:W.data.amountOut.amount.raw.sub((Vt=(sn=W.data.amountOut.fee)==null?void 0:sn.raw)!=null?Vt:Gt);return mt.lt(hn)?1:-1})[0];if(v===void 0)continue;let Z=new ye(Ao(U),v.data.amountOut.amount.raw.sub((h=(g=v.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Gt));for(let $ of L.out)try{let W=this.computeAmountOut({itemPool:$,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:Z});b.push(F(R({},W),{allTrade:!!(v.data.allTrade&&W.allTrade),amountIn:v.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new V(new nt({baseToken:v.data.amountIn.amount.token,denominator:v.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(A=W.amountOut.fee)==null?void 0:A.raw)!=null?k:Gt)}).toFixed()),priceImpact:new V(v.data.priceImpact.add(W.priceImpact).toFixed()),fee:[v.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[v.pool,$],remainingAccounts:[v.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(T=W.amountOut.fee)!=null&&T.raw?new ye(v.data.amountOut.amount.token,((S=(I=v.data.amountOut.fee)==null?void 0:I.raw)!=null?S:Gt).add((C=(B=W.amountOut.fee)==null?void 0:B.raw)!=null?C:Gt)):void 0,middleToken:v.data.amountOut.amount.token,poolReady:v.data.poolReady&&W.poolReady,poolType:[v.data.poolType,W.poolType],feeConfig:y,expirationTime:Rt(v.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",$.version,$.id.toString(),W.message)}}return b.filter(x=>x.allTrade).sort((x,L)=>x.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Gt)?-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:d,minAmountOut:m,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=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:d,minAmountOut:m,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:[A],expirationTime:Rt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:d,minAmountOut:m,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:dr(F(R({},a),{amount:d})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:dr(F(R({},a),{amount:m})),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:d,executionPrice:m,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:dr(F(R({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:dr(F(R({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:d,executionPrice:m,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 Ve(this.scope.connection,Array.from(s).map(l=>({pubkey:new An(l)})))).forEach(l=>{if(!l.accountInfo)return;let d=ms.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Fo.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:d.baseVault.toString(),marketQuoteVault:d.quoteVault.toString(),marketBids:d.bids.toString(),marketAsks:d.asks.toString(),marketEventQueue:d.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],d={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(R({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(d)}else if(u.version===4){let l=n[u.id.toString()],d=R({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:is({programId:new An(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(d)}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:Ir(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:ft({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:F(R({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as Yd}from"@solana/spl-token";import{PublicKey as Qd,Transaction as ps,TransactionInstruction as jd}from"@solana/web3.js";import $u from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return se([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return se([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new $u(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(d=>He.getPdaOwnerId(t,d,r,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let d=Math.floor(l/n.length),m=l%n.length,p=s[m],y=a[l],f=c[m],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),A=g.openTime.toNumber(),k=g.endTime.toNumber(),T=h.tokenInfo.map(B=>B.debtAmount.gt(new $u(0))).filter(B=>!B).length!==3,I=i>A&&i<k&&g.status===1,S=T&&I;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[d],openTime:A,endTime:k,canClaim:S,canClaimErrorType:T?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:h.tokenInfo[C].debtAmount.add(h.tokenInfo[C].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 d of u.tokenInfo){let{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!d.mintAddress.equals(Ie.WSOL.mint),associatedOnly:d.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),m&&(i[d.mintAddress.toString()]=m,l.push(m))}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 Jr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ps().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ps().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ps().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:Yd,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})}},wt=He;wt.CLAIMED_NUM=3,wt.POOL_LAYOUT=_([fe(8),D("bump"),D("status"),P("openTime"),P("endTime"),K("ammId"),G(_([D("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),G(P(),10,"padding")]),wt.OWNER_LAYOUT=_([fe(8),D("bump"),D("version"),K("poolId"),K("owner"),P("lpAmount"),G(_([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),G(P(),4,"padding")]),wt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qd(e)),wt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},wt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Cr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";import Rr from"bn.js";import{TransactionInstruction as Zd,SYSVAR_RENT_PUBKEY as $d}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ju}from"@solana/spl-token";import{createInitializeAccountInstruction as ec}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as tc}from"@solana/web3.js";function Hd(o="accountFlags"){let e=new co(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 fs=_([fe(5),Hd("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),fe(7)]);function Jd({programId:o,marketInfo:e}){let t=_([D("version"),ze("instruction"),P("baseLotSize"),P("quoteLotSize"),Lt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:$d,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 Zd({keys:n,programId:o,data:r})}async function nc({connection:o,wallet:e,marketInfo:t}){let n=new tc,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:Ju}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Ju}),ec(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ec(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new tc;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(fs.span),space:fs.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}),Jd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:i,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var Vn=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=Ye({fromPublicKey:c,programId:i}),l=Ye({fromPublicKey:c,programId:i}),d=Ye({fromPublicKey:c,programId:i}),m=Ye({fromPublicKey:c,programId:i}),p=Ye({fromPublicKey:c,programId:i}),y=Ye({fromPublicKey:c,programId:rc}),f=Ye({fromPublicKey:c,programId:rc}),b=0,g=new Rr(100);function h(){let C=new Rr(0);for(;;)try{return{vaultOwner:Cr.createProgramAddressSync([u.publicKey.toBuffer(),C.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:C}}catch{if(C.iaddn(1),C.gt(new Rr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:k}=h(),T=new Rr(Math.round(10**e.decimals*n)),I=new Rr(Math.round(n*10**t.decimals*r));if(T.eq(dt))throw Error("lot size is too small");if(I.eq(dt))throw Error("tick size or lot size is too small");let S=await nc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:u,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:d,bids:m,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:T,quoteLotSize:I}}),B=this.createTxBuilder();B.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let C of S.slice(1,S.length))B.addInstruction({instructions:C.transaction.instructions,signers:C.signer,instructionTypes:C.instructionTypes});return s===0?B.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:d.publicKey,bids:m.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Cr(e.mint),quoteMin:new Cr(t.mint)}}):B.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:d.publicKey,bids:m.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Cr(e.mint),quoteMin:new Cr(t.mint)}})}};import{PublicKey as Or}from"@solana/web3.js";import{TransactionInstruction as bs,SYSVAR_CLOCK_PUBKEY as ep}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as gs}from"@solana/spl-token";var ys=_([D("instruction"),Aa("amount")]),Lr=_([D("instruction")]);function tS({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:Xr,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:ei,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(ys.span);return ys.encode({instruction:1,amount:Number(e)},r),new bs({keys:n,programId:o,data:r})}function Wo({programId:o},e){let t=[{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:ei,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Lr.span);return Lr.encode({instruction:2},n),new bs({keys:t,programId:o,data:n})}function ws(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(Lr.span);Lr.encode({instruction:2},s);let a=[{pubkey:gs,isWritable:!1,isSigner:!1},{pubkey:ep,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 bs({programId:e.programId,keys:a,data:s})}import oc from"bn.js";var tp={[Zn.IDO_PROGRAM_ID_V1.toString()]:1,[Zn.IDO_PROGRAM_ID_V2.toString()]:2,[Zn.IDO_PROGRAM_ID_V3.toString()]:3,[Zn.IDO_PROGRAM_ID_V4.toString()]:4},En=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=tp[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new oc(e.coin).isZero(),!new oc(e.pc).isZero()],d=c.projectInfo.mint.address.equals(J),{account:m,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:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:r});!m&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(J),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!m&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!m||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Wo({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:m,userIdoInfo:new Or(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Wo({programId:new Or(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Or(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Wo({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:m,userIdoInfo:new Or(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:m,quoteTokenAccount:f,ledgerAccount:new Or(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ws(F(R({},g),{side:"base"}))]:[],...l?[ws(F(R({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as np}from"@solana/web3.js";import{MintLayout as rp,TOKEN_2022_PROGRAM_ID as As,TOKEN_PROGRAM_ID as Ps}from"@solana/spl-token";var Nr=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(R({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?As.toBase58():Ps.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(R({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?As.toBase58():Ps.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(R({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?As.toBase58():Ps.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(R({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new np(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=rp.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 qo=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 mr({scope:this,moduleName:"Raydium_Farm"}),this.account=new tr({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new hr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Nr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Kr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new kr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Sr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new wt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Vn({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=op({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new so({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new qo(F(R({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(ao);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(ba);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(ao),new Error(ao)}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(R({},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{sd as AMM_CONFIG_SEED,yu as BIT_PRECISION,kr as Clmm,ku as ClmmConfigLayout,Se as ClmmInstrument,Lo as ConstantProductCurve,Xu as CpmmConfigInfoLayout,Co as CpmmFee,Vo as CpmmPoolInfoLayout,Oo as CurveCalculator,Xm as DataElement,$i as EXTENSION_TICKARRAY_BITMAP_SIZE,Fa as FARM_LOCK_MINT,Da as FARM_LOCK_VAULT,pt as FARM_PROGRAM_TO_VERSION,qa as FARM_VERSION_TO_LEDGER_LAYOUT,Wa as FARM_VERSION_TO_STATE_LAYOUT,Bo as FEE_RATE_DENOMINATOR,ss as FEE_RATE_DENOMINATOR_VALUE,fd as FETCH_TICKARRAY_COUNT,pd as Fee,Cu as LIQUIDITY_FEES_DENOMINATOR,Ku as LIQUIDITY_FEES_NUMERATOR,hd as LIQUIDITY_VERSION_TO_SERUM_VERSION,SP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,bu as LOG_B_2_X32,gu as LOG_B_P_ERR_MARGIN_LOWER_X64,wu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,fs as MARKET_STATE_LAYOUT_V2,ms as MARKET_STATE_LAYOUT_V3,ju as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,xo as MAX_SQRT_PRICE_X64_SUB_ONE,Je as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,Io as MIN_SQRT_PRICE_X64_ADD_ONE,je as MIN_TICK,On as MODEL_DATA_PUBKEY,Fo as Market,ne as MathUtil,Zi as MaxU64,fu as MaxUint128,qt as NEGATIVE_ONE,ct as ONE,md as OPERATION_SEED,es as ObservationInfoLayout,gd as ObservationLayout,Tu as OperationLayout,cd as POOL_REWARD_VAULT_SEED,ad as POOL_SEED,dd as POOL_TICK_ARRAY_BITMAP_SEED,ud as POOL_VAULT_SEED,mu as POSITION_SEED,yn as PoolInfoLayout,Ce as PoolUtils,So as PositionInfoLayout,Ad as PositionRewardInfoLayout,Ar as PositionUtils,mk as ProtocolPositionLayout,To as Q128,lt as Q64,qo as Raydium,wd as RewardInfo,vu as RoundDirection,Yu as SERUM_PROGRAMID_TO_VERSION,Qu as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,tP as SPL_MINT_LAYOUT,te as SqrtPriceMath,Ln as StableLayout,fn as SwapMath,pn as TICK_ARRAY_BITMAP_SIZE,ld as TICK_ARRAY_SEED,_e as TICK_ARRAY_SIZE,eh as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,hu as TickArrayBitmapExtensionLayout,wr as TickArrayBitmapExtensionUtils,gr as TickArrayLayout,Pd as TickLayout,bn as TickMath,le as TickQuery,Q as TickUtils,br as U64Resolution,nh as U64_IGNORE_RANGE,Ea as Voter,Bm as VoterDepositEntry,xm as VoterLockup,Va as VoterRegistrar,Im as VoterVotingMintConfig,de as ZERO,Gi as addLiquidityLayout,Ii as associatedLedgerAccountLayout,Ei as calFarmRewardAmount,Sd as ceilDiv,Lr as claimLayout,Ot as closeAccountInstruction,wo as createAssociatedLedgerAccountInstruction,Za as createPoolFeeLayout,su as createPoolV4InstructionV2,BP as createPoolV4Layout,Dt as createWSolAccountInstructions,$e as dwLayout,Ki as farmAddRewardLayout,Dw as farmLedgerLayoutV3_1,rr as farmLedgerLayoutV3_2,Ww as farmLedgerLayoutV5_1,Ma as farmLedgerLayoutV5_2,_a as farmLedgerLayoutV6_1,Ga as farmRewardInfoToConfig,Bi as farmRewardLayout,Si as farmRewardRestartLayout,Tm as farmRewardTimeInfoLayout,Oa as farmStateV3Layout,Na as farmStateV5Layout,nr as farmStateV6Layout,dA as fetchMultipleFarmInfoAndUpdate,Uk as fetchMultipleInfo,Wi as fixedSwapInLayout,qi as fixedSwapOutLayout,Vu as floorDiv,td as formatLayout,Ye as generatePubKey,Ua as getAssociatedAuthority,os as getAssociatedConfigId,Qe as getAssociatedLedgerAccount,ir as getAssociatedLedgerPoolAccount,xd as getAssociatedOpenOrders,Ou as getAssociatedPoolKeys,_d as getCpmmPdaAmmConfigId,Vd as getCpmmPdaPoolId,Du as getCreatePoolKeys,vi as getDepositEntryIndex,tu as getDxByDyBaseIn,eu as getDyByDxBaseIn,Cn as getFarmLedgerLayout,Sm as getFarmStateLayout,is as getLiquidityAssociatedAuthority,gn as getLiquidityAssociatedId,Wh as getLiquidityFromAmounts,ZP as getPdaAmmConfigId,ut as getPdaExBitmapAccount,Ed as getPdaLpMint,ko as getPdaMetadataKey,No as getPdaObservationId,yr as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Ir as getPdaPoolAuthority,du as getPdaPoolId,pu as getPdaPoolRewardVaulId,Hi as getPdaPoolVaultId,dn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Fu as getPdaVault,Li as getRegistrarAddress,nu as getStablePrice,Vi as getTokenOwnerRecordAddress,Mi as getVoterAddress,_i as getVoterWeightRecordAddress,Ni as getVotingMintAuthority,Oi as getVotingTokenMint,Vm as governanceCreateTokenOwnerRecord,zP as i16ToBytes,ho as i32ToBytes,Ui as initPoolLayout,ki as initTokenAccountInstruction,Jd as initializeMarket,Ci as isValidFarmVersion,fr as isZero,pA as judgeFarmType,Qi as leadingZeros,lu as leastSignificantBit,pr as liquidityStateV4Layout,Um as liquidityStateV5Layout,Po as makeAMMSwapInstruction,iu as makeAddLiquidityInstruction,Di as makeAddNewRewardInstruction,Wo as makeClaimInstruction,ws as makeClaimInstructionV4,qu as makeCreateCpmmPoolInInstruction,Xa as makeCreateFarmInstruction,nc as makeCreateMarketInstruction,za as makeCreatorWithdrawFarmRewardInstruction,Uu as makeDepositCpmmInInstruction,Ya as makeDepositInstructionV3,Qa as makeDepositInstructionV5,ja as makeDepositInstructionV6,RA as makeDepositTokenInstruction,OA as makeDepositWithdrawInstruction,GP as makeInitPoolInstructionV4,tS as makePurchaseInstruction,Fi as makeRestartRewardInstruction,au as makeSimulatePoolInfoInstruction,Mo as makeSwapCpmmBaseInInInstruction,_o as makeSwapCpmmBaseOutInInstruction,od as makeSwapFixedInInstruction,id as makeSwapFixedOutInstruction,zu as makeSwapInstruction,er as makeTransferInstruction,Gu as makeWithdrawCpmmInInstruction,lr as makeWithdrawInstructionV3,cr as makeWithdrawInstructionV5,ur as makeWithdrawInstructionV6,LA as makeWithdrawTokenInstruction,th as mockCreatePoolInfo,Au as mockV3CreatePoolInfo,zm as modelDataInfoLayout,cu as mostSignificantBit,La as parseTokenAccountResp,mP as parseTokenInfo,tn as poolTypeV6,ys as purchaseLayout,Pm as realFarmStateV3Layout,hm as realFarmStateV5Layout,km as realFarmV6Layout,Yi as removeLiquidityInstruction,Xi as removeLiquidityLayout,gx as route1Instruction,wx as route2Instruction,Xd as routeInstruction,UP as simulatePoolInfoInstruction,pP as solToWSolToken,Zt as splAccountLayout,Nu as toAmmComputePoolInfo,ft as toApiV3Token,Rn as toFeeConfig,Ao as toToken,dr as toTokenAmount,dP as toTokenInfo,ji as trailingZeros,uu as u16ToBytes,YP as u32ToBytes,rK as unionArr,Km as updateFarmPoolInfo,Ri as validateFarmRewards,vm as voterStakeRegistryCreateDepositEntry,Em as voterStakeRegistryCreateVoter,Nm as voterStakeRegistryDeposit,Mm as voterStakeRegistryUpdateVoterWeightRecord,_m as voterStakeRegistryWithdraw,fP as wSolToSolToken,xi as withdrawRewardLayout};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map