@raydium-io/raydium-sdk-v2 0.1.35-alpha → 0.1.36-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/api.js +1 -1
- package/lib/api/api.js.map +1 -1
- package/lib/api/api.mjs +1 -1
- package/lib/api/api.mjs.map +1 -1
- package/lib/api/index.js +1 -1
- package/lib/api/index.js.map +1 -1
- package/lib/api/index.mjs +1 -1
- package/lib/api/index.mjs.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/raydium/index.js +1 -1
- package/lib/raydium/index.js.map +1 -1
- package/lib/raydium/index.mjs +1 -1
- package/lib/raydium/index.mjs.map +1 -1
- package/lib/raydium/raydium.js +1 -1
- package/lib/raydium/raydium.js.map +1 -1
- package/lib/raydium/raydium.mjs +1 -1
- package/lib/raydium/raydium.mjs.map +1 -1
- package/package.json +1 -1
- package/src/api/api.ts +3 -3
package/lib/raydium/raydium.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Su=Object.defineProperty,Ku=Object.defineProperties;var Cu=Object.getOwnPropertyDescriptors;var xr=Object.getOwnPropertySymbols;var ts=Object.prototype.hasOwnProperty,ns=Object.prototype.propertyIsEnumerable;var es=(o,e,t)=>e in o?Su(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))ts.call(e,t)&&es(o,t,e[t]);if(xr)for(var t of xr(e))ns.call(e,t)&&es(o,t,e[t]);return o},E=(o,e)=>Ku(o,Cu(e));var Ie=(o,e)=>{var t={};for(var n in o)ts.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&xr)for(var n of xr(o))e.indexOf(n)<0&&ns.call(o,n)&&(t[n]=o[n]);return t};import{merge as hd}from"lodash";import qs from"axios";import{get as rs,set as Ru}from"lodash";var No=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},os={},Lu={};function se(o){let e=rs(os,o);if(!e){let t=rs(Lu,o);e=new No({name:o,logLevel:t}),Ru(os,o,e)}return e}import{PublicKey as Wc}from"@solana/web3.js";import qc from"bn.js";import Ec from"big.js";import Dr from"bn.js";import et from"bn.js";var wn=9e15,Xt=1e9,Mo="0123456789abcdef",Kr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Cr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",_o={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wn,maxE:wn,crypto:!1},us,Mt,ne=!0,Lr="[DecimalError] ",Gt=Lr+"Invalid argument: ",cs=Lr+"Precision limit exceeded",ls=Lr+"crypto unavailable",ms="[object Decimal]",We=Math.floor,Re=Math.pow,Ou=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Nu=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Mu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ds=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,yt=1e7,ee=7,_u=9007199254740991,Vu=Kr.length-1,Vo=Cr.length-1,M={toStringTag:ms};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(Gt+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,u=i.s,c=o.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(i.e!==o.e)return i.e>o.e^u<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]^u<0?1:-1;return n===r?0:n>r^u<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=vu(n,gs(n,t)),n.precision=o,n.rounding=e,j(Mt==2||Mt==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,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ne=!1,i=l.s*Re(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=Ve(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Re(t,1/3),o=We((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=ge(c.plus(l).times(a),c.plus(u),s+2,1),Ve(a.d).slice(0,s)===(t=Ve(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 ne=!0,j(n,o,m.rounding,e)};M.decimalPlaces=M.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-We(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 ge(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return j(ge(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/Nr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=An(s,1,i.times(e),new s(1),!0);for(var u,c=o,l=new s(8);c--;)u=i.times(i),i=a.minus(u.times(l.minus(u.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=An(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Nr(5,o)),r=An(i,2,r,r,!0);for(var s,a=new i(5),u=new i(16),c=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(c))))}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,ge(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()?ft(t,r,i):new t(0):new t(NaN):e.isZero()?ft(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=ft(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,ne=!1,t=t.times(t).minus(1).sqrt().plus(t),ne=!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,ne=!1,t=t.times(t).plus(1).sqrt().plus(t),ne=!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=ge(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=ft(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,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Vo)return s=ft(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Vo)return s=ft(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),o=t;o;--o)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ne=!1,e=Math.ceil(a/ee),n=1,u=c.times(c),s=new l(c),r=c;o!==-1;)if(r=r.times(u),i=s.minus(r.div(n+=2)),r=r.times(u),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)),ne=!0,j(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&We(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,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.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(ne=!1,a=m+p,s=Ut(c,a),n=e?Rr(l,a+10):Ut(o,a),u=ge(s,n,a,1),Mn(u.d,r=m,d))do if(a+=10,s=Ut(c,a),n=e?Rr(l,a+10):Ut(o,a),u=ge(s,n,a,1),!i){+Ve(u.d).slice(r+1,r+15)+1==1e14&&(u=j(u,m+1,0));break}while(Mn(u.d,r+=10,d));return ne=!0,j(u,m,d)};M.minus=M.sub=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(c=p.d,d=o.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])o.s=-o.s;else if(c[0])o=new y(p);else return new y(u===3?-0:0);return ne?j(o,a,u):o}if(t=We(o.e/ee),l=We(p.e/ee),c=c.slice(),i=l-t,i){for(m=i<0,m?(e=c,i=-i,s=d.length):(e=d,t=l,s=c.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=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}i=0}for(m&&(e=c,c=d,d=e,o.s=-o.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>i;){if(c[--n]<d[n]){for(r=n;r&&c[--r]===0;)c[r]=yt-1;--c[r],c[n]+=yt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(o.d=c,o.e=Or(c,t),ne?j(o,a,u):o):new y(u===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):(ne=!1,n.modulo==9?(e=ge(t,o.abs(),0,3,1),e.s*=o.s):e=ge(t,o,0,n.modulo,1),e=e.times(o),ne=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return vo(this)};M.naturalLogarithm=M.ln=function(){return Ut(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,u,c,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(c=m.d,l=o.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(o=new d(m)),ne?j(o,a,u):o;if(i=We(m.e/ee),n=We(o.e/ee),c=c.slice(),r=i-n,r){for(r<0?(t=c,r=-r,s=l.length):(t=l,n=i,s=c.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=c.length,r=l.length,s-r<0&&(r=s,t=l,l=c,c=t),e=0;r;)e=(c[--r]=c[r]+l[r]+e)/yt|0,c[r]%=yt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return o.d=c,o.e=Or(c,n),ne?j(o,a,u):o};M.precision=M.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Gt+o);return t.d?(e=ps(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=Fu(n,gs(n,t)),n.precision=o,n.rounding=e,j(Mt>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,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(ne=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=Ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=We((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(i=n,n=i.plus(ge(s,i,t+2,1)).times(.5),Ve(i.d).slice(0,t)===(e=Ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(j(i,u+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,u+1,1),o=!n.times(n).eq(s));break}return ne=!0,j(n,u,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=ge(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,j(Mt==2||Mt==4?t.neg():t,o,e,!0)):new n(NaN)};M.times=M.mul=function(o){var e,t,n,r,i,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=We(l.e/ee)+We(o.e/ee),u=d.length,c=p.length,u<c&&(i=d,d=p,p=i,s=u,u=c,c=s),i=[],s=u+c,n=s;n--;)i.push(0);for(n=c;--n>=0;){for(e=0,r=u+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%yt|0,e=a/yt|0;i[r]=(i[r]+e)%yt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=Or(i,t),ne?j(o,m.precision,m.rounding):o};M.toBinary=function(o,e){return Fo(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:(Je(o,0,Xt),e===void 0?e=n.rounding:Je(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=Bt(n,!0):(Je(o,0,Xt),e===void 0?e=r.rounding:Je(e,0,8),n=j(new r(n),o+1,e),t=Bt(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=Bt(r):(Je(o,0,Xt),e===void 0?e=i.rounding:Je(e,0,8),n=j(new i(r),o+r.e+1,e),t=Bt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};M.toFraction=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),i=e.e=ps(y)-p.e-1,s=i%ee,e.d[0]=Re(10,s<0?ee+s:s),o==null)o=i>0?e:c;else{if(a=new f(o),!a.isInt()||a.lt(c))throw Error(Gt+a);o=a.gt(e)?i>0?e:c:a}for(ne=!1,a=new f(Ve(y)),l=f.precision,f.precision=i=y.length*ee*2;m=ge(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=c,c=u.plus(m.times(r)),u=r,r=e,e=a.minus(m.times(r)),a=r;return r=ge(o.minus(t),n,0,1,1),u=u.plus(r.times(c)),t=t.plus(r.times(n)),u.s=c.s=p.s,d=ge(c,n,i,1).minus(p).abs().cmp(ge(u,t,i,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ne=!0,d};M.toHexadecimal=M.toHex=function(o,e){return Fo(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:Je(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]?(ne=!1,t=ge(t,o,0,e,1).times(o),ne=!0,j(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Fo(this,8,o,e)};M.toPower=M.pow=function(o){var e,t,n,r,i,s,a=this,u=a.constructor,c=+(o=new u(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new u(Re(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,i=u.rounding,o.eq(1))return j(a,n,i);if(e=We(o.e/ee),e>=o.d.length-1&&(t=c<0?-c:c)<=_u)return r=fs(u,a,t,n),o.s<0?new u(1).div(r):j(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new u(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=Re(+a,c),e=t==0||!isFinite(t)?We(c*(Math.log("0."+Ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(ne=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=vo(o.times(Ut(a,n+t)),n),r.d&&(r=j(r,n+5,1),Mn(r.d,n,i)&&(e=n+10,r=j(vo(o.times(Ut(a,e+t)),e),e+5,1),+Ve(r.d).slice(n+1,n+15)+1==1e14&&(r=j(r,n+1,0)))),r.s=s,ne=!0,u.rounding=i,j(r,n,i))};M.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Bt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(Je(o,1,Xt),e===void 0?e=r.rounding:Je(e,0,8),n=j(new r(n),o,e),t=Bt(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):(Je(o,1,Xt),e===void 0?e=n.rounding:Je(e,0,8)),j(new n(t),o,e)};M.toString=function(){var o=this,e=o.constructor,t=Bt(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=Bt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function Ve(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=ee-n.length,t&&(i+=qt(t)),i+=n;s=o[e],n=s+"",t=ee-n.length,t&&(i+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function Je(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Gt+o)}function Mn(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=Re(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)==Re(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)==Re(10,e-3)-1,s}function Sr(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]+=Mo.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 vu(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Nr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=An(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 ge=function(){function o(n,r,i){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*r+a,n[u]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,u;if(i!=s)u=i>s?1:-1;else for(a=u=0;a<i;a++)if(n[a]!=r[a]){u=n[a]>r[a]?1:-1;break}return u}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,u){var c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I,L,q,F=n.constructor,$=n.s==r.s?1:-1,G=n.d,W=r.d;if(!G||!G[0]||!W||!W[0])return new F(!n.s||!r.s||(G?W&&G[0]==W[0]:!W)?NaN:G&&G[0]==0||!W?$*0:$/0);for(u?(p=1,l=n.e-r.e):(u=yt,p=ee,l=We(n.e/p)-We(r.e/p)),L=W.length,R=G.length,g=new F($),h=g.d=[],m=0;W[m]==(G[m]||0);m++);if(W[m]>(G[m]||0)&&l--,i==null?(T=i=F.precision,s=F.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<R||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/W|0,d=S%W|0;y=d||m<R}else{for(d=u/(W[0]+1)|0,d>1&&(W=o(W,d,u),G=o(G,d,u),L=W.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;q=W.slice(),q.unshift(0),I=W[0],W[1]>=u/2&&++I;do d=0,c=e(W,A,L,k),c<0?(B=A[0],L!=k&&(B=B*u+(A[1]||0)),d=B/I|0,d>1?(d>=u&&(d=u-1),f=o(W,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,L<b?q:W,b,u))):(d==0&&(c=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(W,A,L,k),c<1&&(d++,t(A,L<k?q:W,k,u))),k=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,us=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+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,u,c,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=ee,s=e,l=m[d=0],u=l/Re(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,r=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=ee,s=i-ee+r,u=s<0?0:l/Re(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Re(10,r-s-1)),c=t<4?(u||n)&&(t==0||t==(o.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(i>0?s>0?l/Re(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=o.e+1,m[0]=Re(10,(ee-e%ee)%ee),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Re(10,ee-i),m[d]=s>0?(l/Re(10,r-s)%Re(10,s)|0)*a:0),c)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,m[0]==yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=yt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return ne&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Bt(o,e,t){if(!o.isFinite())return bs(o);var n,r=o.e,i=Ve(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+qt(-r-1)+i,t&&(n=t-s)>0&&(i+=qt(n))):r>=s?(i+=qt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+qt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=qt(n))),i}function Or(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function Rr(o,e,t){if(e>Vu)throw ne=!0,t&&(o.precision=t),Error(cs);return j(new o(Kr),e,1,!0)}function ft(o,e,t){if(e>Vo)throw Error(cs);return j(new o(Cr),e,t,!0)}function ps(o){var e=o.length-1,t=e*ee+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function qt(o){for(var e="";o--;)e+="0";return e}function fs(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/ee+4);for(ne=!1;;){if(t%2&&(i=i.times(e),ss(i.d,s)&&(r=!0)),t=We(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ss(e.d,s)}return ne=!0,i}function is(o){return o.d[o.d.length-1]&1}function ys(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 vo(o,e){var t,n,r,i,s,a,u,c=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(ne=!1,u=y):u=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Re(2,m))/Math.LN10*2+5|0,u+=n,t=i=s=new d(1),d.precision=u;;){if(i=j(i.times(o),u,1),t=t.times(++l),a=s.plus(ge(i,t,u,1)),Ve(a.d).slice(0,u)===Ve(s.d).slice(0,u)){for(r=m;r--;)s=j(s.times(s),u,1);if(e==null)if(c<3&&Mn(s.d,u-n,p,c))d.precision=u+=10,t=i=a=new d(1),l=0,c++;else return j(s,d.precision=y,p,ne=!0);else return d.precision=y,s}s=a}}function Ut(o,e){var t,n,r,i,s,a,u,c,l,m,d,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?(ne=!1,l=A):l=e,g.precision=l+=y,t=Ve(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=Ve(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 c=Rr(g,l+2,A).times(i+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?j(f,A,h,ne=!0):f;for(m=f,u=s=f=ge(f.minus(1),f.plus(1),l,1),d=j(f.times(f),l,1),r=3;;){if(s=j(s.times(d),l,1),c=u.plus(ge(s,new g(r),l,1)),Ve(c.d).slice(0,l)===Ve(u.d).slice(0,l))if(u=u.times(2),i!==0&&(u=u.plus(Rr(g,l+2,A).times(i+""))),u=ge(u,new g(p),l,1),e==null)if(Mn(u.d,l-y,h,a))g.precision=l+=y,c=s=f=ge(m.minus(1),m.plus(1),l,1),d=j(f.times(f),l,1),r=a=1;else return j(u,g.precision=A,h,ne=!0);else return g.precision=A,u;u=c,r+=2}}function bs(o){return String(o.s*o.s/0)}function Eo(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),ne&&(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 Eu(o,e){var t,n,r,i,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ds.test(e))return Eo(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(Nu.test(e))t=16,e=e.toLowerCase();else if(Ou.test(e))t=2;else if(Mu.test(e))t=8;else throw Error(Gt+e);for(i=e.search(/p/i),i>0?(u=+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=fs(n,new n(t),i,i*2)),c=Sr(e,t,yt),l=c.length-1,i=l;c[i]===0;--i)c.pop();return i<0?new n(o.s*0):(o.e=Or(c,l),o.d=c,ne=!1,s&&(o=ge(o,r,a*4)),u&&(o=o.times(Math.abs(u)<54?Re(2,u):_n.pow(2,u))),ne=!0,o)}function Fu(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:An(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Nr(5,t)),e=An(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 An(o,e,t,n,r){var i,s,a,u,c=1,l=o.precision,m=Math.ceil(l/ee);for(ne=!1,u=t.times(t),a=new o(n);;){if(s=ge(a.times(u),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=ge(s.times(u),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,c++}return ne=!0,s.d.length=m+1,s}function Nr(o,e){for(var t=o;--e;)t*=o;return t}function gs(o,e){var t,n=e.s<0,r=ft(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Mt=n?4:1,e;if(t=e.divToInt(r),t.isZero())Mt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Mt=is(t)?n?2:3:n?4:1,e;Mt=is(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Fo(o,e,t,n){var r,i,s,a,u,c,l,m,d,p=o.constructor,y=t!==void 0;if(y?(Je(t,1,Xt),n===void 0?n=p.rounding:Je(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=bs(o);else{for(l=Bt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Sr(Bt(d),10,r),d.e=d.d.length),m=Sr(l,10,r),i=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=ge(o,d,t,n,0,r),m=o.d,i=o.e,c=us),s=m[t],a=r/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,c)for(;++m[--t]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Mo.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Sr(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Mo.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>u)for(i-=u;i--;)l+="0";else i<u&&(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 ss(o,e){if(o.length>e)return o.length=e,!0}function Du(o){return new this(o).abs()}function Wu(o){return new this(o).acos()}function qu(o){return new this(o).acosh()}function Uu(o,e){return new this(o).plus(e)}function Gu(o){return new this(o).asin()}function Xu(o){return new this(o).asinh()}function zu(o){return new this(o).atan()}function Yu(o){return new this(o).atanh()}function Qu(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=ft(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?ft(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=ft(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ge(o,e,i,1)),e=ft(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(ge(o,e,i,1)),t}function ju(o){return new this(o).cbrt()}function Hu(o){return j(o=new this(o),o.e+1,2)}function Zu(o,e,t){return new this(o).clamp(e,t)}function Ju(o){if(!o||typeof o!="object")throw Error(Lr+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Xt,"rounding",0,8,"toExpNeg",-wn,0,"toExpPos",0,wn,"maxE",0,wn,"minE",-wn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=_o[t]),(n=o[t])!==void 0)if(We(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",r&&(this[t]=_o[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(ls);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function $u(o){return new this(o).cos()}function ec(o){return new this(o).cosh()}function ws(o){var e,t,n;function r(i){var s,a,u,c=this;if(!(c instanceof r))return new r(i);if(c.constructor=r,as(i)){c.s=i.s,ne?!i.d||i.e>r.maxE?(c.e=NaN,c.d=null):i.e<r.minE?(c.e=0,c.d=[0]):(c.e=i.e,c.d=i.d.slice()):(c.e=i.e,c.d=i.d?i.d.slice():i.d);return}if(u=typeof i,u==="number"){if(i===0){c.s=1/i<0?-1:1,c.e=0,c.d=[0];return}if(i<0?(i=-i,c.s=-1):c.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;ne?s>r.maxE?(c.e=NaN,c.d=null):s<r.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[i]):(c.e=s,c.d=[i]);return}else if(i*0!==0){i||(c.s=NaN),c.e=NaN,c.d=null;return}return Eo(c,i.toString())}else if(u!=="string")throw Error(Gt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),c.s=-1):(a===43&&(i=i.slice(1)),c.s=1),ds.test(i)?Eo(c,i):Eu(c,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=Ju,r.clone=ws,r.isDecimal=as,r.abs=Du,r.acos=Wu,r.acosh=qu,r.add=Uu,r.asin=Gu,r.asinh=Xu,r.atan=zu,r.atanh=Yu,r.atan2=Qu,r.cbrt=ju,r.ceil=Hu,r.clamp=Zu,r.cos=$u,r.cosh=ec,r.div=tc,r.exp=nc,r.floor=rc,r.hypot=oc,r.ln=ic,r.log=sc,r.log10=uc,r.log2=ac,r.max=cc,r.min=lc,r.mod=mc,r.mul=dc,r.pow=pc,r.random=fc,r.round=yc,r.sign=bc,r.sin=gc,r.sinh=wc,r.sqrt=Ac,r.sub=hc,r.sum=Pc,r.tan=kc,r.tanh=Tc,r.trunc=Ic,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 tc(o,e){return new this(o).div(e)}function nc(o){return new this(o).exp()}function rc(o){return j(o=new this(o),o.e+1,3)}function oc(){var o,e,t=new this(0);for(ne=!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 ne=!0,new this(1/0);t=e}return ne=!0,t.sqrt()}function as(o){return o instanceof _n||o&&o.toStringTag===ms||!1}function ic(o){return new this(o).ln()}function sc(o,e){return new this(o).log(e)}function ac(o){return new this(o).log(2)}function uc(o){return new this(o).log(10)}function cc(){return ys(this,arguments,"lt")}function lc(){return ys(this,arguments,"gt")}function mc(o,e){return new this(o).mod(e)}function dc(o,e){return new this(o).mul(e)}function pc(o,e){return new this(o).pow(e)}function fc(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:Je(o,1,Xt),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(ls);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=ee,n&&o&&(r=Re(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 yc(o){return j(o=new this(o),o.e+1,this.rounding)}function bc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function gc(o){return new this(o).sin()}function wc(o){return new this(o).sinh()}function Ac(o){return new this(o).sqrt()}function hc(o,e){return new this(o).sub(e)}function Pc(){var o=0,e=arguments,t=new this(e[o]);for(ne=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return ne=!0,j(t,this.precision,this.rounding)}function kc(o){return new this(o).tan()}function Tc(o){return new this(o).tanh()}function Ic(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 _n=M.constructor=ws(_o);Kr=new _n(Kr);Cr=new _n(Cr);var _=_n;import{PublicKey as Go}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bc}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as As,SYSVAR_RENT_PUBKEY as xc}from"@solana/web3.js";function P({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Do=[P({pubkey:Bc,isWritable:!1}),P({pubkey:As.programId,isWritable:!1}),P({pubkey:xc,isWritable:!1})];function Wo({publicKey:o,transformSol:e}){let t=qo(o.toString());if(t instanceof Ae)return e&&t.equals(Le)?H:t;if(e&&t.toString()===Le.toBase58())return H;if(typeof t=="string"){if(t===Ae.default.toBase58())return Ae.default;try{return new Ae(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function qo(o){try{return new Ae(o)}catch{return o}}var Mr=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),_r=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),bt=new Ae("SysvarRent111111111111111111111111111111111"),hs=new Ae("SysvarC1ock11111111111111111111111111111111"),hn=new Ae("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Sc=new Ae("Sysvar1nstructions1111111111111111111111111"),Uo=As.programId,Kd=new Ae("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Cd=new Ae("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Rd=new Ae("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Ld=new Ae("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Od=new Ae("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Nd=new Ae("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Md=new Ae("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),_d=new Ae("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Vd=new Ae("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),vd=new Ae("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Ed=new Ae("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Ae("So11111111111111111111111111111111111111112"),Le=Ae.default;function nt(o){return Wo({publicKey:o,transformSol:!0})}import{PublicKey as Kc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ps}from"@solana/spl-token";var zt={chainId:101,address:Kc.default.toBase58(),programId:Ps.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ps.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 Xo=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Le.toBase58()||e instanceof Go&&Le.equals(e)){this.decimals=ve.decimals,this.symbol=ve.symbol,this.name=ve.name,this.mint=new Go(ve.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?Go.default:Wo({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},he=Xo;he.WSOL=new Xo(E(C({},ve),{mint:ve.address}));import vr from"big.js";import Lc from"bn.js";import Oc from"decimal.js-light";import Cc from"toformat";var Rc=Cc,Vn=Rc;var Vr=se("module/fraction"),zo=Vn(vr),vn=Vn(Oc),Nc={[0]:vn.ROUND_DOWN,[1]:vn.ROUND_HALF_UP,[2]:vn.ROUND_UP},Mc={[0]:vr.roundDown,[1]:vr.roundHalfUp,[2]:vr.roundUp},de=class{constructor(e,t=new Lc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Vr.logWithError(`${e} is not an integer.`),e<=0&&Vr.logWithError(`${e} is not positive.`),vn.set({precision:e+1,rounding:Nc[n]});let r=new vn(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)||Vr.logWithError(`${e} is not an integer.`),e<0&&Vr.logWithError(`${e} is negative.`),zo.DP=e,zo.RM=Mc[n]||1,new zo(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Vc=se("Raydium_price"),$e=class extends de{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new de(Yo(n.decimals),Yo(r.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Vc.logWithError("mul token not equals");let n=super.mul(t);return new $e({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 Qo=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Er=Qo;Er.SOL=new Qo(zt);import vc from"bn.js";var ks=new de(new vc(100)),Qe=class extends de{toSignificant(e=5,t,n){return this.mul(ks).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(ks).toFixed(e,t,n)}};var at=new et(0),Is=new et(1),Mp=new et(2),_p=new et(3),Vp=new et(5),jo=new et(10),vp=new et(100),Ep=new et(1e3),Fp=new et(1e4),Ts=9007199254740991;function Z(o){let e=se("Raydium_parseBigNumberish");if(o instanceof et)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new et(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Ts||o<=-Ts)&&e.logWithError(`BigNumberish number overflow: ${o}`),new et(String(o))):typeof o=="bigint"?new et(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new et(0))}function Yo(o){return jo.pow(Z(o))}function Fr(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 Fc=se("Raydium_amount"),xs=Vn(Ec);function Dc(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")):Fc.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,r=!0,i){let s=new Dr(0),a=jo.pow(new Dr(t.decimals));if(r)s=Z(n);else{let u=new Dr(0),c=new Dr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Dc(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(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 xs.DP=this.token.decimals,new xs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Bs(o){return typeof o=="object"&&o!==null&&![he,ye,Wc,de,qc,$e,Qe].some(e=>typeof e=="object"&&o instanceof e)}function Ee(o){return typeof o=="string"?qo(o):Array.isArray(o)?o.map(e=>Ee(e)):Bs(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ee(t)])):o}import{PublicKey as Dn,sendAndConfirmTransaction as ei,Transaction as Wn,TransactionMessage as qn,VersionedTransaction as Un}from"@solana/web3.js";import Zc from"axios";var v={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as Uc,ComputeBudgetProgram as Ss,Transaction as Cs,TransactionMessage as Gc,Keypair as Rs,VersionedTransaction as Ls}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xc}from"@solana/spl-token";var Ks=se("Raydium_txUtil"),Os=1644;function Wr(o){let e=[],t=[];return o.microLamports&&(e.push(Ss.setComputeUnitPrice({microLamports:o.microLamports})),t.push(v.SetComputeUnitPrice)),o.units&&(e.push(Ss.setComputeUnitLimit({units:o.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Pn(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 Ho(o,e){o.length<1&&Ks.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Ks.logWithError(`no signers provided:, ${e.toString()}`);let t=new Cs;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Os}catch{return!1}}function le(o,e){let[t,n]=Uc.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function En({instructions:o,payer:e,signers:t}){return Ho(o,[e,...t])}function Fn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Rs.generate().publicKey.toString()}){let i=new Gc({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Ls(i).serialize()).toString("base64").length<Os}catch{return!1}}var zc=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function tn(o){let e=[];return o.forEach(t=>{t instanceof Cs&&(t.recentBlockhash||(t.recentBlockhash=Xc.toBase58()),t.feePayer||(t.feePayer=Rs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Ls&&(n=zc(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as Ms,AddressLookupTableAccount as qr}from"@solana/web3.js";import{PublicKey as Ns}from"@solana/web3.js";import{MINT_SIZE as Yc,TOKEN_PROGRAM_ID as Qc,getTransferFeeConfig as jc,unpackMint as Hc}from"@solana/spl-token";var Zo=se("Raydium_accountInfo_util");async function gt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=Jo(e,i),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Jo(u,10);a=(await(await Promise.all(c.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Zo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Zo.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ns(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>o.getMultipleAccountsInfo(u,r)))}catch(u){u instanceof Error&&Zo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ne(o,e,t){let n=await gt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>E(C({},r),{accountInfo:n[i]}))}async function kn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ne(o,e.map(u=>({pubkey:nt(u)})),t),r={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<Yc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=Hc(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);r[u.pubkey.toString()]=E(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||Qc,feeConfig:(a=jc(c))!=null?a:void 0})}return r[Ns.default.toBase58()]=r[H.toBase58()],r}async function $o({connection:o,address:e}){let t=await gt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new Ms(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new qr({key:s,state:qr.deserialize(i.data)});n[s.toString()]=a,Ur[s.toString()]=a}return n}var Ur={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new qr({key:new Ms("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:qr.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 Gr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Zc.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}=Wr(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!==Dn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new Wn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var c;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},u=i!=null?i:await Pn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),tn([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await ei(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Pn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let A=await ei(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 await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));tn(g);let h=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});A.push(B)}return{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=d,i=Ie(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:Ur),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of a)s[y]===void 0&&u.push(new Dn(y));let c=await $o({connection:this.connection,address:u});for(let[y,f]of Object.entries(c))s[y]=f;let l=new qn({payerKey:this.feePayer,recentBlockhash:r?Dn.default.toBase58():await Pn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Un(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),tn([m]),(h=this.owner)!=null&&h.isKeyPair){let A=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:A},"confirmed")}return{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(A[0],{skipPreflight:b}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),tn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let A=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Ie(c,["computeBudgetConfig"]),r=t?Wr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Dn(b));if(u.length<12&&En({instructions:p,payer:this.feePayer,signers:f})||En({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Pn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,A)=>{h.recentBlockhash=b,a[A].length&&h.sign(...a[A])}),tn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let A of s){let k=await ei(this.connection,A,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,i=Ie(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:Ur),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of a)s[h]===void 0&&u.push(new Dn(h));let c=await $o({connection:this.connection,address:u});for(let[h,A]of Object.entries(c))s[h]=A;let l=t?Wr(t):{instructions:[],instructionTypes:[]},m=await Pn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,A)=>E(C({},h),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let A=[...f,h],k=t?[...l.instructions,...A]:A;if(f.length<12&&Fn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Fn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}else{let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}else{let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(A=>A.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),tn(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:q}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:q,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,I=[],L=async()=>{if(!x[R])return;let q=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:q,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(q,F=>{let $=I.findIndex(G=>G.txId===q);$>-1&&(I[$].status=F.err?"error":"success"),k==null||k([...I]),F.err||L()},"processed"),this.connection.getSignatureStatus(q)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var wt=class{constructor(e){this._owner=e}get publicKey(){return wt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return wt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return wt.isKeyPair(this._owner)}get isPublicKey(){return wt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!wt.isKeyPair(e)}};function Jo(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var _s=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Vs=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Hf=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Zf=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ti=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),vs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Jf=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Es=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Fs=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),$f=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ey=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Jc=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),$c=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),el=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),tl=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ds=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ty=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ny=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),nl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),rl=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ol=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),zn={IDO_PROGRAM_ID_V1:Jc,IDO_PROGRAM_ID_V2:$c,IDO_PROGRAM_ID_V3:el,IDO_PROGRAM_ID_V4:tl};var ry={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:nl,CREATE_CPMM_POOL_AUTH:rl,CREATE_CPMM_POOL_FEE_ACC:ol,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as il}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sl}from"@solana/spl-token";function Pe(o,e,t){return le([o.toBuffer(),(t!=null?t:sl).toBuffer(),e.toBuffer()],new il("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import At from"bn.js";var Yn=1e4;function we(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=E(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new At(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===Yn){let u=new At(i.maximumFee.toString());return{amount:o.add(u),fee:u,expirationTime:a}}else{let u=Qn(o.mul(new At(Yn)),new At(Yn-i.transferFeeBasisPoints)),c=new At(i.maximumFee.toString()),l=u.sub(o).gt(c)?o.add(c):u,m=Qn(l.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Qn(o.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),c=u.gt(s)?s:u;return{amount:o,fee:c,expirationTime:a}}}function xt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function Qn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new At(0))?t.add(new At(1)):t}var Ce={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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Cy=C({},Ce);var Ws="ray_tab_hash",ni="ray_req_hash",al=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Ws);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Ws,o)),o},Xr=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Ie(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(ni)||"[]").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(E(C({},t),{time:Date.now(),session:al()}));try{localStorage.setItem(ni,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 u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ni,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(u=>u())}return Xr(E(C({},t),{logCount:o,removeLastLog:!0}))}};var zr=se("Raydium_Api"),ri=new Map;var Yr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=qs.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return zr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(zr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&Xr({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),zr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&Xr({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),zr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await qs.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||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.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||Ce.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||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>ri.has(s)?(n.push(ri.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{ri.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,[u,c]=[t&&nt(t).toBase58(),n&&n!=="undefined"?nt(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var Qr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Us="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as fi,TOKEN_PROGRAM_ID as jt,AccountLayout as Bn,TOKEN_2022_PROGRAM_ID as vl}from"@solana/spl-token";import{PublicKey as no,SystemProgram as El}from"@solana/web3.js";var oi=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new Gr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(oi(e))}logInfo(...e){this.logger.info(oi(e))}logAndCreateError(...e){let t=oi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Ll,createCloseAccountInstruction as Ol,createTransferInstruction as Nl,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";import{PublicKey as Ml,SystemProgram as _l}from"@solana/web3.js";import Vl from"bn.js";import{PublicKey as ra,Keypair as Sl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kl}from"@solana/spl-token";import Cl from"bn.js";import{PublicKey as hl}from"@solana/web3.js";import Qs,{isBN as js}from"bn.js";import{bits as cl,BitStructure as cb,blob as ll,Blob as lb,cstr as mb,f32 as db,f32be as pb,f64 as fb,f64be as yb,greedy as bb,Layout as ml,ns64 as gb,ns64be as wb,nu64 as dl,nu64be as Ab,offset as hb,s16 as Pb,s16be as kb,s24 as Tb,s24be as Ib,s32 as pl,s32be as Bb,s40 as xb,s40be as Sb,s48 as Kb,s48be as Cb,s8 as Rb,seq as fl,struct as Lb,Structure as yl,u16 as bl,u16be as Ob,u24 as Nb,u24be as Mb,u32 as gl,u32be as _b,u40 as Vb,u40be as vb,u48 as Eb,u48be as Fb,u8 as wl,UInt as Al,union as Db,Union as Wb,unionLayoutDiscriminator as qb,utf8 as Ub}from"@solana/buffer-layout";var jr=ml,Gs=yl;var ii=Al;var Xs=wl,St=bl;var si=gl;var zs=dl;var Fe=pl;var Ys=fl;var pe=ll;var ai=cl;var nn=class extends jr{constructor(t,n,r){super(t,r);this.blob=pe(t),this.signed=n}decode(t,n=0){let r=new Qs(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 Qs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Hr=class extends jr{constructor(t){super(8,t);this._lower=ai(si(),!1),this._upper=ai(si(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function D(o){return new ii(1,o)}function je(o){return new ii(4,o)}function w(o){return new nn(8,!1,o)}function Y(o){return new nn(16,!1,o)}function Hs(o){return new nn(1,!0,o)}function Jr(o){return new nn(8,!0,o)}function Zs(o){return new nn(16,!0,o)}var Zr=class extends jr{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 Zr(pe(32),e=>new hl(e),e=>e.toBuffer(),o)}function qe(o){return new Zr(Xs(),Pl,kl,o)}function Pl(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function kl(o){return o?1:0}var ui=class extends Gs{decode(e,t){return super.decode(e,t)}};function V(o,e,t){return new ui(o,e,t)}function X(o,e,t){let n,r=typeof e=="number"?e:js(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=js(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 Ys(o,r,t)}var Tn=V([K("mint"),K("owner"),w("amount"),je("delegateOption"),K("delegate"),D("state"),je("isNativeOption"),w("isNative"),w("delegatedAmount"),je("closeAuthorityOption"),K("closeAuthority")]);function Tl(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function ci(o,...e){if(!Tl(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 li(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 Js(o,e){ci(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var eo=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),ht=(o,e)=>o<<32-e|o>>>e;var og=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Il(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function mi(o){return typeof o=="string"&&(o=Il(o)),ci(o),o}var $r=class{clone(){return this._cloneInto()}},ig={}.toString;function $s(o){let e=n=>o().update(mi(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Bl(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),u=n?4:0,c=n?0:4;o.setUint32(e+u,s,n),o.setUint32(e+c,a,n)}var ea=(o,e,t)=>o&e^~o&t,ta=(o,e,t)=>o&e^o&t^e&t,to=class extends $r{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=eo(this.buffer)}update(e){li(this);let{view:t,buffer:n,blockLen:r}=this;e=mi(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let u=eo(e);for(;r<=i-s;s+=r)this.process(u,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){li(this),Js(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Bl(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=eo(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var xl=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]),Yt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Qt=new Uint32Array(64),di=class extends to{constructor(){super(64,32,8,!1),this.A=Yt[0]|0,this.B=Yt[1]|0,this.C=Yt[2]|0,this.D=Yt[3]|0,this.E=Yt[4]|0,this.F=Yt[5]|0,this.G=Yt[6]|0,this.H=Yt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:u}=this;return[e,t,n,r,i,s,a,u]}set(e,t,n,r,i,s,a,u){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=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)Qt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Qt[m-15],p=Qt[m-2],y=ht(d,7)^ht(d,18)^d>>>3,f=ht(p,17)^ht(p,19)^p>>>10;Qt[m]=f+Qt[m-7]+y+Qt[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=ht(a,6)^ht(a,11)^ht(a,25),p=l+d+ea(a,u,c)+xl[m]+Qt[m]|0,f=(ht(n,2)^ht(n,13)^ht(n,22))+ta(n,r,i)|0;l=c,c=u,u=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,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,u,c,l)}roundClean(){Qt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var na=$s(()=>new di);var kg=se("Raydium_Util");function oa({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=Tn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:i,mint:u,amount:c,isAssociated:Pe(o,u,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 Cl(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ue({fromPublicKey:o,programId:e=Kl}){let t=Sl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Rl(o,t,e),seed:t}}function Rl(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=na(n);return new ra(r)}function pi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=In}=o;return Ll(t,e,n,r)}function Kt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=In}=o;return Ol(e,t,r,n,i)}async function _t(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(Tn.span,n),u=Z(t).add(new Vl(a)),c=Ue({fromPublicKey:r,programId:In});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[_l.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Tn.span,programId:In}),pi({mint:new Ml(ve.address),tokenAccount:c.publicKey,owner:i,programId:In})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Kt({tokenAccount:c.publicKey,payer:r,owner:i})]}}function jn({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=In}){return Nl(o,e,t,BigInt(String(n)),r,i)}var Hn=class extends ke{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 Pe(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:jt},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:vl},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=oa({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,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:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=jt,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!r||r&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new no(t.tokenProgram||jt),m=this.getAssociatedTokenAccount(n,new no(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=fi(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(A.owner.equals(l)&&Bn.decode(A.data).mint.equals(n)&&Bn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(v.CreateATA);if(n.equals(H)&&r.amount){let A=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:u});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(jn({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:jt})),p.instructionTypes.push(v.TransferAmount))}return u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ue({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Bn.span),k=El.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:Bn.span,programId:l});return p.instructions.push(k,pi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=jt,autoUnwrapWSOLToSOL:r}){var u;await this.fetchWalletTokenAccounts();let i=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let c=this.getAssociatedTokenAccount(t,n),l=await fi(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=c}return r&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Kt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=jt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new no(H).equals(i)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=fi(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(jt)&&Bn.decode(f.data).mint.equals(i)&&Bn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[v.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=jt,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new no(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Ie(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Ie(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as tm}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as nm}from"@solana/web3.js";import{PublicKey as aa}from"@solana/web3.js";var yi=V([D("instruction")]),bi=V([D("instruction")]),Fl=V([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Dl=V([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),Wl=V([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),D("option"),K("rewardVaultB"),pe(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),ql=V([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Fl,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Ul=new Proxy(Dl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),Gl=new Proxy(Wl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),ro=new Proxy(ql,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(Ht).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Xl=V([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),gi=V([D("instruction"),w("nonce"),X(Xl,5,"rewardTimeInfo")]),wi=V([D("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Ai=V([D("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),ew=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),hi=V([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),tw=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),ia=V([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),2,"rewardDebts"),X(w(),17)]),sa=V([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Y(),5,"rewardDebts"),X(w(),16)]),rt=V([D("instruction"),w("amount")]),zl=V([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Hs("digitShift"),X(D(),7,"reserved1"),X(w(),7,"reserved2")]),Yl=V([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(D(),32,"reserved1"),X(zl,4,"votingMints"),Jr("timeOffset"),D("bump"),X(D(),7,"reserved2"),X(w(),11,"reserved3")]),Ql=V([Jr("startTime"),Jr("endTime"),D("kind"),X(D(),15,"reserved")]),jl=V([X(Ql,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),D("votingMintConfigIdx"),X(D(),29,"reserved")]),Hl=V([pe(8),K("voterAuthority"),K("registrar"),X(jl,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),X(D(),94,"reserved")]);var cw=se("Raydium_farm_config"),ua=new aa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ca=new aa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var la={3:hi,5:ia,6:sa},Pi=o=>[3,5,6].indexOf(o)!==-1,ki=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)},Ht={"Standard SPL":0,"Option tokens":1},ut={[_s.toString()]:3,[Vs.toString()]:5,[Xn.toString()]:6};import{PublicKey as me,SystemProgram as pa,SYSVAR_RENT_PUBKEY as $l,SYSVAR_CLOCK_PUBKEY as oo,TransactionInstruction as Pt}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Dw,TOKEN_PROGRAM_ID as Zt,ASSOCIATED_TOKEN_PROGRAM_ID as Ww}from"@solana/spl-token";import fa from"bn.js";import Zl from"bn.js";var Jl=se("Raydium.farm.util");function Zn({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function ct({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var ma=({programId:o,poolId:e})=>le([e.toBuffer()],o);function da(o){return{isSet:new Zl(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(Ht[o.rewardType])}}function Ti(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function Jn(o){let e=la[o];return e||Jl.logWithError("invalid version",o),e}var em=se("Raydium_farm_instruction"),eA={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 $n(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||em.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(yi.span);yi.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:pa.programId,isWritable:!1}),P({pubkey:$l,isWritable:!1})];return{instruction:new Pt({programId:r,keys:u,data:a}),instructionType:v.FarmV3CreateLedger}}function ya(o){var n;let e=Buffer.alloc(gi.span);gi.encode({instruction:0,nonce:new fa(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Do,P({pubkey:o.farmId}),P({pubkey:o.farmAuthority,isWritable:!1}),P({pubkey:o.lpVault}),P({pubkey:o.lpMint,isWritable:!1}),P({pubkey:o.lockVault}),P({pubkey:o.lockMint,isWritable:!1}),P({pubkey:(n=o.lockUserAccount)!=null?n:Le}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function ba(o){let e=Buffer.alloc(bi.span);bi.encode({instruction:5},e);let t=[P({pubkey:Zt,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.lpVault,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Ii({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(wi.span);wi.encode({instruction:3,rewardReopenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardPerSecond:Z(r.perSecond)},i);let s=[P({pubkey:Zt,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:n.programId,keys:s,data:i})}function Bi({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Ai.span);Ai.encode({instruction:4,isSet:new fa(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(Ht[r.rewardType])},i);let s=[...Do,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:t.programId,keys:s,data:i})}function er(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}function tr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function nr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ga(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function wa(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function Aa(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:pa.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}var rr=class extends ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Le)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ti(E(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:r=Xn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:ua,lockVault:ca},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ue({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);u.addInstruction({instructions:[nm.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=ma({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(Ht[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(da(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Le)?new fe(ve.address):B.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=ya({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Le)?new fe(ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Le,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ii({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Le)?new fe(ve.address):m.mint,p=a.rewardInfos.findIndex(A=>new fe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Le,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Ii({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Le)?new fe(ve.address):r.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,c.addInstruction({instructions:[Bi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Le)?new fe(ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Bi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ut[d];Pi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ct({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let F of this.scope.account.tokenAccounts)if(a){let $=Pe(this.scope.ownerPubKey,F.mint,F.programId).publicKey;F.publicKey&&$.equals(F.publicKey)&&(A[F.mint.toString()]=F.publicKey)}else A[F.mint.toString()]=F.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let F of m){let $=s&&F.mint.address===H.toString(),G=A[F.mint.address];if(!G){let{account:W,instructionParams:Ye}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new fe(F.mint.address),notUseTokenAccount:$,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!$,associatedOnly:$?!1:a,checkCreateATAOwner:u});G=W,Ye&&h.addInstruction(Ye)}A[F.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Jn(p).decode(x.data)),n.programId!==Xn.toString()&&!S){let{instruction:F,instructionType:$}=$n({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[F],instructionTypes:[$]})}let R=ki({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(F=>new fe(F))},L=p===6?Aa(I):p===5?wa(I):ga(I),q={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[q[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ut[n.programId];Pi(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(u){let I=Pe(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=ct({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Jn(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:q}=$n({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[q]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===H.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=R,I&&f.addInstruction(I)}b[g.toString()]=A;let k=[];for(let R of d){let I=s&&R.mint.address===H.toString(),L=b[R.mint.address];if(!L){let{account:q,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new fe(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:u,checkCreateATAOwner:c});L=q,F&&f.addInstruction(F)}b[R.mint.address]=L,k.push(L)}let B=ki({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new fe(R))},S=p===6?er(T):p===5?tr(T):nr(T),x={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Le.toString()?new fe(ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Le,c=this.createTxBuilder(),l;if(t.equals(Le)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ti(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new _(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[tm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=ba({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Pe(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],k=b.address,B=n&&k===H.toString(),T=m[k];if(!T){let{account:q,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=q,F&&l.addInstruction(F)}m[k.toString()]=T;let S=[];for(let q of g){let F=n&&q.mint.address===H.toString(),$=m[q.mint.address];if(!$){let{account:G,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:q.mint.programId,mint:new fe(q.mint.address),notUseTokenAccount:F,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:i,checkCreateATAOwner:s});$=G,W&&l.addInstruction(W)}m[q.mint.address]=$,S.push($)}let x=p[h],R={amount:at,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(q=>new fe(q))},I=A===6?er(R):A===5?tr(R):nr(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Xe}from"@solana/web3.js";import{AccountLayout as Em,NATIVE_MINT as $a,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";var TA=V([je("mintAuthorityOption"),K("mintAuthority"),w("supply"),D("decimals"),D("isInitialized"),je("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as SA}from"@solana/web3.js";import{MintLayout as CA,TOKEN_PROGRAM_ID as LA}from"@solana/spl-token";var io=o=>new he({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),or=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Ie(i,["amount","isRaw","name"]);return new ye(new he({mint:nt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var He=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Ie(i,["address","programId","decimals"]);return C({chainId:101,address:nt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Jt=o=>o?E(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:E(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as sr,ASSOCIATED_TOKEN_PROGRAM_ID as bm}from"@solana/spl-token";import{PublicKey as Ct,TransactionInstruction as Sn,SystemProgram as gm,SYSVAR_RENT_PUBKEY as nh}from"@solana/web3.js";var xi=V([D("instruction"),w("amountIn"),w("minAmountOut")]),Si=V([D("instruction"),w("maxAmountIn"),w("amountOut")]),YA=V([D("instruction"),D("nonce")]),rm=V([D("instruction"),D("nonce"),w("startTime")]),so=V([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),QA=V([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Ki=V([D("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Ci=V([D("instruction"),w("amountIn")]);var ha=V([w("fee")]);import{PublicKey as om}from"@solana/web3.js";var xn=new om("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),on=5e4,im=V([w("x"),w("y"),w("price")]),sm=V([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(im,on,"DataElement")]);function am(o,e){return[0,on-2]}function um(o){return[0,on-2]}function cm(o){return[0,on-2]}function lm(o,e,t){let[n,r]=am(e,t),i=n,s=r,a=0,u=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=on-2)return[a,a,!1];let c=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ri(o,e,t){let[n,r,i]=lm(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,u=o.DataElement[r].x,c=o.DataElement[r].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*o.multiplier*l/p}}function rn(o,e,t){return e*o.multiplier/t}function Pa(o,e,t){return e*t/o.multiplier}function mm(o,e){let[t,n]=um(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>on-2)return[s,s,!1];let u=o.DataElement[s].x,c=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)i=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function dm(o,e){let[t,n]=cm(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=on-2)return[s,s,!1];let u=o.DataElement[s].y,c=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function ka(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=mm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(r-u)*o.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-r)*o.multiplier/l),[y,f,!1,a]}}}function pm(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=dm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function fm(o,e){let t=ka(o,e,0,!1);return t[3]?t[0]:0}function Ta(o,e,t,n){let r=Ri(o,e,t),i=rn(o,e,r),s=rn(o,t,r),a=rn(o,n,r),u=!0,[c,l,m,d]=ka(o,i,a,u);if(!d)return 0;if(m)return n*o.multiplier/c;{let p=s-l;return Pa(o,p,r)}}function Ia(o,e,t,n){let r=Ri(o,e,t),i=rn(o,e,r),s=rn(o,t,r),a=rn(o,n,r),u=!1,[c,l,m,d]=pm(o,s,a,u);if(!d)return 0;if(m)return n*c/o.multiplier;{let p=i-l;return Pa(o,p,r)}}function ym(o){let e=sm.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 Ba(o,e,t,n){let r=fm(o,rn(o,e,Ri(o,e,t)))/o.multiplier;return n?r:1/r}var ir=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(xn);e&&(this._layoutData=ym(e==null?void 0:e.data))}}};var xa=se("Raydium_liquidity_instruction");function Sa(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Ki.span);Ki.encode({instruction:3,baseAmountIn:Z(r),quoteAmountIn:Z(i),fixedSide:s==="base"?at:Is},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:new Ct(e.id)}),P({pubkey:new Ct(t.authority),isWritable:!1}),P({pubkey:new Ct(t.openOrders),isWritable:!1}),P({pubkey:new Ct(t.targetOrders)}),P({pubkey:new Ct(e.lpMint.address)}),P({pubkey:new Ct(t.vault.A)}),P({pubkey:new Ct(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:xn})),u.push(P({pubkey:new Ct(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Ct(t.marketEventQueue),isWritable:!1})),new Sn({programId:new Ct(e.programId),keys:u,data:a})}function Li(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Ci.span);Ci.encode({instruction:4,amountIn:Z(r)},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?u.push(P({pubkey:xn})):(u.push(P({pubkey:i.id})),u.push(P({pubkey:i.id}))),u.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Sn({programId:i.programId,keys:u,data:a})}return new Sn({programId:i.programId,keys:[]})}function Ka({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=V([D("instruction"),D("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:bm,isSigner:!1,isWritable:!1},{pubkey:gm.programId,isSigner:!1,isWritable:!1},{pubkey:bt,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:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:A,coinAmount:k,pcAmount:B},I),{instruction:new Sn({keys:R,programId:o,data:I}),instructionType:v.AmmV4CreatePool}}function wm({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ee(o),s=Buffer.alloc(xi.span);xi.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return r===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Sn({programId:i.programId,keys:a,data:s})}function Am({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ee(o),s=Buffer.alloc(Si.span);Si.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Sn({programId:i.programId,keys:a,data:s})}function ao(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 wm(E(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return Am(E(C({},a),{maxAmountIn:r,amountOut:i}),t);xa.logWithError("invalid params","params",o)}throw xa.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as Xa}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as Tt,SystemProgram as Kn,Keypair as Di}from"@solana/web3.js";import za from"bn.js";import Km from"bn.js";function uo(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Oi(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Ni(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function ar(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Ca(o,e){return ar(o,e)?null:Oi(o,e)}function Ra(o,e){return ar(o,e)?null:Ni(o,e)}var bh=Buffer.from("amm_config","utf8"),hm=Buffer.from("pool","utf8"),Pm=Buffer.from("pool_vault","utf8"),km=Buffer.from("pool_reward_vault","utf8"),La=Buffer.from("position","utf8"),Tm=Buffer.from("tick_array","utf8"),Im=Buffer.from("operation","utf8"),Bm=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Oa(o,e,t,n){return le([hm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Mi(o,e,t){return le([Pm,e.toBuffer(),t.toBuffer()],o)}function Na(o,e,t){return le([km,e.toBuffer(),t.toBuffer()],o)}function be(o,e,t){return le([Tm,e.toBuffer(),uo(t)],o)}function sn(o,e,t,n){return le([La,e.toBuffer(),uo(t),uo(n)],o)}function lt(o,e){return le([La,e.toBuffer()],o)}function co(o){return le([Buffer.from("metadata","utf8"),hn.toBuffer(),o.toBuffer()],hn)}function ur(o){return le([Im],o)}function ot(o,e){return le([Bm,e.toBuffer()],o)}import mt from"bn.js";var Be=new mt(0),it=new mt(1),Vt=new mt(-1),st=new mt(1).shln(64),lo=new mt(1).shln(128),_i=st.sub(it),cr=64,Ma=lo.subn(1),Ge=-443636,Ze=-Ge,Rt=new mt("4295048016"),Lt=new mt("79226673521066979257578248091"),mo=new mt("4295048017"),po=new mt("79226673521066979257578248090"),_a=16,Va="59543866431248",va="184467440737095516",Ea="15793534762490258745",fo=new mt(10).pow(new mt(6));var Fa={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:[]},Ah=new mt("18446744073700000000");var xm=15,ae=class{static async getTickArrays(e,t,n,r,i,s,a){let u=[],c=Q.getTickArrayStartIndexByTick(r,i),l=Q.getInitializedTickArrayInRange(s,a,i,c,Math.floor(xm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=be(t,n,l[p]);u.push(y)}let m=(await gt(e,u)).map(p=>p!==null?lr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Q.getNextTickArrayStartIndex(c,i,s),this.checkIsValidStartIndex(c,i))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/ae.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=Oe-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a-1}}else{let a=0;for(;a<Oe;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a+1}}let{publicKey:s}=be(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),u=Math.floor((r-a)/i),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Oe;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=be(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.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>Ze)return!1;let n=Q.getTickArrayStartIndexByTick(Ge,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Oe*e}};import oe from"bn.js";import{PublicKey as kt}from"@solana/web3.js";import xe from"bn.js";var Vi=14,vt=class{static maxTickInTickarrayBitmap(e){return e*Oe*an}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(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Oe,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(r){let l=e.shln(1024-c-1),m=Ca(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(c),m=Ra(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-ae.tickCount(n)}}}},mr=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=vt.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=vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=Ge)throw Error(`extensionTickBoundary check error: ${n}, ${Ge}`);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=ae.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}=vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=Q.mergeTickArrayBitmap(e).shln(an-1-a),c=ar(512,u)?null:Oi(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let u=Q.mergeTickArrayBitmap(e).shrn(a),c=ar(512,u)?null:Ni(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%vt.maxTickInTickarrayBitmap(t),r=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(r=an-r),r}};import Ot from"bn.js";var dr=class{static getfeeGrowthInside(e,t,n){let r=new Ot(0),i=new Ot(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 Ot(0),a=new Ot(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,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 u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(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 u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(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 u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,h,A;let a=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),u=re.getSqrtPriceX64FromTick(t.tickLower),c=re.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=ce.getAmountsFromLiquidity(a,u,c,n,i),[d,p]=[we(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),we(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[we(new Ot(new _(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),we(new Ot(new _(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Da}from"@solana/spl-token";var Se=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=un.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 u.push(...y),{allTrade:d,expectedAmountOut:p.mul(Vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=be(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=un.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(Vt),c,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Se.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mr.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=be(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=be(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/ae.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=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=vt.nextInitializedTickArrayStartIndex(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=mr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ge||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,u,c;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(C({},m),{perSecond:te.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||r.eq(Be)){s.push(p);continue}let y=new xe(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=te.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=te.mulDivFloor(f,p.emissionsPerSecondX64,st),A=p.rewardTotalEmissioned.add(h);s.push(E(C({},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=vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<Ge&&(n=ae.getArrayStartIndex(Ge,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*an}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Ne(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=qa.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let u of t){let c=Q.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Q.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=be(u.programId,u.id,m);i.push({pubkey:d}),r[d.toString()]=u.id}}let s=await Ne(e,i,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=r[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=E(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await gt(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=yo.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=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),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA: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(x=>E(C({},x),{pendingReward:new xe(0)})),leverage:B,tokenFeeAmountA:new xe(0),tokenFeeAmountB:new xe(0)}];let T=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);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await gt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lr.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[m[h].toString()],B=y[m[A].toString()],T=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await dr.GetPositionFees(f,g,T,S),I=await dr.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new xe(0))?x:new xe(0),g.tokenFeeAmountB=R.gte(new xe(0))?R:new xe(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new xe(0))?I[L]:new xe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new _(0),catchLiquidityInsufficient:u=!1}){var q;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new _(0))?c=l?Rt.add(new xe(1)):Lt.sub(new xe(1)):c=re.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Se.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((q=p.fee)!=null?q:Be),c,u),A=we(f,d,r,!1),k=re.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new _(1).div(k),T=f.mul(new xe(Math.floor((1-s)*1e10))).div(new xe(1e10)),S=we(T,d,r,!1),x=l?e.currentPrice:new _(1).div(e.currentPrice),R=new _(B).sub(x).abs(),I=x,L=new Qe(new _(R).mul(10**15).toFixed(0),new _(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=r.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new he(E(C({},c),{mint:c.address,isToken2022:c.programId===Da.toBase58()})),new he(E(C({},l),{mint:l.address,isToken2022:l.programId===Da.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Se.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(c.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=E(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=E(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),L=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:h.mul(new _(10**(20+d.decimals))).toFixed(0)}),q=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:A.mul(new _(10**(20+d.decimals))).toFixed(0)}),F=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:q,priceImpact:k,fee:F,remainingAccounts:T,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(),u=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-u,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[nt(e.mintA.address).toString()],d=r[nt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),b=re.getSqrtPriceX64FromTick(s),g=re.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new _(h.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(A.toString()).div(new _(10).pow(y)).mul(d.value)),S=new _(k.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(B.toString()).div(new _(10).pow(y)).mul(d.value)),x=new _(1).div(T.add(S)),I=new _(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),L=3600*24*365,q=e.rewardDefaultInfos.map(F=>{var W,Ye;let $=F.mint.decimals,G=r[F.mint.address];return u<((W=F.startTime)!=null?W:0)||u>((Ye=F.endTime)!=null?Ye:0)||!F.perSecond||!G||$===void 0?0:new _(G.value).mul(new _(F.perSecond).mul(L)).div(new _(10).pow($)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:q,apr:I+q.reduce((F,$)=>F+$,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),m=re.getSqrtPriceX64FromTick(n),d=re.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=we(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new xe(new _(y.amount.sub((h=y.fee)!=null?h:Be).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new xe(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new xe(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Se.getAmountsFromLiquidity({epochInfo:u,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 u=re.getSqrtPriceX64FromTick(n),c=re.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(re.priceToSqrtPriceX64(new _(t.price),t.mintA.decimals,t.mintB.decimals),u,c,i,a),[d,p]=[we(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),we(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[we(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),we(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(u=>!n[u.id]).map(u=>new kt(u.id));(await gt(e,r)).forEach((u,c)=>{!u||(n[r[c].toBase58()]=cn.decode(u.data))});let s=t.map(u=>ot(new kt(u.programId),new kt(u.id)).publicKey),a=await Se.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>E(C({},u),{[c.id]:E(C({},n[c.id]),{id:new kt(c.id),version:6,programId:new kt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:E(C({},c.config),{id:new kt(c.config.id),fundOwner:""}),currentPrice:new _(c.price),exBitmapInfo:a[ot(new kt(c.programId),new kt(c.id)).publicKey.toBase58()],startTime:n[c.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]}};var vi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wa(o){return E(C({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:vi,week:vi,month:vi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var te=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(Be)||(i=i.add(it)),i}static mulDivFloor(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).add(n.sub(it)).div(n)}static x64ToDecimal(e,t){return new _(e.toString()).div(_.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(_.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(lo).sub(t).mod(lo)}};function Me(o,e){return Ei(o.mul(e),64,256)}function Sm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ei(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var re=class{static sqrtPriceX64ToPrice(e,t,n){return te.x64ToDecimal(e).pow(2).mul(_.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return te.decimalToX64(e.mul(_.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))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(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))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(Be))return e;let i=t.shln(cr);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?te.mulDivCeil(s,e,a):te.mulDivRoundingUp(s,it,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 te.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(cr);if(r)return e.add(i.div(t));{let s=te.mulDivRoundingUp(i,it,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<Ge||e>Ze)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=Me(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=Me(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=Me(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=Me(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=Me(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=Me(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=Me(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=Me(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=Me(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=Me(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=Me(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=Me(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=Me(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=Me(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=Me(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=Me(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=Me(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=Me(n,new oe("37481735321082"))),e>0&&(n=Ma.div(n)),n}static getTickFromPrice(e,t,n){return re.getTickFromSqrtPriceX64(re.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Lt)||e.lt(Rt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=Sm(n,32,128),i=new oe("8000000000000000","hex"),s=0,a=new oe(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new oe(0))&&s<_a;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let c=a.shrn(32),m=r.add(c).mul(new oe(Va)),d=Ei(m.sub(new oe(va)),64,128).toNumber(),p=Ei(m.add(new oe(Ea)),64,128).toNumber();return d==p?d:re.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ln=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=re.getTickFromSqrtPriceX64(re.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=ln.getTickWithPriceAndTickspacing(e,t,n,r),s=re.getSqrtPriceX64FromTick(i);return re.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(Be))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(cr),s=t.sub(e);return r?te.mulDivRoundingUp(te.mulDivCeil(i,s,t),it,e):te.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");return r?te.mulDivCeil(n,t.sub(e),st):te.mulDivFloor(n,t.sub(e),st)}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?te.mulDivRoundingUp(a,it,_i):a.shrn(cr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),te.mulDivFloor(n,_i,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:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new oe(new _(u.toString()).mul(l).toFixed(0)),d=new oe(new _(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:u}){var h,A,k,B;let c=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),l=re.getSqrtPriceX64FromTick(t),m=re.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[we(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),we(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[we(new oe(new _(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),we(new oe(new _(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},un=class{static swapCompute(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(Be))throw new Error("amountSpecified must not be 0");if(y||(y=s?Rt.add(it):Lt.sub(it)),s){if(y.lt(Rt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Lt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Be),g={amountSpecifiedRemaining:d,amountCalculated:Be,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new oe(0)},h=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Be)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(A,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Se.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:q}=be(e,t,h);R=q,A=n[h];try{x=Q.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Ge?T.tickNext=Ge:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=re.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=un.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(Vt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=re.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(be(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Be,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),u=r.gte(Be);if(u){let l=te.mulDivFloor(r,fo.sub(new oe(i.toString())),fo);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(Vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromOutput(e,n,r.mul(Vt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(Vt))&&(s.amountOut=r.mul(Vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=te.mulDivCeil(s.amountIn,new oe(i),fo.sub(new oe(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Oe=60,an=512,Q=class{static getTickArrayAddressByTick(e,t,n,r){let i=Q.getTickArrayStartIndexByTick(n,r),{publicKey:s}=be(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>=Oe)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=ae.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)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Oe,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Oe,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*Oe:e+t*Oe}static mergeTickArrayBitmap(e){let t=new Km(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*Oe));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,an,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,r,i);for(let u of a){let{publicKey:c}=be(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}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(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ge||e>Ze}static nextInitTick(e,t,n,r,i){if(ae.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<Oe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Oe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Oe;){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=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}};var Ua=V([pe(8),D("bump"),St("index"),K(""),je("protocolFeeRate"),je("tradeFeeRate"),St("tickSpacing"),X(w(),8,"")]),Cm=V([je("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),X(Y(),1,"")]),Fi=V([pe(8),qe("initialized"),K("poolId"),X(Cm,1e3,"observations"),X(Y(),5,"")]),Rm=V([D("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),cn=V([pe(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),St("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),Fe("tickCurrent"),St("observationIndex"),St("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),D("status"),X(D(),7,""),X(Rm,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),Lm=V([Y("growthInsideLastX64"),w("rewardAmountOwed")]),yo=V([pe(8),D("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Lm,3,"rewardInfos"),X(w(),8,"")]),SP=V([pe(8),D("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Y(),3,"rewardGrowthInside"),X(w(),8,"")]),Om=V([Fe("tick"),Zs("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),X(Y(),3,"rewardGrowthsOutsideX64"),X(je(),13,"")]),lr=V([pe(8),K("poolId"),Fe("startTickIndex"),X(Om,Oe,"ticks"),D("initializedTickCount"),X(D(),115,"")]),Ga=V([pe(329),X(K(),100,"whitelistMints")]),qa=V([pe(8),K("poolId"),X(X(w(),8),Vi,"positiveTickArrayBitmap"),X(X(w(),8),Vi,"negativeTickArrayBitmap")]);var Ya=se("Raydium_Clmm"),It={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]},Te=class{static createPoolInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...It.createPool,...g]);return new Tt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ue({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[Kn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Fi.span),space:Fi.span,programId:n})],{publicKey:f}=Oa(n,a,d,p),{publicKey:b}=Mi(n,f,d),{publicKey:g}=Mi(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||De),p,g,new U(s.programId||De),ot(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Di.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=co(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Di.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=co(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,c,s,a,u,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new za(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Di.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(p,y,f),{publicKey:h}=be(p,y,b),{publicKey:A}=Pe(n.wallet,m,De),{publicKey:k}=co(m),{publicKey:B}=lt(p,m),{publicKey:T}=sn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,i,f,b,s,a,u,c,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=V([]),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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...It.closePosition,...u]);return new Tt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=Pe(n.wallet,r.nftMint,De),{publicKey:a}=lt(i,r.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new za(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([Y("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...It.decreaseLiquidity,...S]);return new Tt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=be(c,l,m),{publicKey:y}=be(c,l,d),{publicKey:f}=Pe(r.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=sn(c,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g){let h=V([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...It.swap,...B]);return new Tt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([w("openTime"),w("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:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...It.initReward,...f]);return new Tt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Na(i,s,r.mint).publicKey,u=ur(i).publicKey,c=[this.initRewardInstruction(i,n.wallet,s,u,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([D("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...It.setRewardEmissions,...f]);return new Tt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Ya.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ur(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let u=V([D("rewardIndex")]),c=[{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:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...It.collectReward,...l]);return new Tt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Ya.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,u,r,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(c,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as _m}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Vm}from"@solana/spl-token";import{PublicKey as Nm}from"@solana/web3.js";import Qa from"bn.js";var ja=new Qa(25),Ha=new Qa(1e4);var Mm=se("Raydium_liquidity_serum");function Za({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=Nm.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw Mm.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 ck from"bn.js";function bo({programId:o}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function mn({name:o,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function vm({programId:o,marketId:e}){let{publicKey:t}=le([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function qi({programId:o}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Ja({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:u}){let c=mn({name:"amm_associated_seed",programId:a,marketId:t}),l=mn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=qi({programId:a}),p=mn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=mn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=mn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=vm({programId:a,marketId:t}),g=mn({name:"target_associated_seed",programId:a,marketId:t}),h=mn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Za({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:_m.default,configId:bo({programId:a})}}var Wi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},go=o=>{let e={},t=Vm.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:He({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new _(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new _(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new _(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Wi,week:Wi,month:Wi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:bo({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import tt from"bn.js";var pr=class extends ke{constructor(t){super(t);this.stableLayout=new ir({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 tt(new _(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=io(t[i?"mintB":"mintA"]),[u,c]=[new tt(new _(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new tt(new _(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new tt(new _(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.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",u.toString(),"quoteReserve",c.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?Fr(s.mul(c),u):Fr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Fr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Qe(new tt(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config:u,txVersion:c,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Xe(n.lpMint.address)}),A=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[I,L]=k,[q,F]=B,$=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Nt=await m.handleTokenAccount({side:"in",amount:q,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:W}=Nt,Ye=Ie(Nt,["tokenAccount"]);G.addInstruction(Ye);let gn=await m.handleTokenAccount({side:"in",amount:F,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:yn}=gn,en=Ie(gn,["tokenAccount"]);G.addInstruction(en);let Br=await m.handleTokenAccount({side:"out",amount:0,mint:new Xe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Dt}=Br,bn=Ie(Br,["tokenAccount"]);return G.addInstruction(bn),G.addInstruction({instructions:[Sa({poolInfo:n,poolKeys:$,userKeys:{baseTokenAccount:W,quoteTokenAccount:yn,lpTokenAccount:Dt,owner:this.scope.ownerPubKey},baseAmountIn:q,quoteAmountIn:F,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:u}=t,c=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Xe(n.mintA.address),new Xe(n.mintB.address),new Xe(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:k}=x,B=Ie(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Ie(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Li({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Cn,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(c);let g={};for(let W of this.scope.account.tokenAccountRawInfos)(g[W.accountInfo.mint.toString()]===void 0||Pe(this.scope.ownerPubKey,W.accountInfo.mint,Cn).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 tt(0)),k=t.mintA.address===he.WSOL.mint.toString(),B=t.mintB.address===he.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let W=ut[s.programId],Ye=ct({programId:new Xe(s.programId),poolId:new Xe(s.id),owner:this.scope.ownerPubKey,version:W}),yn,en=await this.scope.connection.getAccountInfo(Ye);if(en&&(yn=Jn(W).decode(en.data)),W!==6&&!yn){let{instruction:Wt,instructionType:Oo}=$n({id:new Xe(s.id),programId:new Xe(s.programId),version:W,ledger:Ye,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Wt],instructionTypes:[Oo]})}let Dt=[];for(let Wt of s.rewardInfos){let Oo=Wt.mint.address===he.WSOL.mint.toString();if(g[Wt.mint.address])Dt.push(g[Wt.mint.address]);else{let{account:Ji,instructionParams:$i}=await this.scope.account.getOrCreateTokenAccount({mint:new Xe(Wt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Oo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Ji||this.logAndCreateError("farm reward account not found:",Wt.mint.address),$i&&b.addInstruction($i),Dt.push(Ji)}}let bn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Nt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:bn,lpAccount:h,rewardAccounts:Dt},gn=ut[s.programId],Br=gn===6?er(Nt):gn===5?tr(Nt):nr(Nt),xu={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[Br],instructionTypes:[xu[gn]]})}let I=await this.getAmmPoolKeys(t.id),L=Li({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[q,F]=t.mintA.address===n.mintA.address?[T,x]:[x,T],$=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Te.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:$,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:q,tokenAccountB:F},withMetadata:"create"},i),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var q;let b=c.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),g=c.useSOLBalance&&r.mint.equals($a),h=c.useSOLBalance&&i.mint.equals($a),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Ja({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=Ka(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Pe(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[I],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=bo({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return ha.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,u]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new _(y.toString()).div(p.toString());else{let I=Ba(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);d==="quote"?b=new _(1e6).div(I*1e6):b=new _(I*1e6).div(1e6)}let g=n,h=new tt(0),A=new tt(0);if(!g.isZero())if(f){A=Qn(g.mul(ja),Ha);let I=g.sub(A),L=p.add(I);h=y.mul(I).div(L)}else{A=g.mul(new tt(2)).div(new tt(1e4));let I=g.sub(A);d==="quote"?h=new tt(Ta(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber())):h=new tt(Ia(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber()))}let k=new tt(new _(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new _(h.toString()).div(new _(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new _(h.toString()).div(g.sub(A).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:A}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),h=y&&b.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[ao({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Ne(this.scope.connection,t.map(l=>({pubkey:new Xe(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=so.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ne(this.scope.connection,s.map(l=>({pubkey:new Xe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new tt(Em.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=E(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new _(p.toString()).div(new _(10).pow(m.quoteDecimal.toString())).div(new _(d.toString()).div(new _(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=go({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as eu,TOKEN_PROGRAM_ID as tu}from"@solana/spl-token";var fr=class extends ke{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)||ie.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,r,new _(1).div(a)]:[r,i,a],b=re.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:E(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:u.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:[]}},Fa),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===H.toString(),A=n.useSOLBalance&&e.mintB.address===H.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(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:c,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===H.toString(),g=u.useSOLBalance&&t.mintB.address===H.toString(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(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:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(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:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===H.toString(),f=i.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===H.toString(),q;if(I.mint.address===t.mintA.address)q=b;else if(I.mint.address===t.mintB.address)q=g;else{let{account:F,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(I.mint.programId),mint:new ie(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});q=F,$&&p.addInstruction($)}T.push(q)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:i});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(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:c?!1:r,checkCreateATAOwner:i});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(H),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:r,checkCreateATAOwner:i});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=u.useSOLBalance&&e.mintA.address===H.toBase58(),b=u.useSOLBalance&&e.mintB.address===H.toBase58(),g;!s||s.equals(new _(0))?g=y?Rt.add(new dt(1)):Lt.sub(new dt(1)):g=re.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?r:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let A;if(!A){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=B,T&&p.addInstruction(T)}(!h||!A)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:A,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:A},inputMint:new ie(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:c})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)r?Pe(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===H.toString(),y=n.useSOLBalance&&d.mintB.address===H.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===H.toString(),B=c[A.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}c[A.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ur(e).publicKey);return t?Ga.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=yo.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 Ne(this.scope.connection,e.map(i=>({pubkey:new ie(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=cn.decode(s.accountInfo.data),u=re.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=E(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),r=await Ne(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),i={};r.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=Ua.decode(u.accountInfo.data))});let s=await Se.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||tu.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Jt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||tu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Jt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:E(C({},i[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Se.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Wa(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(eu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(eu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as xo,TOKEN_PROGRAM_ID as Et,AccountLayout as $m}from"@solana/spl-token";import ru from"bn.js";var Ui=new ru(1e6);function Fm(o,e,t){return o.mul(e).add(t).sub(new ru(1)).div(t)}function nu(o,e,t){return o.mul(e).div(t)}var wo=class{static tradingFee(e,t){return Fm(e,t,Ui)}static protocolFee(e,t){return nu(e,t,Ui)}static fundFee(e,t){return nu(e,t,Ui)}};import yr from"bn.js";function Ao(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Dm(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=Ao(o,e);return n.gt(Rn)&&(t=t.add(new yr(1)),e=o.div(t),n=Ao(o,t),n.gt(Rn)&&(e=e.add(new yr(1)))),[t,e]}var Rn=new yr(0),ho=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Dm(r,i),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}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 Ao(e.mul(n),t).gt(Rn)&&s.gt(Rn)&&(s=s.add(new yr(1))),Ao(e.mul(r),t).gt(Rn)&&a.gt(Rn)&&(a=a.add(new yr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Po=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=wo.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:u}=ho.swapWithoutFees(s,t,n),c=a.add(i);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:i}}};var Wm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),qm=Buffer.from("amm_config","utf8"),Um=Buffer.from("pool","utf8"),Gm=Buffer.from("pool_lp_mint","utf8"),Xm=Buffer.from("pool_vault","utf8"),zm=Buffer.from("observation","utf8");function Ln(o){return le([Wm],o)}function Ym(o,e){return le([qm,Hm(e)],o)}function Qm(o,e,t,n){return le([Um,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function jm(o,e){return le([Gm,e.toBuffer()],o)}function ou(o,e,t){return le([Xm,e.toBuffer(),t.toBuffer()],o)}function ko(o,e){return le([zm,e.toBuffer()],o)}function Hm(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function iu({programId:o,mintA:e,mintB:t}){let n=Ym(o,0).publicKey,r=Ln(o).publicKey,i=Qm(o,n,e,t).publicKey,s=jm(o,i).publicKey,a=ou(o,i,e).publicKey,u=ou(o,i,t).publicKey,c=ko(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as br}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gi,TOKEN_2022_PROGRAM_ID as su,ASSOCIATED_TOKEN_PROGRAM_ID as Zm}from"@solana/spl-token";var Jm=se("Raydium_cpmm"),gr={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 au(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Zm,isSigner:!1,isWritable:!1},{pubkey:Uo,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},T),new br({keys:B,programId:o,data:Buffer.from([...gr.initialize,...T])})}function uu(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:su,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Jm.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new br({keys:b,programId:o,data:Buffer.from([...gr.deposit,...g])})}function cu(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:su,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:_r,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new br({keys:b,programId:o,data:Buffer.from([...gr.withdraw,...g])})}function To(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f){let b=V([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new br({keys:g,programId:o,data:Buffer.from([...gr.swapBaseInput,...h])})}function Io(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f){let b=V([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new br({keys:g,programId:o,data:Buffer.from([...gr.swapBaseOutput,...h])})}import _e from"bn.js";var lu=V([pe(8),D("bump"),qe("disableCreatePool"),St("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Bo=V([pe(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"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var wr=class extends ke{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ne(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),r={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Bo.decode(d.accountInfo.data);r[String(e[m])]=E(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ne(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=lu.decode(y.data)}}let u={},c=await Ne(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new _e($m.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new _(y.toString()).div(new _(10).pow(d.mintDecimalB)).div(new _(p.toString()).div(new _(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var u,c,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[r]:E(C({},i),{id:new z(r),configInfo:i.configInfo,version:7,authority:Ln(i.programId).publicKey,mintA:He({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Jt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Jt((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Jt(n[t.mintA.toBase58()].feeConfig):void 0}}),i=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Jt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new _(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new _(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Ln(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Ie(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var q,F,$;let d=r.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),p=new _e(new z(c.mintA.address).toBuffer()).lte(new _e(new z(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=r.useSOLBalance&&y.address===xo.toBase58(),A=r.useSOLBalance&&f.address===xo.toBase58(),[k,B]=[new z(y.address),new z(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=iu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[au(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,Pe(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new z((F=y.programId)!=null?F:Et),new z(($=f.programId)!=null?$:Et),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(u),T.versionBuild({txVersion:a,extInfo:{address:E(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new _(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Qe(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new _(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,A=t.mintA.address===xo.toString(),k=t.mintB.address===xo.toString(),B=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let q=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Ye=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:q,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:F}=Ye,$=Ie(Ye,["tokenAccount"]);B.addInstruction($);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new Qe(new _e(1)).sub(s);return B.addInstruction({instructions:[uu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),F,x,I,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[v.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var F,$;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Qe(new _e(1)).sub(i),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(r.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(r.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[we(l,t.mintA.extensions.feeConfig,d,!1),we(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(H),k=h.equals(H),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let q=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[cu(new z(t.programId),this.scope.ownerPubKey,new z(q.authority),new z(t.id),L,B,T,new z(q.vault.A),new z(q.vault.B),g,h,new z(t.lpMint.address),r,l.sub((F=p.fee)!=null?F:new _e(0)),m.sub(($=y.fee)!=null?$:new _e(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:q.lookupTableAccount?[q.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,q;let{poolInfo:t,poolKeys:n,baseIn:r,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:u,txVersion:c}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new z(t.mintA.address),new z(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new _e((1-s)*1e4)).div(new _e(1e4));let b=t.mintA.address===H.toBase58(),g=t.mintB.address===H.toBase58(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((S=t.mintA.programId)!=null?S:Et),owner:this.scope.ownerPubKey,createInfo:b||!r?{payer:this.scope.ownerPubKey,amount:r?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new z((x=t.mintB.programId)!=null?x:Et),owner:this.scope.ownerPubKey,createInfo:g||r?{payer:this.scope.ownerPubKey,amount:r?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[r?To(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),h,k,new z(T.vault.A),new z(T.vault.B),new z((R=t.mintA.programId)!=null?R:Et),new z((I=t.mintB.programId)!=null?I:Et),y,f,ko(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Io(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),k,h,new z(T.vault.B),new z(T.vault.A),new z((L=t.mintB.programId)!=null?L:Et),new z((q=t.mintA.programId)!=null?q:Et),f,y,ko(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[r?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(u),p.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Po.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new _(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new _e((1-r)*1e4)).div(new _e(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,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,B,T,S,x,R;let u=1-Number(i.toSignificant())/100,c=new _e(new _(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=we(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new _e(0)),d=new _e(new _(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.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=m.mul(d).div(p==="base"?t:n),f={amount:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=ed(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=we(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Qe(new _e(1)).add(i),g=we(b.mul(f.amount.sub((B=f.fee)!=null?B:new _e(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function ed(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new _e(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new _e(1))),{amountA:r,amountB:i}}import{PublicKey as pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as zi,createTransferInstruction as bu}from"@solana/spl-token";import Co from"bn.js";import{TOKEN_PROGRAM_ID as td,TOKEN_2022_PROGRAM_ID as nd,ASSOCIATED_TOKEN_PROGRAM_ID as rd}from"@solana/spl-token";import{PublicKey as J,TransactionInstruction as od,SystemProgram as id}from"@solana/web3.js";import dn from"bn.js";function sd(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[P({pubkey:td,isWritable:!1}),P({pubkey:nd,isWritable:!1}),P({pubkey:rd,isWritable:!1}),P({pubkey:id.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:r}));let g=[u,c],h=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new J(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:r})):b.push(P({pubkey:n})),b.push(P({pubkey:new J(A[S])})),b.push(P({pubkey:new J(A[S+1])})),x.version===6){let I=h[S];b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)})),b.push(P({pubkey:_r})),b.push(P({pubkey:ot(new J(x.programId),new J(x.id)).publicKey})),f.push(ad(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new J(L)}))}else if(x.version===5){let I=h[S];b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(I.marketProgramId)})),b.push(P({pubkey:new J(I.marketAuthority)})),b.push(P({pubkey:Es,isWritable:!1})),b.push(P({pubkey:new J(I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.marketId)})),b.push(P({pubkey:new J(I.marketBids)})),b.push(P({pubkey:new J(I.marketAsks)})),b.push(P({pubkey:new J(I.marketEventQueue)})),b.push(P({pubkey:new J(I.marketBaseVault)})),b.push(P({pubkey:new J(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(L?I.id:I.marketProgramId)})),b.push(P({pubkey:new J(L?I.id:I.marketAuthority)})),b.push(P({pubkey:new J(L?I.id:I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(L?I.id:I.marketId)})),b.push(P({pubkey:new J(L?I.id:I.marketBids)})),b.push(P({pubkey:new J(L?I.id:I.marketAsks)})),b.push(P({pubkey:new J(L?I.id:I.marketEventQueue)})),b.push(P({pubkey:new J(L?I.id:I.marketBaseVault)})),b.push(P({pubkey:new J(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(P({pubkey:new J(I.authority)})),b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)}))}else throw Error("pool type error")}let k=V([D("insId"),w("amountIn"),w("amountOut"),X(Y(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new od({keys:b,programId:o,data:B})}function ad(o,e){if(o)if(e){let t=new dn(o).div(new dn(25));return t.gt(mo)?t:mo}else{let t=new dn(o).mul(new dn(25));return t.lt(po)?t:po}else return e?mo:po}function mu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?Rt.add(it):Lt.sub(it);return Te.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new dn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[d?To(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new J(m.mintA.address),new J(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):Io(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new J(m.mintB.address),new J(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ao({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new dn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?v.AmmV5SwapBaseIn:v.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[sd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new dn(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var du={[ti.toBase58()]:3},pu={3:ti};var Xi=V([pe(5),pe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]),fu={3:Xi};import{PublicKey as yu}from"@solana/web3.js";var So=se("Serum"),Ko=class{static getProgramId(e){let t=pu[e];return t||So.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=du[t];return n||So.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=fu[e];return t||So.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=yu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return So.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:yu.default,nonce:r}}};var Ft=new Co(0),Ar=class extends ke{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(H));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 _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<i.length;c++)u.gte(i[c].amount)?(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(i[c].amount)):(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),jn({destination:a.addresses.newAccount,source:i[c].publicKey,amount:u,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 _t({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:[jn({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Kt({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(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(H),m=c.amount.token.mint.equals(H),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?zi:Ke,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.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,c.amount.token.isToken2022?zi:Ke);m&&a.addInstruction({endInstructions:[Kt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ke})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?zi:Ke)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=mu({routeProgram:i,inputMint:d,swapInfo:E(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[bu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[bu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.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=vs,clmm:n=Fs,cpmm:r=Ds}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:so.offsetOf("baseMint"),length:64}}),s=V([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})),u=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:cn.span}],dataSlice:{offset:cn.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Bo.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:i}){e=e.toString()===pn.default.toString()?H:e,t=t.toString()===pn.default.toString()?H:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?u[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?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}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=go(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new pn(f.mintA.address),programId:Ke,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 pn(f.mintB.address),programId:Ke,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 u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ke)?(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(Ke)?(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 c=await kn({connection:this.scope.connection,mints:Array.from(r).map(f=>new pn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(C({},f),{[b]:E(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:i,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,A,k,B,T,S,x,R;let m=l===void 0?new Co(0):e.raw.mul(new Co(l.feeBps.toNumber())).div(new Co(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:nt(t.address).toString()}),b=[];for(let I of n)try{b.push(E(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(r)){let q={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},F=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:q,amountIn:p})}}catch(W){this.logDebug("route in error",G.version,G.id.toString(),W.message);return}}).sort((G,W)=>{var en,Dt,bn,Nt;let Ye=G===void 0?Ft:G.data.amountOut.amount.raw.sub((Dt=(en=G.data.amountOut.fee)==null?void 0:en.raw)!=null?Dt:Ft),yn=W===void 0?Ft:W.data.amountOut.amount.raw.sub((Nt=(bn=W.data.amountOut.fee)==null?void 0:bn.raw)!=null?Nt:Ft);return Ye.lt(yn)?1:-1})[0];if(F===void 0)continue;let $=new ye(io(q),F.data.amountOut.amount.raw.sub((h=(g=F.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Ft));for(let G of L.out)try{let W=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:$});b.push(E(C({},W),{allTrade:!!(F.data.allTrade&&W.allTrade),amountIn:F.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new _(new $e({baseToken:F.data.amountIn.amount.token,denominator:F.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:Ft)}).toFixed()),priceImpact:new _(F.data.priceImpact.add(W.priceImpact).toFixed()),fee:[F.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[F.pool,G],remainingAccounts:[F.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new ye(F.data.amountOut.amount.token,((S=(T=F.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Ft).add((R=(x=W.amountOut.fee)==null?void 0:x.raw)!=null?R:Ft)):void 0,middleToken:F.data.amountOut.amount.token,poolReady:F.data.poolReady&&W.poolReady,poolType:[F.data.poolType,W.poolType],feeConfig:y,expirationTime:xt(F.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",G.version,G.id.toString(),W.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Ft)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=Se.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new _(y.toFixed()),executionPrice:new _(f.toFixed()),priceImpact:new _(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.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:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.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(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(r.size>0){let c=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ne(this.scope.connection,Array.from(s).map(l=>({pubkey:new pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Xi.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ko.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:qi({programId:new pn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:Ln(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Ke.toBase58(),decimals:c.lpDecimals}),config:E(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as ud}from"@solana/spl-token";import{PublicKey as cd,Transaction as Yi,TransactionInstruction as ld}from"@solana/web3.js";import gu from"bn.js";var ze=class extends ke{static getPdaPoolId(e,t){return le([ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return le([ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new gu(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=>ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>ze.getPdaOwnerId(t,m,r,l).publicKey));let u=await gt(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==ze.POOL_LAYOUT.span||b.data.length!==ze.OWNER_LAYOUT.span)continue;let g=ze.POOL_LAYOUT.decode(f.data),h=ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new gu(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=B&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(he.WSOL.mint),associatedOnly:u.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(c)}n.addInstruction({instructions:[ze.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 c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(he.WSOL.mint),associatedOnly:m.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:r,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Ho(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Yi().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Yi().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Yi().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=V([]),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(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:ud,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 ld({keys:i,programId:e,data:a})}},pt=ze;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=V([pe(8),D("bump"),D("status"),w("openTime"),w("endTime"),K("ammId"),X(V([D("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),pt.OWNER_LAYOUT=V([pe(8),D("bump"),D("version"),K("poolId"),K("owner"),w("lpAmount"),X(V([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new cd(e)),pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as hr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ku}from"@solana/spl-token";import Pr from"bn.js";import{TransactionInstruction as dd,SYSVAR_RENT_PUBKEY as pd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as wu}from"@solana/spl-token";import{createInitializeAccountInstruction as Au}from"@solana/spl-token";import{SystemProgram as fn,Transaction as hu}from"@solana/web3.js";function md(o="accountFlags"){let e=new Hr(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 Qi=V([pe(5),md("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]);function fd({programId:o,marketInfo:e}){let t=V([D("version"),je("instruction"),w("baseLotSize"),w("quoteLotSize"),St("feeRateBps"),w("vaultSignerNonce"),w("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:pd,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 dd({keys:n,programId:o,data:r})}async function Pu({connection:o,wallet:e,marketInfo:t}){let n=new hu,r=await o.getMinimumBalanceForRentExemption(165);n.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:wu}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:wu}),Au(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Au(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new hu;return i.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Qi.span),space:Qi.span,programId:t.programId}),fn.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}),fn.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}),fn.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}),fn.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}),fd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.InitAccount,v.InitAccount]},{transaction:i,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.InitMarket]}]}var On=class extends ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ue({fromPublicKey:u,programId:i}),l=Ue({fromPublicKey:u,programId:i}),m=Ue({fromPublicKey:u,programId:i}),d=Ue({fromPublicKey:u,programId:i}),p=Ue({fromPublicKey:u,programId:i}),y=Ue({fromPublicKey:u,programId:ku}),f=Ue({fromPublicKey:u,programId:ku}),b=0,g=new Pr(100);function h(){let R=new Pr(0);for(;;)try{return{vaultOwner:hr.createProgramAddressSync([c.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new Pr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:k}=h(),B=new Pr(Math.round(10**e.decimals*n)),T=new Pr(Math.round(n*10**t.decimals*r));if(B.eq(at))throw Error("lot size is too small");if(T.eq(at))throw Error("tick size or lot size is too small");let S=await Pu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new hr(e.mint),quoteMin:new hr(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new hr(e.mint),quoteMin:new hr(t.mint)}})}};import{PublicKey as Tr}from"@solana/web3.js";import{TransactionInstruction as Tu,SYSVAR_CLOCK_PUBKEY as bd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Iu}from"@solana/spl-token";var yd=V([D("instruction"),zs("amount")]),kr=V([D("instruction")]);function Ro({programId:o},e){let t=[{pubkey:Iu,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(kr.span);return kr.encode({instruction:2},n),new Tu({keys:t,programId:o,data:n})}function ji(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(kr.span);kr.encode({instruction:2},s);let a=[{pubkey:Iu,isWritable:!1,isSigner:!1},{pubkey:bd,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 Tu({programId:e.programId,keys:a,data:s})}import Bu from"bn.js";var gd={[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},Nn=class extends ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=gd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Bu(e.coin).isZero(),!new Bu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[Ro({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Tr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Ro({programId:new Tr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Tr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Ro({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Tr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Tr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ji(E(C({},g),{side:"base"}))]:[],...l?[ji(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as wd}from"@solana/web3.js";import{MintLayout as Ad,TOKEN_2022_PROGRAM_ID as Hi,TOKEN_PROGRAM_ID as Zi}from"@solana/spl-token";var Ir=class extends ke{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=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(zt.address,zt),this._mintGroup.official.add(zt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,E(C({},c),{priority:-1}))}),i.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Hi.toBase58():Zi.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Hi.toBase58():Zi.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?Hi.toBase58():Zi.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[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 zt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new wd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Ad.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Lo=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new wt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new rr({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new pr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ir({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ar({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new fr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new wr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new On({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Nn({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=hd({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,u=new Yr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),c=new Lo(E(C({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Qr);return this._owner.publicKey}setOwner(e){return this._owner=e?new wt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Us);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(Qr),new Error(Qr)}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=E(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:r}}),this.apiData.jupTokenList[e].data}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{Lo as Raydium};
|
|
1
|
+
var Su=Object.defineProperty,Ku=Object.defineProperties;var Cu=Object.getOwnPropertyDescriptors;var xr=Object.getOwnPropertySymbols;var ts=Object.prototype.hasOwnProperty,ns=Object.prototype.propertyIsEnumerable;var es=(o,e,t)=>e in o?Su(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))ts.call(e,t)&&es(o,t,e[t]);if(xr)for(var t of xr(e))ns.call(e,t)&&es(o,t,e[t]);return o},E=(o,e)=>Ku(o,Cu(e));var Ie=(o,e)=>{var t={};for(var n in o)ts.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&xr)for(var n of xr(o))e.indexOf(n)<0&&ns.call(o,n)&&(t[n]=o[n]);return t};import{merge as hd}from"lodash";import qs from"axios";import{get as rs,set as Ru}from"lodash";var No=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},os={},Lu={};function se(o){let e=rs(os,o);if(!e){let t=rs(Lu,o);e=new No({name:o,logLevel:t}),Ru(os,o,e)}return e}import{PublicKey as Wc}from"@solana/web3.js";import qc from"bn.js";import Ec from"big.js";import Dr from"bn.js";import et from"bn.js";var wn=9e15,Xt=1e9,Mo="0123456789abcdef",Kr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Cr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",_o={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wn,maxE:wn,crypto:!1},us,Mt,ne=!0,Lr="[DecimalError] ",Gt=Lr+"Invalid argument: ",cs=Lr+"Precision limit exceeded",ls=Lr+"crypto unavailable",ms="[object Decimal]",We=Math.floor,Re=Math.pow,Ou=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Nu=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Mu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ds=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,yt=1e7,ee=7,_u=9007199254740991,Vu=Kr.length-1,Vo=Cr.length-1,M={toStringTag:ms};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(Gt+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,u=i.s,c=o.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(i.e!==o.e)return i.e>o.e^u<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]^u<0?1:-1;return n===r?0:n>r^u<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=vu(n,gs(n,t)),n.precision=o,n.rounding=e,j(Mt==2||Mt==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,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ne=!1,i=l.s*Re(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=Ve(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Re(t,1/3),o=We((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=ge(c.plus(l).times(a),c.plus(u),s+2,1),Ve(a.d).slice(0,s)===(t=Ve(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 ne=!0,j(n,o,m.rounding,e)};M.decimalPlaces=M.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-We(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 ge(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return j(ge(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/Nr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=An(s,1,i.times(e),new s(1),!0);for(var u,c=o,l=new s(8);c--;)u=i.times(i),i=a.minus(u.times(l.minus(u.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=An(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Nr(5,o)),r=An(i,2,r,r,!0);for(var s,a=new i(5),u=new i(16),c=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(c))))}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,ge(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()?ft(t,r,i):new t(0):new t(NaN):e.isZero()?ft(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=ft(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,ne=!1,t=t.times(t).minus(1).sqrt().plus(t),ne=!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,ne=!1,t=t.times(t).plus(1).sqrt().plus(t),ne=!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=ge(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=ft(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,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Vo)return s=ft(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Vo)return s=ft(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),o=t;o;--o)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ne=!1,e=Math.ceil(a/ee),n=1,u=c.times(c),s=new l(c),r=c;o!==-1;)if(r=r.times(u),i=s.minus(r.div(n+=2)),r=r.times(u),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)),ne=!0,j(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&We(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,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.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(ne=!1,a=m+p,s=Ut(c,a),n=e?Rr(l,a+10):Ut(o,a),u=ge(s,n,a,1),Mn(u.d,r=m,d))do if(a+=10,s=Ut(c,a),n=e?Rr(l,a+10):Ut(o,a),u=ge(s,n,a,1),!i){+Ve(u.d).slice(r+1,r+15)+1==1e14&&(u=j(u,m+1,0));break}while(Mn(u.d,r+=10,d));return ne=!0,j(u,m,d)};M.minus=M.sub=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(c=p.d,d=o.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])o.s=-o.s;else if(c[0])o=new y(p);else return new y(u===3?-0:0);return ne?j(o,a,u):o}if(t=We(o.e/ee),l=We(p.e/ee),c=c.slice(),i=l-t,i){for(m=i<0,m?(e=c,i=-i,s=d.length):(e=d,t=l,s=c.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=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}i=0}for(m&&(e=c,c=d,d=e,o.s=-o.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>i;){if(c[--n]<d[n]){for(r=n;r&&c[--r]===0;)c[r]=yt-1;--c[r],c[n]+=yt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(o.d=c,o.e=Or(c,t),ne?j(o,a,u):o):new y(u===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):(ne=!1,n.modulo==9?(e=ge(t,o.abs(),0,3,1),e.s*=o.s):e=ge(t,o,0,n.modulo,1),e=e.times(o),ne=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return vo(this)};M.naturalLogarithm=M.ln=function(){return Ut(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,u,c,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(c=m.d,l=o.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(o=new d(m)),ne?j(o,a,u):o;if(i=We(m.e/ee),n=We(o.e/ee),c=c.slice(),r=i-n,r){for(r<0?(t=c,r=-r,s=l.length):(t=l,n=i,s=c.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=c.length,r=l.length,s-r<0&&(r=s,t=l,l=c,c=t),e=0;r;)e=(c[--r]=c[r]+l[r]+e)/yt|0,c[r]%=yt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return o.d=c,o.e=Or(c,n),ne?j(o,a,u):o};M.precision=M.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Gt+o);return t.d?(e=ps(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=Fu(n,gs(n,t)),n.precision=o,n.rounding=e,j(Mt>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,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(ne=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=Ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=We((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(i=n,n=i.plus(ge(s,i,t+2,1)).times(.5),Ve(i.d).slice(0,t)===(e=Ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(j(i,u+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,u+1,1),o=!n.times(n).eq(s));break}return ne=!0,j(n,u,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=ge(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,j(Mt==2||Mt==4?t.neg():t,o,e,!0)):new n(NaN)};M.times=M.mul=function(o){var e,t,n,r,i,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=We(l.e/ee)+We(o.e/ee),u=d.length,c=p.length,u<c&&(i=d,d=p,p=i,s=u,u=c,c=s),i=[],s=u+c,n=s;n--;)i.push(0);for(n=c;--n>=0;){for(e=0,r=u+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%yt|0,e=a/yt|0;i[r]=(i[r]+e)%yt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=Or(i,t),ne?j(o,m.precision,m.rounding):o};M.toBinary=function(o,e){return Fo(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:(Je(o,0,Xt),e===void 0?e=n.rounding:Je(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=Bt(n,!0):(Je(o,0,Xt),e===void 0?e=r.rounding:Je(e,0,8),n=j(new r(n),o+1,e),t=Bt(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=Bt(r):(Je(o,0,Xt),e===void 0?e=i.rounding:Je(e,0,8),n=j(new i(r),o+r.e+1,e),t=Bt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};M.toFraction=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),i=e.e=ps(y)-p.e-1,s=i%ee,e.d[0]=Re(10,s<0?ee+s:s),o==null)o=i>0?e:c;else{if(a=new f(o),!a.isInt()||a.lt(c))throw Error(Gt+a);o=a.gt(e)?i>0?e:c:a}for(ne=!1,a=new f(Ve(y)),l=f.precision,f.precision=i=y.length*ee*2;m=ge(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=c,c=u.plus(m.times(r)),u=r,r=e,e=a.minus(m.times(r)),a=r;return r=ge(o.minus(t),n,0,1,1),u=u.plus(r.times(c)),t=t.plus(r.times(n)),u.s=c.s=p.s,d=ge(c,n,i,1).minus(p).abs().cmp(ge(u,t,i,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ne=!0,d};M.toHexadecimal=M.toHex=function(o,e){return Fo(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:Je(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]?(ne=!1,t=ge(t,o,0,e,1).times(o),ne=!0,j(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Fo(this,8,o,e)};M.toPower=M.pow=function(o){var e,t,n,r,i,s,a=this,u=a.constructor,c=+(o=new u(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new u(Re(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,i=u.rounding,o.eq(1))return j(a,n,i);if(e=We(o.e/ee),e>=o.d.length-1&&(t=c<0?-c:c)<=_u)return r=fs(u,a,t,n),o.s<0?new u(1).div(r):j(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new u(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=Re(+a,c),e=t==0||!isFinite(t)?We(c*(Math.log("0."+Ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(ne=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=vo(o.times(Ut(a,n+t)),n),r.d&&(r=j(r,n+5,1),Mn(r.d,n,i)&&(e=n+10,r=j(vo(o.times(Ut(a,e+t)),e),e+5,1),+Ve(r.d).slice(n+1,n+15)+1==1e14&&(r=j(r,n+1,0)))),r.s=s,ne=!0,u.rounding=i,j(r,n,i))};M.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Bt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(Je(o,1,Xt),e===void 0?e=r.rounding:Je(e,0,8),n=j(new r(n),o,e),t=Bt(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):(Je(o,1,Xt),e===void 0?e=n.rounding:Je(e,0,8)),j(new n(t),o,e)};M.toString=function(){var o=this,e=o.constructor,t=Bt(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=Bt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function Ve(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=ee-n.length,t&&(i+=qt(t)),i+=n;s=o[e],n=s+"",t=ee-n.length,t&&(i+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function Je(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Gt+o)}function Mn(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=Re(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)==Re(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)==Re(10,e-3)-1,s}function Sr(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]+=Mo.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 vu(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Nr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=An(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 ge=function(){function o(n,r,i){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*r+a,n[u]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,u;if(i!=s)u=i>s?1:-1;else for(a=u=0;a<i;a++)if(n[a]!=r[a]){u=n[a]>r[a]?1:-1;break}return u}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,u){var c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I,L,q,F=n.constructor,$=n.s==r.s?1:-1,G=n.d,W=r.d;if(!G||!G[0]||!W||!W[0])return new F(!n.s||!r.s||(G?W&&G[0]==W[0]:!W)?NaN:G&&G[0]==0||!W?$*0:$/0);for(u?(p=1,l=n.e-r.e):(u=yt,p=ee,l=We(n.e/p)-We(r.e/p)),L=W.length,R=G.length,g=new F($),h=g.d=[],m=0;W[m]==(G[m]||0);m++);if(W[m]>(G[m]||0)&&l--,i==null?(T=i=F.precision,s=F.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<R||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/W|0,d=S%W|0;y=d||m<R}else{for(d=u/(W[0]+1)|0,d>1&&(W=o(W,d,u),G=o(G,d,u),L=W.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;q=W.slice(),q.unshift(0),I=W[0],W[1]>=u/2&&++I;do d=0,c=e(W,A,L,k),c<0?(B=A[0],L!=k&&(B=B*u+(A[1]||0)),d=B/I|0,d>1?(d>=u&&(d=u-1),f=o(W,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,L<b?q:W,b,u))):(d==0&&(c=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(W,A,L,k),c<1&&(d++,t(A,L<k?q:W,k,u))),k=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,us=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+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,u,c,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=ee,s=e,l=m[d=0],u=l/Re(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,r=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=ee,s=i-ee+r,u=s<0?0:l/Re(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Re(10,r-s-1)),c=t<4?(u||n)&&(t==0||t==(o.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(i>0?s>0?l/Re(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=o.e+1,m[0]=Re(10,(ee-e%ee)%ee),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Re(10,ee-i),m[d]=s>0?(l/Re(10,r-s)%Re(10,s)|0)*a:0),c)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,m[0]==yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=yt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return ne&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Bt(o,e,t){if(!o.isFinite())return bs(o);var n,r=o.e,i=Ve(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+qt(-r-1)+i,t&&(n=t-s)>0&&(i+=qt(n))):r>=s?(i+=qt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+qt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=qt(n))),i}function Or(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function Rr(o,e,t){if(e>Vu)throw ne=!0,t&&(o.precision=t),Error(cs);return j(new o(Kr),e,1,!0)}function ft(o,e,t){if(e>Vo)throw Error(cs);return j(new o(Cr),e,t,!0)}function ps(o){var e=o.length-1,t=e*ee+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function qt(o){for(var e="";o--;)e+="0";return e}function fs(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/ee+4);for(ne=!1;;){if(t%2&&(i=i.times(e),ss(i.d,s)&&(r=!0)),t=We(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ss(e.d,s)}return ne=!0,i}function is(o){return o.d[o.d.length-1]&1}function ys(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 vo(o,e){var t,n,r,i,s,a,u,c=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(ne=!1,u=y):u=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Re(2,m))/Math.LN10*2+5|0,u+=n,t=i=s=new d(1),d.precision=u;;){if(i=j(i.times(o),u,1),t=t.times(++l),a=s.plus(ge(i,t,u,1)),Ve(a.d).slice(0,u)===Ve(s.d).slice(0,u)){for(r=m;r--;)s=j(s.times(s),u,1);if(e==null)if(c<3&&Mn(s.d,u-n,p,c))d.precision=u+=10,t=i=a=new d(1),l=0,c++;else return j(s,d.precision=y,p,ne=!0);else return d.precision=y,s}s=a}}function Ut(o,e){var t,n,r,i,s,a,u,c,l,m,d,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?(ne=!1,l=A):l=e,g.precision=l+=y,t=Ve(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=Ve(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 c=Rr(g,l+2,A).times(i+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?j(f,A,h,ne=!0):f;for(m=f,u=s=f=ge(f.minus(1),f.plus(1),l,1),d=j(f.times(f),l,1),r=3;;){if(s=j(s.times(d),l,1),c=u.plus(ge(s,new g(r),l,1)),Ve(c.d).slice(0,l)===Ve(u.d).slice(0,l))if(u=u.times(2),i!==0&&(u=u.plus(Rr(g,l+2,A).times(i+""))),u=ge(u,new g(p),l,1),e==null)if(Mn(u.d,l-y,h,a))g.precision=l+=y,c=s=f=ge(m.minus(1),m.plus(1),l,1),d=j(f.times(f),l,1),r=a=1;else return j(u,g.precision=A,h,ne=!0);else return g.precision=A,u;u=c,r+=2}}function bs(o){return String(o.s*o.s/0)}function Eo(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),ne&&(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 Eu(o,e){var t,n,r,i,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ds.test(e))return Eo(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(Nu.test(e))t=16,e=e.toLowerCase();else if(Ou.test(e))t=2;else if(Mu.test(e))t=8;else throw Error(Gt+e);for(i=e.search(/p/i),i>0?(u=+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=fs(n,new n(t),i,i*2)),c=Sr(e,t,yt),l=c.length-1,i=l;c[i]===0;--i)c.pop();return i<0?new n(o.s*0):(o.e=Or(c,l),o.d=c,ne=!1,s&&(o=ge(o,r,a*4)),u&&(o=o.times(Math.abs(u)<54?Re(2,u):_n.pow(2,u))),ne=!0,o)}function Fu(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:An(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Nr(5,t)),e=An(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 An(o,e,t,n,r){var i,s,a,u,c=1,l=o.precision,m=Math.ceil(l/ee);for(ne=!1,u=t.times(t),a=new o(n);;){if(s=ge(a.times(u),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=ge(s.times(u),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,c++}return ne=!0,s.d.length=m+1,s}function Nr(o,e){for(var t=o;--e;)t*=o;return t}function gs(o,e){var t,n=e.s<0,r=ft(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Mt=n?4:1,e;if(t=e.divToInt(r),t.isZero())Mt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Mt=is(t)?n?2:3:n?4:1,e;Mt=is(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Fo(o,e,t,n){var r,i,s,a,u,c,l,m,d,p=o.constructor,y=t!==void 0;if(y?(Je(t,1,Xt),n===void 0?n=p.rounding:Je(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=bs(o);else{for(l=Bt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Sr(Bt(d),10,r),d.e=d.d.length),m=Sr(l,10,r),i=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=ge(o,d,t,n,0,r),m=o.d,i=o.e,c=us),s=m[t],a=r/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,c)for(;++m[--t]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Mo.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Sr(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Mo.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>u)for(i-=u;i--;)l+="0";else i<u&&(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 ss(o,e){if(o.length>e)return o.length=e,!0}function Du(o){return new this(o).abs()}function Wu(o){return new this(o).acos()}function qu(o){return new this(o).acosh()}function Uu(o,e){return new this(o).plus(e)}function Gu(o){return new this(o).asin()}function Xu(o){return new this(o).asinh()}function zu(o){return new this(o).atan()}function Yu(o){return new this(o).atanh()}function Qu(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=ft(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?ft(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=ft(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ge(o,e,i,1)),e=ft(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(ge(o,e,i,1)),t}function ju(o){return new this(o).cbrt()}function Hu(o){return j(o=new this(o),o.e+1,2)}function Zu(o,e,t){return new this(o).clamp(e,t)}function Ju(o){if(!o||typeof o!="object")throw Error(Lr+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Xt,"rounding",0,8,"toExpNeg",-wn,0,"toExpPos",0,wn,"maxE",0,wn,"minE",-wn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=_o[t]),(n=o[t])!==void 0)if(We(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",r&&(this[t]=_o[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(ls);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function $u(o){return new this(o).cos()}function ec(o){return new this(o).cosh()}function ws(o){var e,t,n;function r(i){var s,a,u,c=this;if(!(c instanceof r))return new r(i);if(c.constructor=r,as(i)){c.s=i.s,ne?!i.d||i.e>r.maxE?(c.e=NaN,c.d=null):i.e<r.minE?(c.e=0,c.d=[0]):(c.e=i.e,c.d=i.d.slice()):(c.e=i.e,c.d=i.d?i.d.slice():i.d);return}if(u=typeof i,u==="number"){if(i===0){c.s=1/i<0?-1:1,c.e=0,c.d=[0];return}if(i<0?(i=-i,c.s=-1):c.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;ne?s>r.maxE?(c.e=NaN,c.d=null):s<r.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[i]):(c.e=s,c.d=[i]);return}else if(i*0!==0){i||(c.s=NaN),c.e=NaN,c.d=null;return}return Eo(c,i.toString())}else if(u!=="string")throw Error(Gt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),c.s=-1):(a===43&&(i=i.slice(1)),c.s=1),ds.test(i)?Eo(c,i):Eu(c,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=Ju,r.clone=ws,r.isDecimal=as,r.abs=Du,r.acos=Wu,r.acosh=qu,r.add=Uu,r.asin=Gu,r.asinh=Xu,r.atan=zu,r.atanh=Yu,r.atan2=Qu,r.cbrt=ju,r.ceil=Hu,r.clamp=Zu,r.cos=$u,r.cosh=ec,r.div=tc,r.exp=nc,r.floor=rc,r.hypot=oc,r.ln=ic,r.log=sc,r.log10=uc,r.log2=ac,r.max=cc,r.min=lc,r.mod=mc,r.mul=dc,r.pow=pc,r.random=fc,r.round=yc,r.sign=bc,r.sin=gc,r.sinh=wc,r.sqrt=Ac,r.sub=hc,r.sum=Pc,r.tan=kc,r.tanh=Tc,r.trunc=Ic,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 tc(o,e){return new this(o).div(e)}function nc(o){return new this(o).exp()}function rc(o){return j(o=new this(o),o.e+1,3)}function oc(){var o,e,t=new this(0);for(ne=!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 ne=!0,new this(1/0);t=e}return ne=!0,t.sqrt()}function as(o){return o instanceof _n||o&&o.toStringTag===ms||!1}function ic(o){return new this(o).ln()}function sc(o,e){return new this(o).log(e)}function ac(o){return new this(o).log(2)}function uc(o){return new this(o).log(10)}function cc(){return ys(this,arguments,"lt")}function lc(){return ys(this,arguments,"gt")}function mc(o,e){return new this(o).mod(e)}function dc(o,e){return new this(o).mul(e)}function pc(o,e){return new this(o).pow(e)}function fc(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:Je(o,1,Xt),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(ls);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=ee,n&&o&&(r=Re(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 yc(o){return j(o=new this(o),o.e+1,this.rounding)}function bc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function gc(o){return new this(o).sin()}function wc(o){return new this(o).sinh()}function Ac(o){return new this(o).sqrt()}function hc(o,e){return new this(o).sub(e)}function Pc(){var o=0,e=arguments,t=new this(e[o]);for(ne=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return ne=!0,j(t,this.precision,this.rounding)}function kc(o){return new this(o).tan()}function Tc(o){return new this(o).tanh()}function Ic(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 _n=M.constructor=ws(_o);Kr=new _n(Kr);Cr=new _n(Cr);var _=_n;import{PublicKey as Go}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bc}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as As,SYSVAR_RENT_PUBKEY as xc}from"@solana/web3.js";function P({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Do=[P({pubkey:Bc,isWritable:!1}),P({pubkey:As.programId,isWritable:!1}),P({pubkey:xc,isWritable:!1})];function Wo({publicKey:o,transformSol:e}){let t=qo(o.toString());if(t instanceof Ae)return e&&t.equals(Le)?H:t;if(e&&t.toString()===Le.toBase58())return H;if(typeof t=="string"){if(t===Ae.default.toBase58())return Ae.default;try{return new Ae(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function qo(o){try{return new Ae(o)}catch{return o}}var Mr=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),_r=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),bt=new Ae("SysvarRent111111111111111111111111111111111"),hs=new Ae("SysvarC1ock11111111111111111111111111111111"),hn=new Ae("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Sc=new Ae("Sysvar1nstructions1111111111111111111111111"),Uo=As.programId,Kd=new Ae("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Cd=new Ae("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Rd=new Ae("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Ld=new Ae("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Od=new Ae("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Nd=new Ae("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Md=new Ae("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),_d=new Ae("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Vd=new Ae("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),vd=new Ae("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Ed=new Ae("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Ae("So11111111111111111111111111111111111111112"),Le=Ae.default;function nt(o){return Wo({publicKey:o,transformSol:!0})}import{PublicKey as Kc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ps}from"@solana/spl-token";var zt={chainId:101,address:Kc.default.toBase58(),programId:Ps.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ps.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 Xo=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Le.toBase58()||e instanceof Go&&Le.equals(e)){this.decimals=ve.decimals,this.symbol=ve.symbol,this.name=ve.name,this.mint=new Go(ve.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?Go.default:Wo({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},he=Xo;he.WSOL=new Xo(E(C({},ve),{mint:ve.address}));import vr from"big.js";import Lc from"bn.js";import Oc from"decimal.js-light";import Cc from"toformat";var Rc=Cc,Vn=Rc;var Vr=se("module/fraction"),zo=Vn(vr),vn=Vn(Oc),Nc={[0]:vn.ROUND_DOWN,[1]:vn.ROUND_HALF_UP,[2]:vn.ROUND_UP},Mc={[0]:vr.roundDown,[1]:vr.roundHalfUp,[2]:vr.roundUp},de=class{constructor(e,t=new Lc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Vr.logWithError(`${e} is not an integer.`),e<=0&&Vr.logWithError(`${e} is not positive.`),vn.set({precision:e+1,rounding:Nc[n]});let r=new vn(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)||Vr.logWithError(`${e} is not an integer.`),e<0&&Vr.logWithError(`${e} is negative.`),zo.DP=e,zo.RM=Mc[n]||1,new zo(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Vc=se("Raydium_price"),$e=class extends de{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new de(Yo(n.decimals),Yo(r.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Vc.logWithError("mul token not equals");let n=super.mul(t);return new $e({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 Qo=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Er=Qo;Er.SOL=new Qo(zt);import vc from"bn.js";var ks=new de(new vc(100)),Qe=class extends de{toSignificant(e=5,t,n){return this.mul(ks).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(ks).toFixed(e,t,n)}};var at=new et(0),Is=new et(1),Mp=new et(2),_p=new et(3),Vp=new et(5),jo=new et(10),vp=new et(100),Ep=new et(1e3),Fp=new et(1e4),Ts=9007199254740991;function Z(o){let e=se("Raydium_parseBigNumberish");if(o instanceof et)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new et(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Ts||o<=-Ts)&&e.logWithError(`BigNumberish number overflow: ${o}`),new et(String(o))):typeof o=="bigint"?new et(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new et(0))}function Yo(o){return jo.pow(Z(o))}function Fr(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 Fc=se("Raydium_amount"),xs=Vn(Ec);function Dc(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")):Fc.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,r=!0,i){let s=new Dr(0),a=jo.pow(new Dr(t.decimals));if(r)s=Z(n);else{let u=new Dr(0),c=new Dr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Dc(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(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 xs.DP=this.token.decimals,new xs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Bs(o){return typeof o=="object"&&o!==null&&![he,ye,Wc,de,qc,$e,Qe].some(e=>typeof e=="object"&&o instanceof e)}function Ee(o){return typeof o=="string"?qo(o):Array.isArray(o)?o.map(e=>Ee(e)):Bs(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ee(t)])):o}import{PublicKey as Dn,sendAndConfirmTransaction as ei,Transaction as Wn,TransactionMessage as qn,VersionedTransaction as Un}from"@solana/web3.js";import Zc from"axios";var v={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as Uc,ComputeBudgetProgram as Ss,Transaction as Cs,TransactionMessage as Gc,Keypair as Rs,VersionedTransaction as Ls}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xc}from"@solana/spl-token";var Ks=se("Raydium_txUtil"),Os=1644;function Wr(o){let e=[],t=[];return o.microLamports&&(e.push(Ss.setComputeUnitPrice({microLamports:o.microLamports})),t.push(v.SetComputeUnitPrice)),o.units&&(e.push(Ss.setComputeUnitLimit({units:o.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Pn(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 Ho(o,e){o.length<1&&Ks.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Ks.logWithError(`no signers provided:, ${e.toString()}`);let t=new Cs;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Os}catch{return!1}}function le(o,e){let[t,n]=Uc.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function En({instructions:o,payer:e,signers:t}){return Ho(o,[e,...t])}function Fn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Rs.generate().publicKey.toString()}){let i=new Gc({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Ls(i).serialize()).toString("base64").length<Os}catch{return!1}}var zc=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function tn(o){let e=[];return o.forEach(t=>{t instanceof Cs&&(t.recentBlockhash||(t.recentBlockhash=Xc.toBase58()),t.feePayer||(t.feePayer=Rs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Ls&&(n=zc(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as Ms,AddressLookupTableAccount as qr}from"@solana/web3.js";import{PublicKey as Ns}from"@solana/web3.js";import{MINT_SIZE as Yc,TOKEN_PROGRAM_ID as Qc,getTransferFeeConfig as jc,unpackMint as Hc}from"@solana/spl-token";var Zo=se("Raydium_accountInfo_util");async function gt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=Jo(e,i),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Jo(u,10);a=(await(await Promise.all(c.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Zo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Zo.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ns(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>o.getMultipleAccountsInfo(u,r)))}catch(u){u instanceof Error&&Zo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ne(o,e,t){let n=await gt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>E(C({},r),{accountInfo:n[i]}))}async function kn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ne(o,e.map(u=>({pubkey:nt(u)})),t),r={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<Yc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=Hc(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);r[u.pubkey.toString()]=E(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||Qc,feeConfig:(a=jc(c))!=null?a:void 0})}return r[Ns.default.toBase58()]=r[H.toBase58()],r}async function $o({connection:o,address:e}){let t=await gt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new Ms(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new qr({key:s,state:qr.deserialize(i.data)});n[s.toString()]=a,Ur[s.toString()]=a}return n}var Ur={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new qr({key:new Ms("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:qr.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 Gr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Zc.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}=Wr(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!==Dn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new Wn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var c;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},u=i!=null?i:await Pn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),tn([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await ei(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Pn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let A=await ei(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 await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));tn(g);let h=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});A.push(B)}return{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=d,i=Ie(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:Ur),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of a)s[y]===void 0&&u.push(new Dn(y));let c=await $o({connection:this.connection,address:u});for(let[y,f]of Object.entries(c))s[y]=f;let l=new qn({payerKey:this.feePayer,recentBlockhash:r?Dn.default.toBase58():await Pn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Un(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),tn([m]),(h=this.owner)!=null&&h.isKeyPair){let A=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:A},"confirmed")}return{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(A[0],{skipPreflight:b}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),tn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let A=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Ie(c,["computeBudgetConfig"]),r=t?Wr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Dn(b));if(u.length<12&&En({instructions:p,payer:this.feePayer,signers:f})||En({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Pn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,A)=>{h.recentBlockhash=b,a[A].length&&h.sign(...a[A])}),tn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let A of s){let k=await ei(this.connection,A,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,i=Ie(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:Ur),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of a)s[h]===void 0&&u.push(new Dn(h));let c=await $o({connection:this.connection,address:u});for(let[h,A]of Object.entries(c))s[h]=A;let l=t?Wr(t):{instructions:[],instructionTypes:[]},m=await Pn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,A)=>E(C({},h),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let A=[...f,h],k=t?[...l.instructions,...A]:A;if(f.length<12&&Fn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Fn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}else{let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}else{let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(A=>A.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),tn(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:q}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:q,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,I=[],L=async()=>{if(!x[R])return;let q=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:q,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(q,F=>{let $=I.findIndex(G=>G.txId===q);$>-1&&(I[$].status=F.err?"error":"success"),k==null||k([...I]),F.err||L()},"processed"),this.connection.getSignatureStatus(q)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var wt=class{constructor(e){this._owner=e}get publicKey(){return wt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return wt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return wt.isKeyPair(this._owner)}get isPublicKey(){return wt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!wt.isKeyPair(e)}};function Jo(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var _s=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Vs=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Hf=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Zf=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ti=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),vs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Jf=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Es=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Fs=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),$f=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ey=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Jc=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),$c=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),el=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),tl=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ds=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ty=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ny=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),nl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),rl=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ol=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),zn={IDO_PROGRAM_ID_V1:Jc,IDO_PROGRAM_ID_V2:$c,IDO_PROGRAM_ID_V3:el,IDO_PROGRAM_ID_V4:tl};var ry={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:nl,CREATE_CPMM_POOL_AUTH:rl,CREATE_CPMM_POOL_FEE_ACC:ol,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as il}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sl}from"@solana/spl-token";function Pe(o,e,t){return le([o.toBuffer(),(t!=null?t:sl).toBuffer(),e.toBuffer()],new il("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import At from"bn.js";var Yn=1e4;function we(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=E(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new At(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===Yn){let u=new At(i.maximumFee.toString());return{amount:o.add(u),fee:u,expirationTime:a}}else{let u=Qn(o.mul(new At(Yn)),new At(Yn-i.transferFeeBasisPoints)),c=new At(i.maximumFee.toString()),l=u.sub(o).gt(c)?o.add(c):u,m=Qn(l.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Qn(o.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),c=u.gt(s)?s:u;return{amount:o,fee:c,expirationTime:a}}}function xt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function Qn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new At(0))?t.add(new At(1)):t}var Ce={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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Cy=C({},Ce);var Ws="ray_tab_hash",ni="ray_req_hash",al=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Ws);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Ws,o)),o},Xr=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Ie(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(ni)||"[]").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(E(C({},t),{time:Date.now(),session:al()}));try{localStorage.setItem(ni,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 u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ni,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(u=>u())}return Xr(E(C({},t),{logCount:o,removeLastLog:!0}))}};var zr=se("Raydium_Api"),ri=new Map;var Yr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=qs.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return zr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(zr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&Xr({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),zr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&Xr({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),zr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await qs.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||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.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||Ce.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||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>ri.has(s)?(n.push(ri.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{ri.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,[u,c]=[t&&nt(t).toBase58(),n&&n!=="undefined"?nt(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var Qr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Us="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as fi,TOKEN_PROGRAM_ID as jt,AccountLayout as Bn,TOKEN_2022_PROGRAM_ID as vl}from"@solana/spl-token";import{PublicKey as no,SystemProgram as El}from"@solana/web3.js";var oi=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new Gr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(oi(e))}logInfo(...e){this.logger.info(oi(e))}logAndCreateError(...e){let t=oi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Ll,createCloseAccountInstruction as Ol,createTransferInstruction as Nl,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";import{PublicKey as Ml,SystemProgram as _l}from"@solana/web3.js";import Vl from"bn.js";import{PublicKey as ra,Keypair as Sl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kl}from"@solana/spl-token";import Cl from"bn.js";import{PublicKey as hl}from"@solana/web3.js";import Qs,{isBN as js}from"bn.js";import{bits as cl,BitStructure as cb,blob as ll,Blob as lb,cstr as mb,f32 as db,f32be as pb,f64 as fb,f64be as yb,greedy as bb,Layout as ml,ns64 as gb,ns64be as wb,nu64 as dl,nu64be as Ab,offset as hb,s16 as Pb,s16be as kb,s24 as Tb,s24be as Ib,s32 as pl,s32be as Bb,s40 as xb,s40be as Sb,s48 as Kb,s48be as Cb,s8 as Rb,seq as fl,struct as Lb,Structure as yl,u16 as bl,u16be as Ob,u24 as Nb,u24be as Mb,u32 as gl,u32be as _b,u40 as Vb,u40be as vb,u48 as Eb,u48be as Fb,u8 as wl,UInt as Al,union as Db,Union as Wb,unionLayoutDiscriminator as qb,utf8 as Ub}from"@solana/buffer-layout";var jr=ml,Gs=yl;var ii=Al;var Xs=wl,St=bl;var si=gl;var zs=dl;var Fe=pl;var Ys=fl;var pe=ll;var ai=cl;var nn=class extends jr{constructor(t,n,r){super(t,r);this.blob=pe(t),this.signed=n}decode(t,n=0){let r=new Qs(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 Qs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Hr=class extends jr{constructor(t){super(8,t);this._lower=ai(si(),!1),this._upper=ai(si(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function D(o){return new ii(1,o)}function je(o){return new ii(4,o)}function w(o){return new nn(8,!1,o)}function Y(o){return new nn(16,!1,o)}function Hs(o){return new nn(1,!0,o)}function Jr(o){return new nn(8,!0,o)}function Zs(o){return new nn(16,!0,o)}var Zr=class extends jr{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 Zr(pe(32),e=>new hl(e),e=>e.toBuffer(),o)}function qe(o){return new Zr(Xs(),Pl,kl,o)}function Pl(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function kl(o){return o?1:0}var ui=class extends Gs{decode(e,t){return super.decode(e,t)}};function V(o,e,t){return new ui(o,e,t)}function X(o,e,t){let n,r=typeof e=="number"?e:js(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=js(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 Ys(o,r,t)}var Tn=V([K("mint"),K("owner"),w("amount"),je("delegateOption"),K("delegate"),D("state"),je("isNativeOption"),w("isNative"),w("delegatedAmount"),je("closeAuthorityOption"),K("closeAuthority")]);function Tl(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function ci(o,...e){if(!Tl(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 li(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 Js(o,e){ci(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var eo=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),ht=(o,e)=>o<<32-e|o>>>e;var og=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Il(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function mi(o){return typeof o=="string"&&(o=Il(o)),ci(o),o}var $r=class{clone(){return this._cloneInto()}},ig={}.toString;function $s(o){let e=n=>o().update(mi(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Bl(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),u=n?4:0,c=n?0:4;o.setUint32(e+u,s,n),o.setUint32(e+c,a,n)}var ea=(o,e,t)=>o&e^~o&t,ta=(o,e,t)=>o&e^o&t^e&t,to=class extends $r{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=eo(this.buffer)}update(e){li(this);let{view:t,buffer:n,blockLen:r}=this;e=mi(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let u=eo(e);for(;r<=i-s;s+=r)this.process(u,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){li(this),Js(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Bl(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=eo(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var xl=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]),Yt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Qt=new Uint32Array(64),di=class extends to{constructor(){super(64,32,8,!1),this.A=Yt[0]|0,this.B=Yt[1]|0,this.C=Yt[2]|0,this.D=Yt[3]|0,this.E=Yt[4]|0,this.F=Yt[5]|0,this.G=Yt[6]|0,this.H=Yt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:u}=this;return[e,t,n,r,i,s,a,u]}set(e,t,n,r,i,s,a,u){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=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)Qt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Qt[m-15],p=Qt[m-2],y=ht(d,7)^ht(d,18)^d>>>3,f=ht(p,17)^ht(p,19)^p>>>10;Qt[m]=f+Qt[m-7]+y+Qt[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=ht(a,6)^ht(a,11)^ht(a,25),p=l+d+ea(a,u,c)+xl[m]+Qt[m]|0,f=(ht(n,2)^ht(n,13)^ht(n,22))+ta(n,r,i)|0;l=c,c=u,u=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,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,u,c,l)}roundClean(){Qt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var na=$s(()=>new di);var kg=se("Raydium_Util");function oa({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=Tn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:i,mint:u,amount:c,isAssociated:Pe(o,u,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 Cl(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ue({fromPublicKey:o,programId:e=Kl}){let t=Sl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Rl(o,t,e),seed:t}}function Rl(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=na(n);return new ra(r)}function pi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=In}=o;return Ll(t,e,n,r)}function Kt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=In}=o;return Ol(e,t,r,n,i)}async function _t(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(Tn.span,n),u=Z(t).add(new Vl(a)),c=Ue({fromPublicKey:r,programId:In});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[_l.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Tn.span,programId:In}),pi({mint:new Ml(ve.address),tokenAccount:c.publicKey,owner:i,programId:In})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Kt({tokenAccount:c.publicKey,payer:r,owner:i})]}}function jn({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=In}){return Nl(o,e,t,BigInt(String(n)),r,i)}var Hn=class extends ke{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 Pe(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:jt},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:vl},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=oa({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,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:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=jt,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!r||r&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new no(t.tokenProgram||jt),m=this.getAssociatedTokenAccount(n,new no(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=fi(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(A.owner.equals(l)&&Bn.decode(A.data).mint.equals(n)&&Bn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(v.CreateATA);if(n.equals(H)&&r.amount){let A=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:u});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(jn({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:jt})),p.instructionTypes.push(v.TransferAmount))}return u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ue({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Bn.span),k=El.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:Bn.span,programId:l});return p.instructions.push(k,pi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=jt,autoUnwrapWSOLToSOL:r}){var u;await this.fetchWalletTokenAccounts();let i=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let c=this.getAssociatedTokenAccount(t,n),l=await fi(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=c}return r&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Kt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=jt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new no(H).equals(i)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=fi(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(jt)&&Bn.decode(f.data).mint.equals(i)&&Bn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[v.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=jt,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new no(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Ie(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Ie(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as tm}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as nm}from"@solana/web3.js";import{PublicKey as aa}from"@solana/web3.js";var yi=V([D("instruction")]),bi=V([D("instruction")]),Fl=V([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Dl=V([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),Wl=V([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),D("option"),K("rewardVaultB"),pe(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),ql=V([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Fl,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Ul=new Proxy(Dl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),Gl=new Proxy(Wl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),ro=new Proxy(ql,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(Ht).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Xl=V([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),gi=V([D("instruction"),w("nonce"),X(Xl,5,"rewardTimeInfo")]),wi=V([D("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Ai=V([D("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),ew=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),hi=V([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),tw=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),ia=V([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),2,"rewardDebts"),X(w(),17)]),sa=V([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Y(),5,"rewardDebts"),X(w(),16)]),rt=V([D("instruction"),w("amount")]),zl=V([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Hs("digitShift"),X(D(),7,"reserved1"),X(w(),7,"reserved2")]),Yl=V([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(D(),32,"reserved1"),X(zl,4,"votingMints"),Jr("timeOffset"),D("bump"),X(D(),7,"reserved2"),X(w(),11,"reserved3")]),Ql=V([Jr("startTime"),Jr("endTime"),D("kind"),X(D(),15,"reserved")]),jl=V([X(Ql,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),D("votingMintConfigIdx"),X(D(),29,"reserved")]),Hl=V([pe(8),K("voterAuthority"),K("registrar"),X(jl,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),X(D(),94,"reserved")]);var cw=se("Raydium_farm_config"),ua=new aa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ca=new aa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var la={3:hi,5:ia,6:sa},Pi=o=>[3,5,6].indexOf(o)!==-1,ki=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)},Ht={"Standard SPL":0,"Option tokens":1},ut={[_s.toString()]:3,[Vs.toString()]:5,[Xn.toString()]:6};import{PublicKey as me,SystemProgram as pa,SYSVAR_RENT_PUBKEY as $l,SYSVAR_CLOCK_PUBKEY as oo,TransactionInstruction as Pt}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Dw,TOKEN_PROGRAM_ID as Zt,ASSOCIATED_TOKEN_PROGRAM_ID as Ww}from"@solana/spl-token";import fa from"bn.js";import Zl from"bn.js";var Jl=se("Raydium.farm.util");function Zn({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function ct({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var ma=({programId:o,poolId:e})=>le([e.toBuffer()],o);function da(o){return{isSet:new Zl(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(Ht[o.rewardType])}}function Ti(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function Jn(o){let e=la[o];return e||Jl.logWithError("invalid version",o),e}var em=se("Raydium_farm_instruction"),eA={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 $n(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||em.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(yi.span);yi.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:pa.programId,isWritable:!1}),P({pubkey:$l,isWritable:!1})];return{instruction:new Pt({programId:r,keys:u,data:a}),instructionType:v.FarmV3CreateLedger}}function ya(o){var n;let e=Buffer.alloc(gi.span);gi.encode({instruction:0,nonce:new fa(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Do,P({pubkey:o.farmId}),P({pubkey:o.farmAuthority,isWritable:!1}),P({pubkey:o.lpVault}),P({pubkey:o.lpMint,isWritable:!1}),P({pubkey:o.lockVault}),P({pubkey:o.lockMint,isWritable:!1}),P({pubkey:(n=o.lockUserAccount)!=null?n:Le}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function ba(o){let e=Buffer.alloc(bi.span);bi.encode({instruction:5},e);let t=[P({pubkey:Zt,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.lpVault,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Ii({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(wi.span);wi.encode({instruction:3,rewardReopenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardPerSecond:Z(r.perSecond)},i);let s=[P({pubkey:Zt,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:n.programId,keys:s,data:i})}function Bi({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(Ai.span);Ai.encode({instruction:4,isSet:new fa(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(Ht[r.rewardType])},i);let s=[...Do,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:t.programId,keys:s,data:i})}function er(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}function tr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function nr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ga(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function wa(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:oo,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function Aa(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:pa.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}var rr=class extends ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Le)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ti(E(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:r=Xn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:ua,lockVault:ca},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ue({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);u.addInstruction({instructions:[nm.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=ma({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(Ht[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(da(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Le)?new fe(ve.address):B.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=ya({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Le)?new fe(ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Le,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ii({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Le)?new fe(ve.address):m.mint,p=a.rewardInfos.findIndex(A=>new fe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Le,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Ii({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Le)?new fe(ve.address):r.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,c.addInstruction({instructions:[Bi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Le)?new fe(ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Bi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ut[d];Pi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ct({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let F of this.scope.account.tokenAccounts)if(a){let $=Pe(this.scope.ownerPubKey,F.mint,F.programId).publicKey;F.publicKey&&$.equals(F.publicKey)&&(A[F.mint.toString()]=F.publicKey)}else A[F.mint.toString()]=F.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let F of m){let $=s&&F.mint.address===H.toString(),G=A[F.mint.address];if(!G){let{account:W,instructionParams:Ye}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new fe(F.mint.address),notUseTokenAccount:$,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!$,associatedOnly:$?!1:a,checkCreateATAOwner:u});G=W,Ye&&h.addInstruction(Ye)}A[F.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Jn(p).decode(x.data)),n.programId!==Xn.toString()&&!S){let{instruction:F,instructionType:$}=$n({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[F],instructionTypes:[$]})}let R=ki({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(F=>new fe(F))},L=p===6?Aa(I):p===5?wa(I):ga(I),q={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[q[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ut[n.programId];Pi(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(u){let I=Pe(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=ct({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Jn(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:q}=$n({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[q]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===H.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=R,I&&f.addInstruction(I)}b[g.toString()]=A;let k=[];for(let R of d){let I=s&&R.mint.address===H.toString(),L=b[R.mint.address];if(!L){let{account:q,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new fe(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:u,checkCreateATAOwner:c});L=q,F&&f.addInstruction(F)}b[R.mint.address]=L,k.push(L)}let B=ki({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new fe(R))},S=p===6?er(T):p===5?tr(T):nr(T),x={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Le.toString()?new fe(ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Le,c=this.createTxBuilder(),l;if(t.equals(Le)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ti(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new _(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[tm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=ba({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Pe(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],k=b.address,B=n&&k===H.toString(),T=m[k];if(!T){let{account:q,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=q,F&&l.addInstruction(F)}m[k.toString()]=T;let S=[];for(let q of g){let F=n&&q.mint.address===H.toString(),$=m[q.mint.address];if(!$){let{account:G,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:q.mint.programId,mint:new fe(q.mint.address),notUseTokenAccount:F,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:i,checkCreateATAOwner:s});$=G,W&&l.addInstruction(W)}m[q.mint.address]=$,S.push($)}let x=p[h],R={amount:at,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(q=>new fe(q))},I=A===6?er(R):A===5?tr(R):nr(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Xe}from"@solana/web3.js";import{AccountLayout as Em,NATIVE_MINT as $a,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";var TA=V([je("mintAuthorityOption"),K("mintAuthority"),w("supply"),D("decimals"),D("isInitialized"),je("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as SA}from"@solana/web3.js";import{MintLayout as CA,TOKEN_PROGRAM_ID as LA}from"@solana/spl-token";var io=o=>new he({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),or=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Ie(i,["amount","isRaw","name"]);return new ye(new he({mint:nt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var He=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Ie(i,["address","programId","decimals"]);return C({chainId:101,address:nt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Jt=o=>o?E(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:E(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as sr,ASSOCIATED_TOKEN_PROGRAM_ID as bm}from"@solana/spl-token";import{PublicKey as Ct,TransactionInstruction as Sn,SystemProgram as gm,SYSVAR_RENT_PUBKEY as nh}from"@solana/web3.js";var xi=V([D("instruction"),w("amountIn"),w("minAmountOut")]),Si=V([D("instruction"),w("maxAmountIn"),w("amountOut")]),YA=V([D("instruction"),D("nonce")]),rm=V([D("instruction"),D("nonce"),w("startTime")]),so=V([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),QA=V([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Ki=V([D("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Ci=V([D("instruction"),w("amountIn")]);var ha=V([w("fee")]);import{PublicKey as om}from"@solana/web3.js";var xn=new om("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),on=5e4,im=V([w("x"),w("y"),w("price")]),sm=V([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(im,on,"DataElement")]);function am(o,e){return[0,on-2]}function um(o){return[0,on-2]}function cm(o){return[0,on-2]}function lm(o,e,t){let[n,r]=am(e,t),i=n,s=r,a=0,u=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=on-2)return[a,a,!1];let c=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ri(o,e,t){let[n,r,i]=lm(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,u=o.DataElement[r].x,c=o.DataElement[r].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*o.multiplier*l/p}}function rn(o,e,t){return e*o.multiplier/t}function Pa(o,e,t){return e*t/o.multiplier}function mm(o,e){let[t,n]=um(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>on-2)return[s,s,!1];let u=o.DataElement[s].x,c=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)i=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function dm(o,e){let[t,n]=cm(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=on-2)return[s,s,!1];let u=o.DataElement[s].y,c=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function ka(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=mm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(r-u)*o.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-r)*o.multiplier/l),[y,f,!1,a]}}}function pm(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=dm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function fm(o,e){let t=ka(o,e,0,!1);return t[3]?t[0]:0}function Ta(o,e,t,n){let r=Ri(o,e,t),i=rn(o,e,r),s=rn(o,t,r),a=rn(o,n,r),u=!0,[c,l,m,d]=ka(o,i,a,u);if(!d)return 0;if(m)return n*o.multiplier/c;{let p=s-l;return Pa(o,p,r)}}function Ia(o,e,t,n){let r=Ri(o,e,t),i=rn(o,e,r),s=rn(o,t,r),a=rn(o,n,r),u=!1,[c,l,m,d]=pm(o,s,a,u);if(!d)return 0;if(m)return n*c/o.multiplier;{let p=i-l;return Pa(o,p,r)}}function ym(o){let e=sm.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 Ba(o,e,t,n){let r=fm(o,rn(o,e,Ri(o,e,t)))/o.multiplier;return n?r:1/r}var ir=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(xn);e&&(this._layoutData=ym(e==null?void 0:e.data))}}};var xa=se("Raydium_liquidity_instruction");function Sa(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Ki.span);Ki.encode({instruction:3,baseAmountIn:Z(r),quoteAmountIn:Z(i),fixedSide:s==="base"?at:Is},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:new Ct(e.id)}),P({pubkey:new Ct(t.authority),isWritable:!1}),P({pubkey:new Ct(t.openOrders),isWritable:!1}),P({pubkey:new Ct(t.targetOrders)}),P({pubkey:new Ct(e.lpMint.address)}),P({pubkey:new Ct(t.vault.A)}),P({pubkey:new Ct(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:xn})),u.push(P({pubkey:new Ct(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Ct(t.marketEventQueue),isWritable:!1})),new Sn({programId:new Ct(e.programId),keys:u,data:a})}function Li(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Ci.span);Ci.encode({instruction:4,amountIn:Z(r)},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?u.push(P({pubkey:xn})):(u.push(P({pubkey:i.id})),u.push(P({pubkey:i.id}))),u.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Sn({programId:i.programId,keys:u,data:a})}return new Sn({programId:i.programId,keys:[]})}function Ka({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=V([D("instruction"),D("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:bm,isSigner:!1,isWritable:!1},{pubkey:gm.programId,isSigner:!1,isWritable:!1},{pubkey:bt,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:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:A,coinAmount:k,pcAmount:B},I),{instruction:new Sn({keys:R,programId:o,data:I}),instructionType:v.AmmV4CreatePool}}function wm({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ee(o),s=Buffer.alloc(xi.span);xi.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return r===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Sn({programId:i.programId,keys:a,data:s})}function Am({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ee(o),s=Buffer.alloc(Si.span);Si.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Sn({programId:i.programId,keys:a,data:s})}function ao(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 wm(E(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return Am(E(C({},a),{maxAmountIn:r,amountOut:i}),t);xa.logWithError("invalid params","params",o)}throw xa.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as Xa}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as Tt,SystemProgram as Kn,Keypair as Di}from"@solana/web3.js";import za from"bn.js";import Km from"bn.js";function uo(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Oi(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Ni(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function ar(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Ca(o,e){return ar(o,e)?null:Oi(o,e)}function Ra(o,e){return ar(o,e)?null:Ni(o,e)}var bh=Buffer.from("amm_config","utf8"),hm=Buffer.from("pool","utf8"),Pm=Buffer.from("pool_vault","utf8"),km=Buffer.from("pool_reward_vault","utf8"),La=Buffer.from("position","utf8"),Tm=Buffer.from("tick_array","utf8"),Im=Buffer.from("operation","utf8"),Bm=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Oa(o,e,t,n){return le([hm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Mi(o,e,t){return le([Pm,e.toBuffer(),t.toBuffer()],o)}function Na(o,e,t){return le([km,e.toBuffer(),t.toBuffer()],o)}function be(o,e,t){return le([Tm,e.toBuffer(),uo(t)],o)}function sn(o,e,t,n){return le([La,e.toBuffer(),uo(t),uo(n)],o)}function lt(o,e){return le([La,e.toBuffer()],o)}function co(o){return le([Buffer.from("metadata","utf8"),hn.toBuffer(),o.toBuffer()],hn)}function ur(o){return le([Im],o)}function ot(o,e){return le([Bm,e.toBuffer()],o)}import mt from"bn.js";var Be=new mt(0),it=new mt(1),Vt=new mt(-1),st=new mt(1).shln(64),lo=new mt(1).shln(128),_i=st.sub(it),cr=64,Ma=lo.subn(1),Ge=-443636,Ze=-Ge,Rt=new mt("4295048016"),Lt=new mt("79226673521066979257578248091"),mo=new mt("4295048017"),po=new mt("79226673521066979257578248090"),_a=16,Va="59543866431248",va="184467440737095516",Ea="15793534762490258745",fo=new mt(10).pow(new mt(6));var Fa={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:[]},Ah=new mt("18446744073700000000");var xm=15,ae=class{static async getTickArrays(e,t,n,r,i,s,a){let u=[],c=Q.getTickArrayStartIndexByTick(r,i),l=Q.getInitializedTickArrayInRange(s,a,i,c,Math.floor(xm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=be(t,n,l[p]);u.push(y)}let m=(await gt(e,u)).map(p=>p!==null?lr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Q.getNextTickArrayStartIndex(c,i,s),this.checkIsValidStartIndex(c,i))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/ae.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=Oe-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a-1}}else{let a=0;for(;a<Oe;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a+1}}let{publicKey:s}=be(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),u=Math.floor((r-a)/i),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Oe;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=be(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.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>Ze)return!1;let n=Q.getTickArrayStartIndexByTick(Ge,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Oe*e}};import oe from"bn.js";import{PublicKey as kt}from"@solana/web3.js";import xe from"bn.js";var Vi=14,vt=class{static maxTickInTickarrayBitmap(e){return e*Oe*an}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(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Oe,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(r){let l=e.shln(1024-c-1),m=Ca(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(c),m=Ra(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-ae.tickCount(n)}}}},mr=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=vt.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=vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=Ge)throw Error(`extensionTickBoundary check error: ${n}, ${Ge}`);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=ae.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}=vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=Q.mergeTickArrayBitmap(e).shln(an-1-a),c=ar(512,u)?null:Oi(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let u=Q.mergeTickArrayBitmap(e).shrn(a),c=ar(512,u)?null:Ni(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%vt.maxTickInTickarrayBitmap(t),r=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(r=an-r),r}};import Ot from"bn.js";var dr=class{static getfeeGrowthInside(e,t,n){let r=new Ot(0),i=new Ot(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 Ot(0),a=new Ot(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,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 u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(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 u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(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 u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,h,A;let a=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),u=re.getSqrtPriceX64FromTick(t.tickLower),c=re.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=ce.getAmountsFromLiquidity(a,u,c,n,i),[d,p]=[we(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),we(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[we(new Ot(new _(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),we(new Ot(new _(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Da}from"@solana/spl-token";var Se=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=un.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 u.push(...y),{allTrade:d,expectedAmountOut:p.mul(Vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=be(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=un.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(Vt),c,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Se.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mr.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=be(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=be(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/ae.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=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=vt.nextInitializedTickArrayStartIndex(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=mr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ge||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,u,c;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(C({},m),{perSecond:te.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||r.eq(Be)){s.push(p);continue}let y=new xe(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=te.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=te.mulDivFloor(f,p.emissionsPerSecondX64,st),A=p.rewardTotalEmissioned.add(h);s.push(E(C({},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=vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<Ge&&(n=ae.getArrayStartIndex(Ge,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*an}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Ne(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=qa.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let u of t){let c=Q.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Q.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=be(u.programId,u.id,m);i.push({pubkey:d}),r[d.toString()]=u.id}}let s=await Ne(e,i,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=r[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=E(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await gt(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=yo.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=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),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA: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(x=>E(C({},x),{pendingReward:new xe(0)})),leverage:B,tokenFeeAmountA:new xe(0),tokenFeeAmountB:new xe(0)}];let T=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);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await gt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lr.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[m[h].toString()],B=y[m[A].toString()],T=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await dr.GetPositionFees(f,g,T,S),I=await dr.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new xe(0))?x:new xe(0),g.tokenFeeAmountB=R.gte(new xe(0))?R:new xe(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new xe(0))?I[L]:new xe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new _(0),catchLiquidityInsufficient:u=!1}){var q;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new _(0))?c=l?Rt.add(new xe(1)):Lt.sub(new xe(1)):c=re.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Se.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((q=p.fee)!=null?q:Be),c,u),A=we(f,d,r,!1),k=re.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new _(1).div(k),T=f.mul(new xe(Math.floor((1-s)*1e10))).div(new xe(1e10)),S=we(T,d,r,!1),x=l?e.currentPrice:new _(1).div(e.currentPrice),R=new _(B).sub(x).abs(),I=x,L=new Qe(new _(R).mul(10**15).toFixed(0),new _(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=r.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new he(E(C({},c),{mint:c.address,isToken2022:c.programId===Da.toBase58()})),new he(E(C({},l),{mint:l.address,isToken2022:l.programId===Da.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Se.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(c.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=E(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=E(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),L=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:h.mul(new _(10**(20+d.decimals))).toFixed(0)}),q=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:A.mul(new _(10**(20+d.decimals))).toFixed(0)}),F=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:q,priceImpact:k,fee:F,remainingAccounts:T,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(),u=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-u,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[nt(e.mintA.address).toString()],d=r[nt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),b=re.getSqrtPriceX64FromTick(s),g=re.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new _(h.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(A.toString()).div(new _(10).pow(y)).mul(d.value)),S=new _(k.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(B.toString()).div(new _(10).pow(y)).mul(d.value)),x=new _(1).div(T.add(S)),I=new _(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),L=3600*24*365,q=e.rewardDefaultInfos.map(F=>{var W,Ye;let $=F.mint.decimals,G=r[F.mint.address];return u<((W=F.startTime)!=null?W:0)||u>((Ye=F.endTime)!=null?Ye:0)||!F.perSecond||!G||$===void 0?0:new _(G.value).mul(new _(F.perSecond).mul(L)).div(new _(10).pow($)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:q,apr:I+q.reduce((F,$)=>F+$,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),m=re.getSqrtPriceX64FromTick(n),d=re.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=we(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new xe(new _(y.amount.sub((h=y.fee)!=null?h:Be).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new xe(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new xe(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Se.getAmountsFromLiquidity({epochInfo:u,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 u=re.getSqrtPriceX64FromTick(n),c=re.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(re.priceToSqrtPriceX64(new _(t.price),t.mintA.decimals,t.mintB.decimals),u,c,i,a),[d,p]=[we(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),we(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[we(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),we(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(u=>!n[u.id]).map(u=>new kt(u.id));(await gt(e,r)).forEach((u,c)=>{!u||(n[r[c].toBase58()]=cn.decode(u.data))});let s=t.map(u=>ot(new kt(u.programId),new kt(u.id)).publicKey),a=await Se.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>E(C({},u),{[c.id]:E(C({},n[c.id]),{id:new kt(c.id),version:6,programId:new kt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:E(C({},c.config),{id:new kt(c.config.id),fundOwner:""}),currentPrice:new _(c.price),exBitmapInfo:a[ot(new kt(c.programId),new kt(c.id)).publicKey.toBase58()],startTime:n[c.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]}};var vi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wa(o){return E(C({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:vi,week:vi,month:vi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var te=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(Be)||(i=i.add(it)),i}static mulDivFloor(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).add(n.sub(it)).div(n)}static x64ToDecimal(e,t){return new _(e.toString()).div(_.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(_.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(lo).sub(t).mod(lo)}};function Me(o,e){return Ei(o.mul(e),64,256)}function Sm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ei(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var re=class{static sqrtPriceX64ToPrice(e,t,n){return te.x64ToDecimal(e).pow(2).mul(_.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return te.decimalToX64(e.mul(_.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))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(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))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(Be))return e;let i=t.shln(cr);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?te.mulDivCeil(s,e,a):te.mulDivRoundingUp(s,it,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 te.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(cr);if(r)return e.add(i.div(t));{let s=te.mulDivRoundingUp(i,it,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<Ge||e>Ze)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=Me(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=Me(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=Me(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=Me(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=Me(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=Me(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=Me(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=Me(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=Me(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=Me(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=Me(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=Me(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=Me(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=Me(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=Me(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=Me(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=Me(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=Me(n,new oe("37481735321082"))),e>0&&(n=Ma.div(n)),n}static getTickFromPrice(e,t,n){return re.getTickFromSqrtPriceX64(re.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Lt)||e.lt(Rt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=Sm(n,32,128),i=new oe("8000000000000000","hex"),s=0,a=new oe(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new oe(0))&&s<_a;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let c=a.shrn(32),m=r.add(c).mul(new oe(Va)),d=Ei(m.sub(new oe(va)),64,128).toNumber(),p=Ei(m.add(new oe(Ea)),64,128).toNumber();return d==p?d:re.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ln=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=re.getTickFromSqrtPriceX64(re.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=ln.getTickWithPriceAndTickspacing(e,t,n,r),s=re.getSqrtPriceX64FromTick(i);return re.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(Be))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(cr),s=t.sub(e);return r?te.mulDivRoundingUp(te.mulDivCeil(i,s,t),it,e):te.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");return r?te.mulDivCeil(n,t.sub(e),st):te.mulDivFloor(n,t.sub(e),st)}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?te.mulDivRoundingUp(a,it,_i):a.shrn(cr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),te.mulDivFloor(n,_i,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:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new oe(new _(u.toString()).mul(l).toFixed(0)),d=new oe(new _(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:u}){var h,A,k,B;let c=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),l=re.getSqrtPriceX64FromTick(t),m=re.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[we(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),we(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[we(new oe(new _(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),we(new oe(new _(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},un=class{static swapCompute(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(Be))throw new Error("amountSpecified must not be 0");if(y||(y=s?Rt.add(it):Lt.sub(it)),s){if(y.lt(Rt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Lt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Be),g={amountSpecifiedRemaining:d,amountCalculated:Be,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new oe(0)},h=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Be)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(A,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Se.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:q}=be(e,t,h);R=q,A=n[h];try{x=Q.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Ge?T.tickNext=Ge:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=re.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=un.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(Vt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=re.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(be(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Be,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),u=r.gte(Be);if(u){let l=te.mulDivFloor(r,fo.sub(new oe(i.toString())),fo);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(Vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromOutput(e,n,r.mul(Vt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(Vt))&&(s.amountOut=r.mul(Vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=te.mulDivCeil(s.amountIn,new oe(i),fo.sub(new oe(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Oe=60,an=512,Q=class{static getTickArrayAddressByTick(e,t,n,r){let i=Q.getTickArrayStartIndexByTick(n,r),{publicKey:s}=be(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>=Oe)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=ae.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)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Oe,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Oe,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*Oe:e+t*Oe}static mergeTickArrayBitmap(e){let t=new Km(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*Oe));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,an,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,r,i);for(let u of a){let{publicKey:c}=be(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}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(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ge||e>Ze}static nextInitTick(e,t,n,r,i){if(ae.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<Oe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Oe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Oe;){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=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}};var Ua=V([pe(8),D("bump"),St("index"),K(""),je("protocolFeeRate"),je("tradeFeeRate"),St("tickSpacing"),X(w(),8,"")]),Cm=V([je("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),X(Y(),1,"")]),Fi=V([pe(8),qe("initialized"),K("poolId"),X(Cm,1e3,"observations"),X(Y(),5,"")]),Rm=V([D("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),cn=V([pe(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),St("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),Fe("tickCurrent"),St("observationIndex"),St("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),D("status"),X(D(),7,""),X(Rm,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),Lm=V([Y("growthInsideLastX64"),w("rewardAmountOwed")]),yo=V([pe(8),D("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Lm,3,"rewardInfos"),X(w(),8,"")]),SP=V([pe(8),D("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Y(),3,"rewardGrowthInside"),X(w(),8,"")]),Om=V([Fe("tick"),Zs("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),X(Y(),3,"rewardGrowthsOutsideX64"),X(je(),13,"")]),lr=V([pe(8),K("poolId"),Fe("startTickIndex"),X(Om,Oe,"ticks"),D("initializedTickCount"),X(D(),115,"")]),Ga=V([pe(329),X(K(),100,"whitelistMints")]),qa=V([pe(8),K("poolId"),X(X(w(),8),Vi,"positiveTickArrayBitmap"),X(X(w(),8),Vi,"negativeTickArrayBitmap")]);var Ya=se("Raydium_Clmm"),It={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]},Te=class{static createPoolInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...It.createPool,...g]);return new Tt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ue({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[Kn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Fi.span),space:Fi.span,programId:n})],{publicKey:f}=Oa(n,a,d,p),{publicKey:b}=Mi(n,f,d),{publicKey:g}=Mi(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||De),p,g,new U(s.programId||De),ot(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Di.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=co(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Di.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=co(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,c,s,a,u,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Xa,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new za(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Di.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(p,y,f),{publicKey:h}=be(p,y,b),{publicKey:A}=Pe(n.wallet,m,De),{publicKey:k}=co(m),{publicKey:B}=lt(p,m),{publicKey:T}=sn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,i,f,b,s,a,u,c,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=V([]),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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...It.closePosition,...u]);return new Tt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=Pe(n.wallet,r.nftMint,De),{publicKey:a}=lt(i,r.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new za(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([Y("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...It.decreaseLiquidity,...S]);return new Tt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=be(c,l,m),{publicKey:y}=be(c,l,d),{publicKey:f}=Pe(r.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=sn(c,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g){let h=V([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...It.swap,...B]);return new Tt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([w("openTime"),w("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:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...It.initReward,...f]);return new Tt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Na(i,s,r.mint).publicKey,u=ur(i).publicKey,c=[this.initRewardInstruction(i,n.wallet,s,u,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([D("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...It.setRewardEmissions,...f]);return new Tt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Ya.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ur(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let u=V([D("rewardIndex")]),c=[{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:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...It.collectReward,...l]);return new Tt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Ya.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,u,r,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(c,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as _m}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Vm}from"@solana/spl-token";import{PublicKey as Nm}from"@solana/web3.js";import Qa from"bn.js";var ja=new Qa(25),Ha=new Qa(1e4);var Mm=se("Raydium_liquidity_serum");function Za({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=Nm.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw Mm.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 ck from"bn.js";function bo({programId:o}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function mn({name:o,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function vm({programId:o,marketId:e}){let{publicKey:t}=le([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function qi({programId:o}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Ja({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:u}){let c=mn({name:"amm_associated_seed",programId:a,marketId:t}),l=mn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=qi({programId:a}),p=mn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=mn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=mn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=vm({programId:a,marketId:t}),g=mn({name:"target_associated_seed",programId:a,marketId:t}),h=mn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Za({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:_m.default,configId:bo({programId:a})}}var Wi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},go=o=>{let e={},t=Vm.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:He({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new _(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new _(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new _(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Wi,week:Wi,month:Wi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:bo({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import tt from"bn.js";var pr=class extends ke{constructor(t){super(t);this.stableLayout=new ir({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 tt(new _(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=io(t[i?"mintB":"mintA"]),[u,c]=[new tt(new _(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new tt(new _(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new tt(new _(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.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",u.toString(),"quoteReserve",c.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?Fr(s.mul(c),u):Fr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Fr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Qe(new tt(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config:u,txVersion:c,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Xe(n.lpMint.address)}),A=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[I,L]=k,[q,F]=B,$=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Nt=await m.handleTokenAccount({side:"in",amount:q,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:W}=Nt,Ye=Ie(Nt,["tokenAccount"]);G.addInstruction(Ye);let gn=await m.handleTokenAccount({side:"in",amount:F,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:yn}=gn,en=Ie(gn,["tokenAccount"]);G.addInstruction(en);let Br=await m.handleTokenAccount({side:"out",amount:0,mint:new Xe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Dt}=Br,bn=Ie(Br,["tokenAccount"]);return G.addInstruction(bn),G.addInstruction({instructions:[Sa({poolInfo:n,poolKeys:$,userKeys:{baseTokenAccount:W,quoteTokenAccount:yn,lpTokenAccount:Dt,owner:this.scope.ownerPubKey},baseAmountIn:q,quoteAmountIn:F,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:u}=t,c=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Xe(n.mintA.address),new Xe(n.mintB.address),new Xe(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:k}=x,B=Ie(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Ie(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Li({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Cn,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(c);let g={};for(let W of this.scope.account.tokenAccountRawInfos)(g[W.accountInfo.mint.toString()]===void 0||Pe(this.scope.ownerPubKey,W.accountInfo.mint,Cn).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 tt(0)),k=t.mintA.address===he.WSOL.mint.toString(),B=t.mintB.address===he.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let W=ut[s.programId],Ye=ct({programId:new Xe(s.programId),poolId:new Xe(s.id),owner:this.scope.ownerPubKey,version:W}),yn,en=await this.scope.connection.getAccountInfo(Ye);if(en&&(yn=Jn(W).decode(en.data)),W!==6&&!yn){let{instruction:Wt,instructionType:Oo}=$n({id:new Xe(s.id),programId:new Xe(s.programId),version:W,ledger:Ye,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Wt],instructionTypes:[Oo]})}let Dt=[];for(let Wt of s.rewardInfos){let Oo=Wt.mint.address===he.WSOL.mint.toString();if(g[Wt.mint.address])Dt.push(g[Wt.mint.address]);else{let{account:Ji,instructionParams:$i}=await this.scope.account.getOrCreateTokenAccount({mint:new Xe(Wt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Oo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Ji||this.logAndCreateError("farm reward account not found:",Wt.mint.address),$i&&b.addInstruction($i),Dt.push(Ji)}}let bn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Nt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:bn,lpAccount:h,rewardAccounts:Dt},gn=ut[s.programId],Br=gn===6?er(Nt):gn===5?tr(Nt):nr(Nt),xu={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[Br],instructionTypes:[xu[gn]]})}let I=await this.getAmmPoolKeys(t.id),L=Li({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[q,F]=t.mintA.address===n.mintA.address?[T,x]:[x,T],$=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Te.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:$,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:q,tokenAccountB:F},withMetadata:"create"},i),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var q;let b=c.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),g=c.useSOLBalance&&r.mint.equals($a),h=c.useSOLBalance&&i.mint.equals($a),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Ja({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=Ka(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Pe(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[I],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=bo({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return ha.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,u]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new _(y.toString()).div(p.toString());else{let I=Ba(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);d==="quote"?b=new _(1e6).div(I*1e6):b=new _(I*1e6).div(1e6)}let g=n,h=new tt(0),A=new tt(0);if(!g.isZero())if(f){A=Qn(g.mul(ja),Ha);let I=g.sub(A),L=p.add(I);h=y.mul(I).div(L)}else{A=g.mul(new tt(2)).div(new tt(1e4));let I=g.sub(A);d==="quote"?h=new tt(Ta(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber())):h=new tt(Ia(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber()))}let k=new tt(new _(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new _(h.toString()).div(new _(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new _(h.toString()).div(g.sub(A).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:A}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),h=y&&b.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[ao({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Ne(this.scope.connection,t.map(l=>({pubkey:new Xe(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=so.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ne(this.scope.connection,s.map(l=>({pubkey:new Xe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new tt(Em.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=E(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new _(p.toString()).div(new _(10).pow(m.quoteDecimal.toString())).div(new _(d.toString()).div(new _(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=go({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as eu,TOKEN_PROGRAM_ID as tu}from"@solana/spl-token";var fr=class extends ke{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)||ie.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,r,new _(1).div(a)]:[r,i,a],b=re.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:E(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:u.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:[]}},Fa),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===H.toString(),A=n.useSOLBalance&&e.mintB.address===H.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(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:c,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===H.toString(),g=u.useSOLBalance&&t.mintB.address===H.toString(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(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:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(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:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===H.toString(),f=i.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===H.toString(),q;if(I.mint.address===t.mintA.address)q=b;else if(I.mint.address===t.mintB.address)q=g;else{let{account:F,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(I.mint.programId),mint:new ie(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});q=F,$&&p.addInstruction($)}T.push(q)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:i});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(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:c?!1:r,checkCreateATAOwner:i});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(H),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:r,checkCreateATAOwner:i});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=u.useSOLBalance&&e.mintA.address===H.toBase58(),b=u.useSOLBalance&&e.mintB.address===H.toBase58(),g;!s||s.equals(new _(0))?g=y?Rt.add(new dt(1)):Lt.sub(new dt(1)):g=re.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?r:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let A;if(!A){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=B,T&&p.addInstruction(T)}(!h||!A)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:A,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:A},inputMint:new ie(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:c})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)r?Pe(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===H.toString(),y=n.useSOLBalance&&d.mintB.address===H.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===H.toString(),B=c[A.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}c[A.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ur(e).publicKey);return t?Ga.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=yo.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 Ne(this.scope.connection,e.map(i=>({pubkey:new ie(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=cn.decode(s.accountInfo.data),u=re.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=E(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),r=await Ne(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),i={};r.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=Ua.decode(u.accountInfo.data))});let s=await Se.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||tu.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Jt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||tu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Jt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:E(C({},i[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Se.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Wa(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(eu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(eu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as xo,TOKEN_PROGRAM_ID as Et,AccountLayout as $m}from"@solana/spl-token";import ru from"bn.js";var Ui=new ru(1e6);function Fm(o,e,t){return o.mul(e).add(t).sub(new ru(1)).div(t)}function nu(o,e,t){return o.mul(e).div(t)}var wo=class{static tradingFee(e,t){return Fm(e,t,Ui)}static protocolFee(e,t){return nu(e,t,Ui)}static fundFee(e,t){return nu(e,t,Ui)}};import yr from"bn.js";function Ao(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Dm(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=Ao(o,e);return n.gt(Rn)&&(t=t.add(new yr(1)),e=o.div(t),n=Ao(o,t),n.gt(Rn)&&(e=e.add(new yr(1)))),[t,e]}var Rn=new yr(0),ho=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Dm(r,i),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}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 Ao(e.mul(n),t).gt(Rn)&&s.gt(Rn)&&(s=s.add(new yr(1))),Ao(e.mul(r),t).gt(Rn)&&a.gt(Rn)&&(a=a.add(new yr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Po=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=wo.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:u}=ho.swapWithoutFees(s,t,n),c=a.add(i);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:i}}};var Wm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),qm=Buffer.from("amm_config","utf8"),Um=Buffer.from("pool","utf8"),Gm=Buffer.from("pool_lp_mint","utf8"),Xm=Buffer.from("pool_vault","utf8"),zm=Buffer.from("observation","utf8");function Ln(o){return le([Wm],o)}function Ym(o,e){return le([qm,Hm(e)],o)}function Qm(o,e,t,n){return le([Um,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function jm(o,e){return le([Gm,e.toBuffer()],o)}function ou(o,e,t){return le([Xm,e.toBuffer(),t.toBuffer()],o)}function ko(o,e){return le([zm,e.toBuffer()],o)}function Hm(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function iu({programId:o,mintA:e,mintB:t}){let n=Ym(o,0).publicKey,r=Ln(o).publicKey,i=Qm(o,n,e,t).publicKey,s=jm(o,i).publicKey,a=ou(o,i,e).publicKey,u=ou(o,i,t).publicKey,c=ko(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as br}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gi,TOKEN_2022_PROGRAM_ID as su,ASSOCIATED_TOKEN_PROGRAM_ID as Zm}from"@solana/spl-token";var Jm=se("Raydium_cpmm"),gr={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 au(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Zm,isSigner:!1,isWritable:!1},{pubkey:Uo,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},T),new br({keys:B,programId:o,data:Buffer.from([...gr.initialize,...T])})}function uu(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:su,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Jm.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new br({keys:b,programId:o,data:Buffer.from([...gr.deposit,...g])})}function cu(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:su,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:_r,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new br({keys:b,programId:o,data:Buffer.from([...gr.withdraw,...g])})}function To(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f){let b=V([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new br({keys:g,programId:o,data:Buffer.from([...gr.swapBaseInput,...h])})}function Io(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f){let b=V([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new br({keys:g,programId:o,data:Buffer.from([...gr.swapBaseOutput,...h])})}import _e from"bn.js";var lu=V([pe(8),D("bump"),qe("disableCreatePool"),St("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Bo=V([pe(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"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var wr=class extends ke{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ne(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),r={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Bo.decode(d.accountInfo.data);r[String(e[m])]=E(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ne(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=lu.decode(y.data)}}let u={},c=await Ne(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new _e($m.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new _(y.toString()).div(new _(10).pow(d.mintDecimalB)).div(new _(p.toString()).div(new _(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var u,c,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[r]:E(C({},i),{id:new z(r),configInfo:i.configInfo,version:7,authority:Ln(i.programId).publicKey,mintA:He({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Jt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Jt((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Jt(n[t.mintA.toBase58()].feeConfig):void 0}}),i=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Jt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new _(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new _(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Ln(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Ie(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var q,F,$;let d=r.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),p=new _e(new z(c.mintA.address).toBuffer()).lte(new _e(new z(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=r.useSOLBalance&&y.address===xo.toBase58(),A=r.useSOLBalance&&f.address===xo.toBase58(),[k,B]=[new z(y.address),new z(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=iu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[au(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,Pe(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new z((F=y.programId)!=null?F:Et),new z(($=f.programId)!=null?$:Et),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(u),T.versionBuild({txVersion:a,extInfo:{address:E(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new _(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Qe(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new _(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,A=t.mintA.address===xo.toString(),k=t.mintB.address===xo.toString(),B=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let q=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Ye=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:q,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:F}=Ye,$=Ie(Ye,["tokenAccount"]);B.addInstruction($);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new Qe(new _e(1)).sub(s);return B.addInstruction({instructions:[uu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),F,x,I,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[v.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var F,$;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Qe(new _e(1)).sub(i),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(r.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(r.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[we(l,t.mintA.extensions.feeConfig,d,!1),we(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(H),k=h.equals(H),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let q=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[cu(new z(t.programId),this.scope.ownerPubKey,new z(q.authority),new z(t.id),L,B,T,new z(q.vault.A),new z(q.vault.B),g,h,new z(t.lpMint.address),r,l.sub((F=p.fee)!=null?F:new _e(0)),m.sub(($=y.fee)!=null?$:new _e(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:q.lookupTableAccount?[q.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,q;let{poolInfo:t,poolKeys:n,baseIn:r,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:u,txVersion:c}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new z(t.mintA.address),new z(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new _e((1-s)*1e4)).div(new _e(1e4));let b=t.mintA.address===H.toBase58(),g=t.mintB.address===H.toBase58(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((S=t.mintA.programId)!=null?S:Et),owner:this.scope.ownerPubKey,createInfo:b||!r?{payer:this.scope.ownerPubKey,amount:r?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new z((x=t.mintB.programId)!=null?x:Et),owner:this.scope.ownerPubKey,createInfo:g||r?{payer:this.scope.ownerPubKey,amount:r?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[r?To(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),h,k,new z(T.vault.A),new z(T.vault.B),new z((R=t.mintA.programId)!=null?R:Et),new z((I=t.mintB.programId)!=null?I:Et),y,f,ko(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Io(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),k,h,new z(T.vault.B),new z(T.vault.A),new z((L=t.mintB.programId)!=null?L:Et),new z((q=t.mintA.programId)!=null?q:Et),f,y,ko(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[r?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(u),p.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Po.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new _(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new _e((1-r)*1e4)).div(new _e(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,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,B,T,S,x,R;let u=1-Number(i.toSignificant())/100,c=new _e(new _(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=we(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new _e(0)),d=new _e(new _(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.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=m.mul(d).div(p==="base"?t:n),f={amount:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=ed(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=we(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Qe(new _e(1)).add(i),g=we(b.mul(f.amount.sub((B=f.fee)!=null?B:new _e(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function ed(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new _e(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new _e(1))),{amountA:r,amountB:i}}import{PublicKey as pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as zi,createTransferInstruction as bu}from"@solana/spl-token";import Co from"bn.js";import{TOKEN_PROGRAM_ID as td,TOKEN_2022_PROGRAM_ID as nd,ASSOCIATED_TOKEN_PROGRAM_ID as rd}from"@solana/spl-token";import{PublicKey as J,TransactionInstruction as od,SystemProgram as id}from"@solana/web3.js";import dn from"bn.js";function sd(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[P({pubkey:td,isWritable:!1}),P({pubkey:nd,isWritable:!1}),P({pubkey:rd,isWritable:!1}),P({pubkey:id.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:r}));let g=[u,c],h=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new J(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:r})):b.push(P({pubkey:n})),b.push(P({pubkey:new J(A[S])})),b.push(P({pubkey:new J(A[S+1])})),x.version===6){let I=h[S];b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)})),b.push(P({pubkey:_r})),b.push(P({pubkey:ot(new J(x.programId),new J(x.id)).publicKey})),f.push(ad(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new J(L)}))}else if(x.version===5){let I=h[S];b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(I.marketProgramId)})),b.push(P({pubkey:new J(I.marketAuthority)})),b.push(P({pubkey:Es,isWritable:!1})),b.push(P({pubkey:new J(I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.marketId)})),b.push(P({pubkey:new J(I.marketBids)})),b.push(P({pubkey:new J(I.marketAsks)})),b.push(P({pubkey:new J(I.marketEventQueue)})),b.push(P({pubkey:new J(I.marketBaseVault)})),b.push(P({pubkey:new J(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(L?I.id:I.marketProgramId)})),b.push(P({pubkey:new J(L?I.id:I.marketAuthority)})),b.push(P({pubkey:new J(L?I.id:I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(L?I.id:I.marketId)})),b.push(P({pubkey:new J(L?I.id:I.marketBids)})),b.push(P({pubkey:new J(L?I.id:I.marketAsks)})),b.push(P({pubkey:new J(L?I.id:I.marketEventQueue)})),b.push(P({pubkey:new J(L?I.id:I.marketBaseVault)})),b.push(P({pubkey:new J(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(P({pubkey:new J(I.authority)})),b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)}))}else throw Error("pool type error")}let k=V([D("insId"),w("amountIn"),w("amountOut"),X(Y(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new od({keys:b,programId:o,data:B})}function ad(o,e){if(o)if(e){let t=new dn(o).div(new dn(25));return t.gt(mo)?t:mo}else{let t=new dn(o).mul(new dn(25));return t.lt(po)?t:po}else return e?mo:po}function mu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?Rt.add(it):Lt.sub(it);return Te.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new dn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[d?To(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new J(m.mintA.address),new J(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):Io(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new J(m.mintB.address),new J(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ao({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new dn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?v.AmmV5SwapBaseIn:v.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[sd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new dn(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var du={[ti.toBase58()]:3},pu={3:ti};var Xi=V([pe(5),pe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]),fu={3:Xi};import{PublicKey as yu}from"@solana/web3.js";var So=se("Serum"),Ko=class{static getProgramId(e){let t=pu[e];return t||So.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=du[t];return n||So.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=fu[e];return t||So.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=yu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return So.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:yu.default,nonce:r}}};var Ft=new Co(0),Ar=class extends ke{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(H));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 _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<i.length;c++)u.gte(i[c].amount)?(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(i[c].amount)):(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),jn({destination:a.addresses.newAccount,source:i[c].publicKey,amount:u,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 _t({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:[jn({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Kt({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(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(H),m=c.amount.token.mint.equals(H),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?zi:Ke,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.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,c.amount.token.isToken2022?zi:Ke);m&&a.addInstruction({endInstructions:[Kt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ke})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?zi:Ke)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=mu({routeProgram:i,inputMint:d,swapInfo:E(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[bu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[bu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.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=vs,clmm:n=Fs,cpmm:r=Ds}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:so.offsetOf("baseMint"),length:64}}),s=V([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})),u=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:cn.span}],dataSlice:{offset:cn.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Bo.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:i}){e=e.toString()===pn.default.toString()?H:e,t=t.toString()===pn.default.toString()?H:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?u[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?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}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=go(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new pn(f.mintA.address),programId:Ke,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 pn(f.mintB.address),programId:Ke,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 u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ke)?(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(Ke)?(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 c=await kn({connection:this.scope.connection,mints:Array.from(r).map(f=>new pn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(C({},f),{[b]:E(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:i,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,A,k,B,T,S,x,R;let m=l===void 0?new Co(0):e.raw.mul(new Co(l.feeBps.toNumber())).div(new Co(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:nt(t.address).toString()}),b=[];for(let I of n)try{b.push(E(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(r)){let q={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},F=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:q,amountIn:p})}}catch(W){this.logDebug("route in error",G.version,G.id.toString(),W.message);return}}).sort((G,W)=>{var en,Dt,bn,Nt;let Ye=G===void 0?Ft:G.data.amountOut.amount.raw.sub((Dt=(en=G.data.amountOut.fee)==null?void 0:en.raw)!=null?Dt:Ft),yn=W===void 0?Ft:W.data.amountOut.amount.raw.sub((Nt=(bn=W.data.amountOut.fee)==null?void 0:bn.raw)!=null?Nt:Ft);return Ye.lt(yn)?1:-1})[0];if(F===void 0)continue;let $=new ye(io(q),F.data.amountOut.amount.raw.sub((h=(g=F.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Ft));for(let G of L.out)try{let W=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:$});b.push(E(C({},W),{allTrade:!!(F.data.allTrade&&W.allTrade),amountIn:F.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new _(new $e({baseToken:F.data.amountIn.amount.token,denominator:F.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:Ft)}).toFixed()),priceImpact:new _(F.data.priceImpact.add(W.priceImpact).toFixed()),fee:[F.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[F.pool,G],remainingAccounts:[F.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new ye(F.data.amountOut.amount.token,((S=(T=F.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Ft).add((R=(x=W.amountOut.fee)==null?void 0:x.raw)!=null?R:Ft)):void 0,middleToken:F.data.amountOut.amount.token,poolReady:F.data.poolReady&&W.poolReady,poolType:[F.data.poolType,W.poolType],feeConfig:y,expirationTime:xt(F.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",G.version,G.id.toString(),W.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Ft)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=Se.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new _(y.toFixed()),executionPrice:new _(f.toFixed()),priceImpact:new _(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.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:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.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(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(r.size>0){let c=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ne(this.scope.connection,Array.from(s).map(l=>({pubkey:new pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Xi.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ko.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:qi({programId:new pn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:Ln(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Ke.toBase58(),decimals:c.lpDecimals}),config:E(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as ud}from"@solana/spl-token";import{PublicKey as cd,Transaction as Yi,TransactionInstruction as ld}from"@solana/web3.js";import gu from"bn.js";var ze=class extends ke{static getPdaPoolId(e,t){return le([ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return le([ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new gu(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=>ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>ze.getPdaOwnerId(t,m,r,l).publicKey));let u=await gt(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==ze.POOL_LAYOUT.span||b.data.length!==ze.OWNER_LAYOUT.span)continue;let g=ze.POOL_LAYOUT.decode(f.data),h=ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new gu(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=B&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(he.WSOL.mint),associatedOnly:u.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(c)}n.addInstruction({instructions:[ze.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 c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(he.WSOL.mint),associatedOnly:m.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:r,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Ho(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Yi().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Yi().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Yi().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=V([]),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(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:ud,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 ld({keys:i,programId:e,data:a})}},pt=ze;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=V([pe(8),D("bump"),D("status"),w("openTime"),w("endTime"),K("ammId"),X(V([D("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),pt.OWNER_LAYOUT=V([pe(8),D("bump"),D("version"),K("poolId"),K("owner"),w("lpAmount"),X(V([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new cd(e)),pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as hr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ku}from"@solana/spl-token";import Pr from"bn.js";import{TransactionInstruction as dd,SYSVAR_RENT_PUBKEY as pd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as wu}from"@solana/spl-token";import{createInitializeAccountInstruction as Au}from"@solana/spl-token";import{SystemProgram as fn,Transaction as hu}from"@solana/web3.js";function md(o="accountFlags"){let e=new Hr(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 Qi=V([pe(5),md("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]);function fd({programId:o,marketInfo:e}){let t=V([D("version"),je("instruction"),w("baseLotSize"),w("quoteLotSize"),St("feeRateBps"),w("vaultSignerNonce"),w("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:pd,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 dd({keys:n,programId:o,data:r})}async function Pu({connection:o,wallet:e,marketInfo:t}){let n=new hu,r=await o.getMinimumBalanceForRentExemption(165);n.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:wu}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:wu}),Au(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Au(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new hu;return i.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Qi.span),space:Qi.span,programId:t.programId}),fn.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}),fn.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}),fn.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}),fn.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}),fd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.InitAccount,v.InitAccount]},{transaction:i,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.InitMarket]}]}var On=class extends ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ue({fromPublicKey:u,programId:i}),l=Ue({fromPublicKey:u,programId:i}),m=Ue({fromPublicKey:u,programId:i}),d=Ue({fromPublicKey:u,programId:i}),p=Ue({fromPublicKey:u,programId:i}),y=Ue({fromPublicKey:u,programId:ku}),f=Ue({fromPublicKey:u,programId:ku}),b=0,g=new Pr(100);function h(){let R=new Pr(0);for(;;)try{return{vaultOwner:hr.createProgramAddressSync([c.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new Pr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:k}=h(),B=new Pr(Math.round(10**e.decimals*n)),T=new Pr(Math.round(n*10**t.decimals*r));if(B.eq(at))throw Error("lot size is too small");if(T.eq(at))throw Error("tick size or lot size is too small");let S=await Pu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new hr(e.mint),quoteMin:new hr(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new hr(e.mint),quoteMin:new hr(t.mint)}})}};import{PublicKey as Tr}from"@solana/web3.js";import{TransactionInstruction as Tu,SYSVAR_CLOCK_PUBKEY as bd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Iu}from"@solana/spl-token";var yd=V([D("instruction"),zs("amount")]),kr=V([D("instruction")]);function Ro({programId:o},e){let t=[{pubkey:Iu,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(kr.span);return kr.encode({instruction:2},n),new Tu({keys:t,programId:o,data:n})}function ji(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(kr.span);kr.encode({instruction:2},s);let a=[{pubkey:Iu,isWritable:!1,isSigner:!1},{pubkey:bd,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 Tu({programId:e.programId,keys:a,data:s})}import Bu from"bn.js";var gd={[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},Nn=class extends ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=gd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Bu(e.coin).isZero(),!new Bu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[Ro({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Tr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Ro({programId:new Tr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Tr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Ro({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Tr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Tr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ji(E(C({},g),{side:"base"}))]:[],...l?[ji(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as wd}from"@solana/web3.js";import{MintLayout as Ad,TOKEN_2022_PROGRAM_ID as Hi,TOKEN_PROGRAM_ID as Zi}from"@solana/spl-token";var Ir=class extends ke{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=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(zt.address,zt),this._mintGroup.official.add(zt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,E(C({},c),{priority:-1}))}),i.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Hi.toBase58():Zi.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Hi.toBase58():Zi.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?Hi.toBase58():Zi.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[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 zt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new wd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Ad.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Lo=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new wt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new rr({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new pr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ir({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ar({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new fr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new wr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new On({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Nn({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=hd({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,u=new Yr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),c=new Lo(E(C({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Qr);return this._owner.publicKey}setOwner(e){return this._owner=e?new wt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Us);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(Qr),new Error(Qr)}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=E(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:r}}),this.apiData.jupTokenList[e].data}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{Lo as Raydium};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=raydium.mjs.map
|