From faaf1c3d57abfdf9579a28d9698957e95926138d Mon Sep 17 00:00:00 2001 From: Sebastian Pape <0xneo11@gmail.com> Date: Tue, 20 Feb 2024 07:51:39 +0100 Subject: [PATCH] v12.7.0: reduce EVM deadline to 1 hour --- dist/esm/index.bundle.js | 2 +- dist/esm/index.solana.js.map | 2 +- dist/umd/index.bundle.js | 2 +- dist/umd/index.solana.js.map | 2 +- package.evm.json | 4 ++-- package.json | 4 ++-- package.solana.json | 4 ++-- yarn.lock | 8 ++++---- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/dist/esm/index.bundle.js b/dist/esm/index.bundle.js index 6b2f0a98..dc205a17 100644 --- a/dist/esm/index.bundle.js +++ b/dist/esm/index.bundle.js @@ -107,7 +107,7 @@ qp((function(t,e){}));var KI=qp((function(t){t.exports=XI})),$I=KI.createContext * https://github.com/MikeMcl/decimal.js * Copyright (c) 2022 Michael Mclaughlin * MIT Licence - */function tL(t){var e,n,r,i=t.length-1,o="",a=t[0];if(i>0){for(o+=a,e=1;en)throw Error(Qk+t)}function nL(t,e,n,r){var i,o,a,s;for(o=t[0];o>=10;o/=10)--e;return--e<0?(e+=7,i=0):(i=Math.ceil((e+1)/7),e%=7),o=Vk(10,7-e),s=t[i]%o|0,null==r?e<3?(0==e?s=s/100|0:1==e&&(s=s/10|0),a=n<4&&99999==s||n>3&&49999==s||5e4==s||0==s):a=(n<4&&s+1==o||n>3&&s+1==o/2)&&(t[i+1]/o/100|0)==Vk(10,e-2)-1||(s==o/2||0==s)&&0==(t[i+1]/o/100|0):e<4?(0==e?s=s/1e3|0:1==e?s=s/100|0:2==e&&(s=s/10|0),a=(r||n<4)&&9999==s||!r&&n>3&&4999==s):a=((r||n<4)&&s+1==o||!r&&n>3&&s+1==o/2)&&(t[i+1]/o/1e3|0)==Vk(10,e-3)-1,a}function rL(t,e,n){for(var r,i,o=[0],a=0,s=t.length;an-1&&(void 0===o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/n|0,o[r]%=n)}return o.reverse()}$k.absoluteValue=$k.abs=function(){var t=new this.constructor(this);return t.s<0&&(t.s=1),oL(t)},$k.ceil=function(){return oL(new this.constructor(this),this.e+1,2)},$k.clampedTo=$k.clamp=function(t,e){var n=this,r=n.constructor;if(t=new r(t),e=new r(e),!t.s||!e.s)return new r(NaN);if(t.gt(e))throw Error(Qk+e);return n.cmp(t)<0?t:n.cmp(e)>0?e:new r(n)},$k.comparedTo=$k.cmp=function(t){var e,n,r,i,o=this,a=o.d,s=(t=new o.constructor(t)).d,u=o.s,c=t.s;if(!a||!s)return u&&c?u!==c?u:a===s?0:!a^u<0?1:-1:NaN;if(!a[0]||!s[0])return a[0]?u:s[0]?-c:0;if(u!==c)return u;if(o.e!==t.e)return o.e>t.e^u<0?1:-1;for(e=0,n=(r=a.length)<(i=s.length)?r:i;es[e]^u<0?1:-1;return r===i?0:r>i^u<0?1:-1},$k.cosine=$k.cos=function(){var t,e,n=this,r=n.constructor;return n.d?n.d[0]?(t=r.precision,e=r.rounding,r.precision=t+Math.max(n.e,n.sd())+7,r.rounding=1,n=function(t,e){var n,r,i;if(e.isZero())return e;(r=e.d.length)<32?i=(1/ML(4,n=Math.ceil(r/3))).toString():(n=16,i="2.3283064365386962890625e-10");t.precision+=n,e=bL(t,1,e.times(i),new t(1));for(var o=n;o--;){var a=e.times(e);e=a.times(a).minus(a).times(8).plus(1)}return t.precision-=n,e}(r,AL(r,n)),r.precision=t,r.rounding=e,oL(2==Ok||3==Ok?n.neg():n,t,e,!0)):new r(1):new r(NaN)},$k.cubeRoot=$k.cbrt=function(){var t,e,n,r,i,o,a,s,u,c,l=this,h=l.constructor;if(!l.isFinite()||l.isZero())return new h(l);for(Wk=!1,(o=l.s*Vk(l.s*l,1/3))&&Math.abs(o)!=1/0?r=new h(o.toString()):(n=tL(l.d),(o=((t=l.e)-n.length+1)%3)&&(n+=1==o||-2==o?"0":"00"),o=Vk(n,1/3),t=Fk((t+1)/3)-(t%3==(t<0?-1:2)),(r=new h(n=o==1/0?"5e"+t:(n=o.toExponential()).slice(0,n.indexOf("e")+1)+t)).s=l.s),a=(t=h.precision)+3;;)if(c=(u=(s=r).times(s).times(s)).plus(l),r=iL(c.plus(l).times(s),c.plus(u),a+2,1),tL(s.d).slice(0,a)===(n=tL(r.d)).slice(0,a)){if("9999"!=(n=n.slice(a-3,a+1))&&(i||"4999"!=n)){+n&&(+n.slice(1)||"5"!=n.charAt(0))||(oL(r,t+1,1),e=!r.times(r).times(r).eq(l));break}if(!i&&(oL(s,t+1,0),s.times(s).times(s).eq(l))){r=s;break}a+=4,i=1}return Wk=!0,oL(r,t,h.rounding,e)},$k.decimalPlaces=$k.dp=function(){var t,e=this.d,n=NaN;if(e){if(n=7*((t=e.length-1)-Fk(this.e/7)),t=e[t])for(;t%10==0;t/=10)n--;n<0&&(n=0)}return n},$k.dividedBy=$k.div=function(t){return iL(this,new this.constructor(t))},$k.dividedToIntegerBy=$k.divToInt=function(t){var e=this.constructor;return oL(iL(this,new e(t),0,1,1),e.precision,e.rounding)},$k.equals=$k.eq=function(t){return 0===this.cmp(t)},$k.floor=function(){return oL(new this.constructor(this),this.e+1,3)},$k.greaterThan=$k.gt=function(t){return this.cmp(t)>0},$k.greaterThanOrEqualTo=$k.gte=function(t){var e=this.cmp(t);return 1==e||0===e},$k.hyperbolicCosine=$k.cosh=function(){var t,e,n,r,i,o=this,a=o.constructor,s=new a(1);if(!o.isFinite())return new a(o.s?1/0:NaN);if(o.isZero())return s;n=a.precision,r=a.rounding,a.precision=n+Math.max(o.e,o.sd())+4,a.rounding=1,(i=o.d.length)<32?e=(1/ML(4,t=Math.ceil(i/3))).toString():(t=16,e="2.3283064365386962890625e-10"),o=bL(a,1,o.times(e),new a(1),!0);for(var u,c=t,l=new a(8);c--;)u=o.times(o),o=s.minus(u.times(l.minus(u.times(l))));return oL(o,a.precision=n,a.rounding=r,!0)},$k.hyperbolicSine=$k.sinh=function(){var t,e,n,r,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,n=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,(r=i.d.length)<3)i=bL(o,2,i,i,!0);else{t=(t=1.4*Math.sqrt(r))>16?16:0|t,i=bL(o,2,i=i.times(1/ML(5,t)),i,!0);for(var a,s=new o(5),u=new o(16),c=new o(20);t--;)a=i.times(i),i=i.times(s.plus(a.times(u.times(a).plus(c))))}return o.precision=e,o.rounding=n,oL(i,e,n,!0)},$k.hyperbolicTangent=$k.tanh=function(){var t,e,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+7,r.rounding=1,iL(n.sinh(),n.cosh(),r.precision=t,r.rounding=e)):new r(n.s)},$k.inverseCosine=$k.acos=function(){var t,e=this,n=e.constructor,r=e.abs().cmp(1),i=n.precision,o=n.rounding;return-1!==r?0===r?e.isNeg()?cL(n,i,o):new n(0):new n(NaN):e.isZero()?cL(n,i+4,o).times(.5):(n.precision=i+6,n.rounding=1,e=e.asin(),t=cL(n,i+4,o).times(.5),n.precision=i,n.rounding=o,t.minus(e))},$k.inverseHyperbolicCosine=$k.acosh=function(){var t,e,n=this,r=n.constructor;return n.lte(1)?new r(n.eq(1)?0:NaN):n.isFinite()?(t=r.precision,e=r.rounding,r.precision=t+Math.max(Math.abs(n.e),n.sd())+4,r.rounding=1,Wk=!1,n=n.times(n).minus(1).sqrt().plus(n),Wk=!0,r.precision=t,r.rounding=e,n.ln()):new r(n)},$k.inverseHyperbolicSine=$k.asinh=function(){var t,e,n=this,r=n.constructor;return!n.isFinite()||n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+2*Math.max(Math.abs(n.e),n.sd())+6,r.rounding=1,Wk=!1,n=n.times(n).plus(1).sqrt().plus(n),Wk=!0,r.precision=t,r.rounding=e,n.ln())},$k.inverseHyperbolicTangent=$k.atanh=function(){var t,e,n,r,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(t=o.precision,e=o.rounding,r=i.sd(),Math.max(r,t)<2*-i.e-1?oL(new o(i),t,e,!0):(o.precision=n=r-i.e,i=iL(i.plus(1),new o(1).minus(i),n+t,1),o.precision=t+4,o.rounding=1,i=i.ln(),o.precision=t,o.rounding=e,i.times(.5))):new o(NaN)},$k.inverseSine=$k.asin=function(){var t,e,n,r,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),n=o.precision,r=o.rounding,-1!==e?0===e?((t=cL(o,n+4,r).times(.5)).s=i.s,t):new o(NaN):(o.precision=n+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=n,o.rounding=r,i.times(2)))},$k.inverseTangent=$k.atan=function(){var t,e,n,r,i,o,a,s,u,c=this,l=c.constructor,h=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&h+4<=Kk)return(a=cL(l,h+4,d).times(.25)).s=c.s,a}else{if(!c.s)return new l(NaN);if(h+4<=Kk)return(a=cL(l,h+4,d).times(.5)).s=c.s,a}for(l.precision=s=h+10,l.rounding=1,t=n=Math.min(28,s/7+2|0);t;--t)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(Wk=!1,e=Math.ceil(s/7),r=1,u=c.times(c),a=new l(c),i=c;-1!==t;)if(i=i.times(u),o=a.minus(i.div(r+=2)),i=i.times(u),void 0!==(a=o.plus(i.div(r+=2))).d[e])for(t=e;a.d[t]===o.d[t]&&t--;);return n&&(a=a.times(2<this.d.length-2},$k.isNaN=function(){return!this.s},$k.isNegative=$k.isNeg=function(){return this.s<0},$k.isPositive=$k.isPos=function(){return this.s>0},$k.isZero=function(){return!!this.d&&0===this.d[0]},$k.lessThan=$k.lt=function(t){return this.cmp(t)<0},$k.lessThanOrEqualTo=$k.lte=function(t){return this.cmp(t)<1},$k.logarithm=$k.log=function(t){var e,n,r,i,o,a,s,u,c=this,l=c.constructor,h=l.precision,d=l.rounding;if(null==t)t=new l(10),e=!0;else{if(n=(t=new l(t)).d,t.s<0||!n||!n[0]||t.eq(1))return new l(NaN);e=t.eq(10)}if(n=c.d,c.s<0||!n||!n[0]||c.eq(1))return new l(n&&!n[0]?-1/0:1!=c.s?NaN:n?0:1/0);if(e)if(n.length>1)o=!0;else{for(i=n[0];i%10==0;)i/=10;o=1!==i}if(Wk=!1,a=yL(c,s=h+5),r=e?uL(l,s+10):yL(t,s),nL((u=iL(a,r,s,1)).d,i=h,d))do{if(a=yL(c,s+=10),r=e?uL(l,s+10):yL(t,s),u=iL(a,r,s,1),!o){+tL(u.d).slice(i+1,i+15)+1==1e14&&(u=oL(u,h+1,0));break}}while(nL(u.d,i+=10,d));return Wk=!0,oL(u,h,d)},$k.minus=$k.sub=function(t){var e,n,r,i,o,a,s,u,c,l,h,d,p=this,f=p.constructor;if(t=new f(t),!p.d||!t.d)return p.s&&t.s?p.d?t.s=-t.s:t=new f(t.d||p.s!==t.s?p:NaN):t=new f(NaN),t;if(p.s!=t.s)return t.s=-t.s,p.plus(t);if(c=p.d,d=t.d,s=f.precision,u=f.rounding,!c[0]||!d[0]){if(d[0])t.s=-t.s;else{if(!c[0])return new f(3===u?-0:0);t=new f(p)}return Wk?oL(t,s,u):t}if(n=Fk(t.e/7),l=Fk(p.e/7),c=c.slice(),o=l-n){for((h=o<0)?(e=c,o=-o,a=d.length):(e=d,n=l,a=c.length),o>(r=Math.max(Math.ceil(s/7),a)+2)&&(o=r,e.length=1),e.reverse(),r=o;r--;)e.push(0);e.reverse()}else{for((h=(r=c.length)<(a=d.length))&&(a=r),r=0;r0;--r)c[a++]=0;for(r=d.length;r>o;){if(c[--r](a=(o=Math.ceil(s/7))>a?o+1:a+1)&&(i=a,n.length=1),n.reverse();i--;)n.push(0);n.reverse()}for((a=c.length)-(i=l.length)<0&&(i=a,n=l,l=c,c=n),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/Jk|0,c[i]%=Jk;for(e&&(c.unshift(e),++r),a=c.length;0==c[--a];)c.pop();return t.d=c,t.e=sL(c,r),Wk?oL(t,s,u):t},$k.precision=$k.sd=function(t){var e,n=this;if(void 0!==t&&t!==!!t&&1!==t&&0!==t)throw Error(Qk+t);return n.d?(e=lL(n.d),t&&n.e+1>e&&(e=n.e+1)):e=NaN,e},$k.round=function(){var t=this,e=t.constructor;return oL(new e(t),t.e+1,e.rounding)},$k.sine=$k.sin=function(){var t,e,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+Math.max(n.e,n.sd())+7,r.rounding=1,n=function(t,e){var n,r=e.d.length;if(r<3)return e.isZero()?e:bL(t,2,e,e);n=(n=1.4*Math.sqrt(r))>16?16:0|n,e=e.times(1/ML(5,n)),e=bL(t,2,e,e);for(var i,o=new t(5),a=new t(16),s=new t(20);n--;)i=e.times(e),e=e.times(o.plus(i.times(a.times(i).minus(s))));return e}(r,AL(r,n)),r.precision=t,r.rounding=e,oL(Ok>2?n.neg():n,t,e,!0)):new r(NaN)},$k.squareRoot=$k.sqrt=function(){var t,e,n,r,i,o,a=this,s=a.d,u=a.e,c=a.s,l=a.constructor;if(1!==c||!s||!s[0])return new l(!c||c<0&&(!s||s[0])?NaN:s?a:1/0);for(Wk=!1,0==(c=Math.sqrt(+a))||c==1/0?(((e=tL(s)).length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=Fk((u+1)/2)-(u<0||u%2),r=new l(e=c==1/0?"5e"+u:(e=c.toExponential()).slice(0,e.indexOf("e")+1)+u)):r=new l(c.toString()),n=(u=l.precision)+3;;)if(r=(o=r).plus(iL(a,o,n+2,1)).times(.5),tL(o.d).slice(0,n)===(e=tL(r.d)).slice(0,n)){if("9999"!=(e=e.slice(n-3,n+1))&&(i||"4999"!=e)){+e&&(+e.slice(1)||"5"!=e.charAt(0))||(oL(r,u+1,1),t=!r.times(r).eq(a));break}if(!i&&(oL(o,u+1,0),o.times(o).eq(a))){r=o;break}n+=4,i=1}return Wk=!0,oL(r,u,l.rounding,t)},$k.tangent=$k.tan=function(){var t,e,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+10,r.rounding=1,(n=n.sin()).s=1,n=iL(n,new r(1).minus(n.times(n)).sqrt(),t+10,0),r.precision=t,r.rounding=e,oL(2==Ok||4==Ok?n.neg():n,t,e,!0)):new r(NaN)},$k.times=$k.mul=function(t){var e,n,r,i,o,a,s,u,c,l=this,h=l.constructor,d=l.d,p=(t=new h(t)).d;if(t.s*=l.s,!(d&&d[0]&&p&&p[0]))return new h(!t.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:d&&p?0*t.s:t.s/0);for(n=Fk(l.e/7)+Fk(t.e/7),(u=d.length)<(c=p.length)&&(o=d,d=p,p=o,a=u,u=c,c=a),o=[],r=a=u+c;r--;)o.push(0);for(r=c;--r>=0;){for(e=0,i=u+r;i>r;)s=o[i]+p[r]*d[i-r-1]+e,o[i--]=s%Jk|0,e=s/Jk|0;o[i]=(o[i]+e)%Jk|0}for(;!o[--a];)o.pop();return e?++n:o.shift(),t.d=o,t.e=sL(o,n),Wk?oL(t,h.precision,h.rounding):t},$k.toBinary=function(t,e){return EL(this,2,t,e)},$k.toDecimalPlaces=$k.toDP=function(t,e){var n=this,r=n.constructor;return n=new r(n),void 0===t?n:(eL(t,0,1e9),void 0===e?e=r.rounding:eL(e,0,8),oL(n,t+n.e+1,e))},$k.toExponential=function(t,e){var n,r=this,i=r.constructor;return void 0===t?n=aL(r,!0):(eL(t,0,1e9),void 0===e?e=i.rounding:eL(e,0,8),n=aL(r=oL(new i(r),t+1,e),!0,t+1)),r.isNeg()&&!r.isZero()?"-"+n:n},$k.toFixed=function(t,e){var n,r,i=this,o=i.constructor;return void 0===t?n=aL(i):(eL(t,0,1e9),void 0===e?e=o.rounding:eL(e,0,8),n=aL(r=oL(new o(i),t+i.e+1,e),!1,t+r.e+1)),i.isNeg()&&!i.isZero()?"-"+n:n},$k.toFraction=function(t){var e,n,r,i,o,a,s,u,c,l,h,d,p=this,f=p.d,m=p.constructor;if(!f)return new m(p);if(c=n=new m(1),r=u=new m(0),a=(o=(e=new m(r)).e=lL(f)-p.e-1)%7,e.d[0]=Vk(10,a<0?7+a:a),null==t)t=o>0?e:c;else{if(!(s=new m(t)).isInt()||s.lt(c))throw Error(Qk+s);t=s.gt(e)?o>0?e:c:s}for(Wk=!1,s=new m(tL(f)),l=m.precision,m.precision=o=7*f.length*2;h=iL(s,e,0,1,1),1!=(i=n.plus(h.times(r))).cmp(t);)n=r,r=i,i=c,c=u.plus(h.times(i)),u=i,i=e,e=s.minus(h.times(i)),s=i;return i=iL(t.minus(n),r,0,1,1),u=u.plus(i.times(c)),n=n.plus(i.times(r)),u.s=c.s=p.s,d=iL(c,r,o,1).minus(p).abs().cmp(iL(u,n,o,1).minus(p).abs())<1?[c,r]:[u,n],m.precision=l,Wk=!0,d},$k.toHexadecimal=$k.toHex=function(t,e){return EL(this,16,t,e)},$k.toNearest=function(t,e){var n=this,r=n.constructor;if(n=new r(n),null==t){if(!n.d)return n;t=new r(1),e=r.rounding}else{if(t=new r(t),void 0===e?e=r.rounding:eL(e,0,8),!n.d)return t.s?n:t;if(!t.d)return t.s&&(t.s=n.s),t}return t.d[0]?(Wk=!1,n=iL(n,t,0,e,1).times(t),Wk=!0,oL(n)):(t.s=n.s,n=t),n},$k.toNumber=function(){return+this},$k.toOctal=function(t,e){return EL(this,8,t,e)},$k.toPower=$k.pow=function(t){var e,n,r,i,o,a,s=this,u=s.constructor,c=+(t=new u(t));if(!(s.d&&t.d&&s.d[0]&&t.d[0]))return new u(Vk(+s,c));if((s=new u(s)).eq(1))return s;if(r=u.precision,o=u.rounding,t.eq(1))return oL(s,r,o);if((e=Fk(t.e/7))>=t.d.length-1&&(n=c<0?-c:c)<=9007199254740991)return i=dL(u,s,n,r),t.s<0?new u(1).div(i):oL(i,r,o);if((a=s.s)<0){if(eu.maxE+1||e0?a/0:0):(Wk=!1,u.rounding=s.s=1,n=Math.min(12,(e+"").length),(i=mL(t.times(yL(s,r+n)),r)).d&&nL((i=oL(i,r+5,1)).d,r,o)&&(e=r+10,+tL((i=oL(mL(t.times(yL(s,e+n)),e),e+5,1)).d).slice(r+1,r+15)+1==1e14&&(i=oL(i,r+1,0))),i.s=a,Wk=!0,u.rounding=o,oL(i,r,o))},$k.toPrecision=function(t,e){var n,r=this,i=r.constructor;return void 0===t?n=aL(r,r.e<=i.toExpNeg||r.e>=i.toExpPos):(eL(t,1,1e9),void 0===e?e=i.rounding:eL(e,0,8),n=aL(r=oL(new i(r),t,e),t<=r.e||r.e<=i.toExpNeg,t)),r.isNeg()&&!r.isZero()?"-"+n:n},$k.toSignificantDigits=$k.toSD=function(t,e){var n=this.constructor;return void 0===t?(t=n.precision,e=n.rounding):(eL(t,1,1e9),void 0===e?e=n.rounding:eL(e,0,8)),oL(new n(this),t,e)},$k.toString=function(){var t=this,e=t.constructor,n=aL(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()&&!t.isZero()?"-"+n:n},$k.truncated=$k.trunc=function(){return oL(new this.constructor(this),this.e+1,1)},$k.valueOf=$k.toJSON=function(){var t=this,e=t.constructor,n=aL(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()?"-"+n:n};var iL=function(){function t(t,e,n){var r,i=0,o=t.length;for(t=t.slice();o--;)r=t[o]*e+i,t[o]=r%n|0,i=r/n|0;return i&&t.unshift(i),t}function e(t,e,n,r){var i,o;if(n!=r)o=n>r?1:-1;else for(i=o=0;ie[i]?1:-1;break}return o}function n(t,e,n,r){for(var i=0;n--;)t[n]-=i,i=t[n]1;)t.shift()}return function(r,i,o,a,s,u){var c,l,h,d,p,f,m,y,g,v,w,b,M,A,E,N,T,I,k,L,x=r.constructor,S=r.s==i.s?1:-1,j=r.d,C=i.d;if(!(j&&j[0]&&C&&C[0]))return new x(r.s&&i.s&&(j?!C||j[0]!=C[0]:C)?j&&0==j[0]||!C?0*S:S/0:NaN);for(u?(p=1,l=r.e-i.e):(u=Jk,p=7,l=Fk(r.e/p)-Fk(i.e/p)),k=C.length,T=j.length,v=(g=new x(S)).d=[],h=0;C[h]==(j[h]||0);h++);if(C[h]>(j[h]||0)&&l--,null==o?(A=o=x.precision,a=x.rounding):A=s?o+(r.e-i.e)+1:o,A<0)v.push(1),f=!0;else{if(A=A/p+2|0,h=0,1==k){for(d=0,C=C[0],A++;(h1&&(C=t(C,d,u),j=t(j,d,u),k=C.length,T=j.length),N=k,b=(w=j.slice(0,k)).length;b=u/2&&++I;do{d=0,(c=e(C,w,k,b))<0?(M=w[0],k!=b&&(M=M*u+(w[1]||0)),(d=M/I|0)>1?(d>=u&&(d=u-1),1==(c=e(m=t(C,d,u),w,y=m.length,b=w.length))&&(d--,n(m,k=10;d/=10)h++;g.e=h+l*p-1,oL(g,s?o+g.e+1:o,a,f)}return g}}();function oL(t,e,n,r){var i,o,a,s,u,c,l,h,d,p=t.constructor;t:if(null!=e){if(!(h=t.d))return t;for(i=1,s=h[0];s>=10;s/=10)i++;if((o=e-i)<0)o+=7,a=e,u=(l=h[d=0])/Vk(10,i-a-1)%10|0;else if((d=Math.ceil((o+1)/7))>=(s=h.length)){if(!r)break t;for(;s++<=d;)h.push(0);l=u=0,i=1,a=(o%=7)-7+1}else{for(l=s=h[d],i=1;s>=10;s/=10)i++;u=(a=(o%=7)-7+i)<0?0:l/Vk(10,i-a-1)%10|0}if(r=r||e<0||void 0!==h[d+1]||(a<0?l:l%Vk(10,i-a-1)),c=n<4?(u||r)&&(0==n||n==(t.s<0?3:2)):u>5||5==u&&(4==n||r||6==n&&(o>0?a>0?l/Vk(10,i-a):0:h[d-1])%10&1||n==(t.s<0?8:7)),e<1||!h[0])return h.length=0,c?(e-=t.e+1,h[0]=Vk(10,(7-e%7)%7),t.e=-e||0):h[0]=t.e=0,t;if(0==o?(h.length=d,s=1,d--):(h.length=d+1,s=Vk(10,7-o),h[d]=a>0?(l/Vk(10,i-a)%Vk(10,a)|0)*s:0),c)for(;;){if(0==d){for(o=1,a=h[0];a>=10;a/=10)o++;for(a=h[0]+=s,s=1;a>=10;a/=10)s++;o!=s&&(t.e++,h[0]==Jk&&(h[0]=1));break}if(h[d]+=s,h[d]!=Jk)break;h[d--]=0,s=1}for(o=h.length;0===h[--o];)h.pop()}return Wk&&(t.e>p.maxE?(t.d=null,t.e=NaN):t.e0?o=o.charAt(0)+"."+o.slice(1)+hL(r):a>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(t.e<0?"e":"e+")+t.e):i<0?(o="0."+hL(-i-1)+o,n&&(r=n-a)>0&&(o+=hL(r))):i>=a?(o+=hL(i+1-a),n&&(r=n-i-1)>0&&(o=o+"."+hL(r))):((r=i+1)0&&(i+1===a&&(o+="."),o+=hL(r))),o}function sL(t,e){var n=t[0];for(e*=7;n>=10;n/=10)e++;return e}function uL(t,e,n){if(e>Xk)throw Wk=!0,n&&(t.precision=n),Error("[DecimalError] Precision limit exceeded");return oL(new t(Bk),e,1,!0)}function cL(t,e,n){if(e>Kk)throw Error("[DecimalError] Precision limit exceeded");return oL(new t(Rk),e,n,!0)}function lL(t){var e=t.length-1,n=7*e+1;if(e=t[e]){for(;e%10==0;e/=10)n--;for(e=t[0];e>=10;e/=10)n++}return n}function hL(t){for(var e="";t--;)e+="0";return e}function dL(t,e,n,r){var i,o=new t(1),a=Math.ceil(r/7+4);for(Wk=!1;;){if(n%2&&NL((o=o.times(e)).d,a)&&(i=!0),0===(n=Fk(n/2))){n=o.d.length-1,i&&0===o.d[n]&&++o.d[n];break}NL((e=e.times(e)).d,a)}return Wk=!0,o}function pL(t){return 1&t.d[t.d.length-1]}function fL(t,e,n){for(var r,i=new t(e[0]),o=0;++o17)return new d(t.d?t.d[0]?t.s<0?0:1/0:1:t.s?t.s<0?0:t:NaN);for(null==e?(Wk=!1,u=f):u=e,s=new d(.03125);t.e>-2;)t=t.times(s),h+=5;for(u+=r=Math.log(Vk(2,h))/Math.LN10*2+5|0,n=o=a=new d(1),d.precision=u;;){if(o=oL(o.times(t),u,1),n=n.times(++l),tL((s=a.plus(iL(o,n,u,1))).d).slice(0,u)===tL(a.d).slice(0,u)){for(i=h;i--;)a=oL(a.times(a),u,1);if(null!=e)return d.precision=f,a;if(!(c<3&&nL(a.d,u-r,p,c)))return oL(a,d.precision=f,p,Wk=!0);d.precision=u+=10,n=o=s=new d(1),l=0,c++}a=s}}function yL(t,e){var n,r,i,o,a,s,u,c,l,h,d,p=1,f=t,m=f.d,y=f.constructor,g=y.rounding,v=y.precision;if(f.s<0||!m||!m[0]||!f.e&&1==m[0]&&1==m.length)return new y(m&&!m[0]?-1/0:1!=f.s?NaN:m?0:f);if(null==e?(Wk=!1,l=v):l=e,y.precision=l+=10,r=(n=tL(m)).charAt(0),!(Math.abs(o=f.e)<15e14))return c=uL(y,l+2,v).times(o+""),f=yL(new y(r+"."+n.slice(1)),l-10).plus(c),y.precision=v,null==e?oL(f,v,g,Wk=!0):f;for(;r<7&&1!=r||1==r&&n.charAt(1)>3;)r=(n=tL((f=f.times(t)).d)).charAt(0),p++;for(o=f.e,r>1?(f=new y("0."+n),o++):f=new y(r+"."+n.slice(1)),h=f,u=a=f=iL(f.minus(1),f.plus(1),l,1),d=oL(f.times(f),l,1),i=3;;){if(a=oL(a.times(d),l,1),tL((c=u.plus(iL(a,new y(i),l,1))).d).slice(0,l)===tL(u.d).slice(0,l)){if(u=u.times(2),0!==o&&(u=u.plus(uL(y,l+2,v).times(o+""))),u=iL(u,new y(p),l,1),null!=e)return y.precision=v,u;if(!nL(u.d,l-10,g,s))return oL(u,y.precision=v,g,Wk=!0);y.precision=l+=10,c=a=f=iL(h.minus(1),h.plus(1),l,1),d=oL(f.times(f),l,1),i=s=1}u=c,i+=2}}function gL(t){return String(t.s*t.s/0)}function vL(t,e){var n,r,i;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;48===e.charCodeAt(r);r++);for(i=e.length;48===e.charCodeAt(i-1);--i);if(e=e.slice(r,i)){if(i-=r,t.e=n=n-r-1,t.d=[],r=(n+1)%7,n<0&&(r+=7),rt.constructor.maxE?(t.d=null,t.e=NaN):t.e-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Zk.test(e))return vL(t,e)}else if("Infinity"===e||"NaN"===e)return+e||(t.s=NaN),t.e=NaN,t.d=null,t;if(Gk.test(e))n=16,e=e.toLowerCase();else if(Hk.test(e))n=2;else{if(!qk.test(e))throw Error(Qk+e);n=8}for((o=e.search(/p/i))>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),a=(o=e.indexOf("."))>=0,r=t.constructor,a&&(o=(s=(e=e.replace(".","")).length)-o,i=dL(r,new r(n),o,2*o)),o=l=(c=rL(e,n,Jk)).length-1;0===c[o];--o)c.pop();return o<0?new r(0*t.s):(t.e=sL(c,l),t.d=c,Wk=!1,a&&(t=iL(t,i,4*s)),u&&(t=t.times(Math.abs(u)<54?Vk(2,u):hx.pow(2,u))),Wk=!0,t)}function bL(t,e,n,r,i){var o,a,s,u,c=t.precision,l=Math.ceil(c/7);for(Wk=!1,u=n.times(n),s=new t(r);;){if(a=iL(s.times(u),new t(e++*e++),c,1),s=i?r.plus(a):r.minus(a),r=iL(a.times(u),new t(e++*e++),c,1),void 0!==(a=s.plus(r)).d[l]){for(o=l;a.d[o]===s.d[o]&&o--;);if(-1==o)break}o=s,s=r,r=a,a=o}return Wk=!0,a.d.length=l+1,a}function ML(t,e){for(var n=t;--e;)n*=t;return n}function AL(t,e){var n,r=e.s<0,i=cL(t,t.precision,1),o=i.times(.5);if((e=e.abs()).lte(o))return Ok=r?4:1,e;if((n=e.divToInt(i)).isZero())Ok=r?3:2;else{if((e=e.minus(n.times(i))).lte(o))return Ok=pL(n)?r?2:3:r?4:1,e;Ok=pL(n)?r?1:4:r?3:2}return e.minus(i).abs()}function EL(t,e,n,r){var i,o,a,s,u,c,l,h,d,p=t.constructor,f=void 0!==n;if(f?(eL(n,1,1e9),void 0===r?r=p.rounding:eL(r,0,8)):(n=p.precision,r=p.rounding),t.isFinite()){for(f?(i=2,16==e?n=4*n-3:8==e&&(n=3*n-2)):i=e,(a=(l=aL(t)).indexOf("."))>=0&&(l=l.replace(".",""),(d=new p(1)).e=l.length-a,d.d=rL(aL(d),10,i),d.e=d.d.length),o=u=(h=rL(l,10,i)).length;0==h[--u];)h.pop();if(h[0]){if(a<0?o--:((t=new p(t)).d=h,t.e=o,h=(t=iL(t,d,n,r,0,i)).d,o=t.e,c=Dk),a=h[n],s=i/2,c=c||void 0!==h[n+1],c=r<4?(void 0!==a||c)&&(0===r||r===(t.s<0?3:2)):a>s||a===s&&(4===r||c||6===r&&1&h[n-1]||r===(t.s<0?8:7)),h.length=n,c)for(;++h[--n]>i-1;)h[n]=0,n||(++o,h.unshift(1));for(u=h.length;!h[u-1];--u);for(a=0,l="";a1)if(16==e||8==e){for(a=16==e?4:3,--u;u%a;u++)l+="0";for(u=(h=rL(l,i,e)).length;!h[u-1];--u);for(a=1,l="1.";au)for(o-=u;o--;)l+="0";else oe)return t.length=e,!0}function TL(t){return new this(t).abs()}function IL(t){return new this(t).acos()}function kL(t){return new this(t).acosh()}function LL(t,e){return new this(t).plus(e)}function xL(t){return new this(t).asin()}function SL(t){return new this(t).asinh()}function jL(t){return new this(t).atan()}function CL(t){return new this(t).atanh()}function DL(t,e){t=new this(t),e=new this(e);var n,r=this.precision,i=this.rounding,o=r+4;return t.s&&e.s?t.d||e.d?!e.d||t.isZero()?(n=e.s<0?cL(this,r,i):new this(0)).s=t.s:!t.d||e.isZero()?(n=cL(this,o,1).times(.5)).s=t.s:e.s<0?(this.precision=o,this.rounding=1,n=this.atan(iL(t,e,o,1)),e=cL(this,o,1),this.precision=r,this.rounding=i,n=t.s<0?n.minus(e):n.plus(e)):n=this.atan(iL(t,e,o,1)):(n=cL(this,o,1).times(e.s>0?.25:.75)).s=t.s:n=new this(NaN),n}function OL(t){return new this(t).cbrt()}function zL(t){return oL(t=new this(t),t.e+1,2)}function _L(t,e,n){return new this(t).clamp(e,n)}function PL(t){if(!t||"object"!=typeof t)throw Error("[DecimalError] Object expected");var e,n,r,i=!0===t.defaults,o=["precision",1,1e9,"rounding",0,8,"toExpNeg",-_k,0,"toExpPos",0,_k,"maxE",0,_k,"minE",-_k,0,"modulo",0,9];for(e=0;e=o[e+1]&&r<=o[e+2]))throw Error(Qk+n+": "+r);this[n]=r}if(n="crypto",i&&(this[n]=Uk[n]),void 0!==(r=t[n])){if(!0!==r&&!1!==r&&0!==r&&1!==r)throw Error(Qk+n+": "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw Error("[DecimalError] crypto unavailable");this[n]=!0}else this[n]=!1}return this}function BL(t){return new this(t).cos()}function RL(t){return new this(t).cosh()}function UL(t,e){return new this(t).div(e)}function WL(t){return new this(t).exp()}function QL(t){return oL(t=new this(t),t.e+1,3)}function YL(){var t,e,n=new this(0);for(Wk=!1,t=0;t=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:s[o++]=i%1e7;else{if(!crypto.randomBytes)throw Error("[DecimalError] crypto unavailable");for(e=crypto.randomBytes(r*=4);o=214e7?crypto.randomBytes(4).copy(e,o):(s.push(i%1e7),o+=4);o=r/4}else for(;o=10;i/=10)r++;r<7&&(n-=7-r)}return a.e=n,a.d=s,a}function ex(t){return oL(t=new this(t),t.e+1,this.rounding)}function nx(t){return(t=new this(t)).d?t.d[0]?t.s:0*t.s:t.s||NaN}function rx(t){return new this(t).sin()}function ix(t){return new this(t).sinh()}function ox(t){return new this(t).sqrt()}function ax(t,e){return new this(t).sub(e)}function sx(){var t=0,e=arguments,n=new this(e[t]);for(Wk=!1;n.s&&++to.maxE?(i.e=NaN,i.d=null):t.e=10;n/=10)e++;return void(Wk?e>o.maxE?(i.e=NaN,i.d=null):en.call(e,...t))),e=void 0)}return n}Bk=new hx(Bk),Rk=new hx(Rk);class px{constructor({blockchain:t,tokenIn:e,decimalsIn:n,tokenOut:r,decimalsOut:i,path:o,pools:a,amountIn:s,amountInMax:u,amountOut:c,amountOutMin:l,exchange:h,approvalRequired:d,getApproval:p,getPrep:f,getTransaction:m}){this.blockchain=t,this.tokenIn=e,this.decimalsIn=n,this.tokenOut=r,this.decimalsOut=i,this.path=o,this.pools=a,this.amountIn=dx([s,"optionalAccess",t=>t.toString,"call",t=>t()]),this.amountOutMin=dx([l,"optionalAccess",t=>t.toString,"call",t=>t()]),this.amountOut=dx([c,"optionalAccess",t=>t.toString,"call",t=>t()]),this.amountInMax=dx([u,"optionalAccess",t=>t.toString,"call",t=>t()]),this.exchange=h,this.getPrep=f,this.getTransaction=m}}let fx=["ethereum","bsc","polygon","solana","fantom","arbitrum","avalanche","gnosis","optimism","base"];fx.evm=["ethereum","bsc","polygon","fantom","arbitrum","avalanche","gnosis","optimism","base"],fx.solana=["solana"];const mx=async({exchange:t,blockchain:e,pools:n,exchangePath:r,amountIn:i,amountOut:o})=>{let a=i.add(i.mul(100*parseFloat("0.5")).div(1e4));if(!fx.evm.includes(t.blockchain||e))return a;const s=await _E({blockchain:t.blockchain||e,method:"latestBlockNumber"});let u=[];for(var c=0;c<=2;c++)u.push(s-c);const l=await Promise.all(u.map((async i=>{let{amountIn:a}=await t.getAmounts({exchange:t,blockchain:e,path:r,pools:n,amountOut:o,block:i});return a})));if(!l[0]||!l[1]||!l[2])return a;let h;if(l[0].gt(l[1])&&l[1].gt(l[2])){const t=l[0].sub(l[1]),e=l[1].sub(l[2]),n=t.add(e).div(2);if(h=l[0].add(n),h.gt(a))return h}else if(!l[0].eq(l[1])&&!l[1].eq(l[2])){const t=l[0].sub(l[1]).abs(),e=l[1].sub(l[2]).abs();let n,r;if(n=t.lt(e)?t:e,r=l[0].gt(l[1])&&l[0].gt(l[2])?l[0]:l[1].gt(l[2])&&l[1].gt(l[0])?l[1]:l[2],h=r.add(n),h.gt(a))return h}return a},yx=async({exchange:t,blockchain:e,pools:n,exchangePath:r,amounts:i,tokenIn:o,tokenOut:a,amountIn:s,amountInMax:u,amountOut:c,amountOutMin:l,amountInInput:h,amountOutInput:d,amountInMaxInput:p,amountOutMinInput:f})=>{if(f||d){if(fx.evm.includes(t.blockchain||e))s=u=await mx({exchange:t,blockchain:e,pools:n,exchangePath:r,amountIn:s,amountOut:f||c});else if(fx.solana.includes(t.blockchain||e)){let e=[];await Promise.all(r.map(((o,a)=>{if(0!=a){let o=mx({exchange:t,pools:n,exchangePath:[r[a-1],r[a]],amountIn:i[a-1],amountOut:i[a]});return o.then((t=>e.push(t))),o}}))),e.push(i[i.length-1]),s=u=(i=e)[0]}}else if((p||h)&&fx.solana.includes(t.blockchain||e)){let e=[];await Promise.all(r.map(((n,o)=>{if(0!==o&&on.sub(n.mul(100*parseFloat("0.5")).div(1e4)))({exchange:t,exchangePath:[r[o-1],r[o]],amountIn:i[o-1],amountOut:i[o]});return n.then((t=>(e.unshift(t),t))),n}}))),e.push(i[0]),c=l=(i=e.slice().reverse())[i.length-1]}return{amountIn:s,amountInMax:u,amountOut:c,amountOutMin:l,amounts:i}},gx=t=>t.match("0x")?ay(t):t;let vx=async({amount:t,blockchain:e,address:n})=>await Tk.BigNumber({amount:t,blockchain:e,address:n}),wx=async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{let u={exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s};return o&&"number"==typeof o&&(u.amountOut=await vx({amount:o,blockchain:t,address:r})),s&&"number"==typeof s&&(u.amountOutMin=await vx({amount:s,blockchain:t,address:r})),i&&"number"==typeof i&&(u.amountIn=await vx({amount:i,blockchain:t,address:n})),a&&"number"==typeof a&&(u.amountInMax=await vx({amount:a,blockchain:t,address:n})),u};class bx{constructor(...t){Object.assign(this,...t)}async route({blockchain:t,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a}){return e===n?Promise.resolve():(void 0===t&&(this.scope?t=this.scope:1===this.blockchains.length&&(t=this.blockchains[0])),(({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if(void 0===t&&null!=e.blockchains&&e.blockchains.length>1)throw"You need to provide a blockchain when calling route on an exchange that supports multiple blockchains!";if(void 0!==o&&void 0!==i)throw"You cannot set amountIn and amountOut at the same time, use amountInMax or amountOutMin to describe the non exact part of the swap!";if(void 0!==a&&void 0!==s)throw"You cannot set amountInMax and amountOutMin at the same time, use amountIn or amountOut to describe the part of the swap that needs to be exact!";if(void 0!==i&&void 0!==a)throw"Setting amountIn and amountInMax at the same time makes no sense. Decide if amountIn needs to be exact or not!";if(void 0!==o&&void 0!==s)throw"Setting amountOut and amountOutMin at the same time makes no sense. Decide if amountOut needs to be exact or not!"})({blockchain:t,exchange:this,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a}),await(({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s,findPath:u,getAmounts:c,getPrep:l,getTransaction:h,slippage:d})=>{if(n=gx(n),r=gx(r),[i,o,a,s].filter(Boolean).length>1)throw"You can only pass one: amountIn, amountOut, amountInMax or amountOutMin";if([i,o,a,s].filter(Boolean).length<1)throw"You need to pass exactly one: amountIn, amountOut, amountInMax or amountOutMin";return new Promise((async p=>{let{path:f,exchangePath:m,pools:y}=await u({blockchain:t,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s});if(void 0===f||0==f.length)return p();let g,[v,w,b,M]=[i,o,a,s];try{({amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amounts:g}=await c({exchange:e,blockchain:t,path:f,pools:y,tokenIn:n,tokenOut:r,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s}))}catch(t){return p()}if([i,a,o,s].every((t=>null==t)))return p();if(d||e.slippage)try{({amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amounts:g}=await yx({exchange:e,blockchain:t,pools:y,exchangePath:m,amounts:g,tokenIn:n,tokenOut:r,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amountInInput:v,amountOutInput:w,amountInMaxInput:b,amountOutMinInput:M}))}catch(t){return p()}const A=await new Tk({blockchain:t,address:n}).decimals(),E=await new Tk({blockchain:t,address:r}).decimals();p(new px({blockchain:t,tokenIn:n,decimalsIn:A,tokenOut:r,decimalsOut:E,path:f,pools:y,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,exchange:e,getPrep:async({account:o})=>await l({exchange:e,blockchain:t,tokenIn:n,tokenOut:r,amountIn:i||a,account:o}),getTransaction:async({account:n,permit2:r,inputTokenPushed:u})=>await h({exchange:e,blockchain:t,pools:y,path:f,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amounts:g,amountInInput:v,amountOutInput:w,amountInMaxInput:b,amountOutMinInput:M,account:n,permit2:r,inputTokenPushed:u})}))}))})({...await wx({blockchain:t,exchange:this,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a}),blockchain:t,findPath:this.findPath,getAmounts:this.getAmounts,getPrep:this.getPrep,getTransaction:this.getTransaction,slippage:this.slippage}))}}function Mx(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const Ax=({blockchain:t,exchange:e,path:n})=>{if(!n)return;let r=n.map(((e,r)=>e===Vp[t].currency.address&&n[r+1]!=Vp[t].wrapped.address&&n[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:e));return r[0]==Vp[t].currency.address&&r[1]==Vp[t].wrapped.address?r.splice(0,1):r[r.length-1]==Vp[t].currency.address&&r[r.length-2]==Vp[t].wrapped.address&&r.splice(r.length-1,1),r},Ex=({reserves:t,min:e,token:n,token0:r,token1:i,decimals:o})=>r.toLowerCase()==n.toLowerCase()?t[0].gte(cE(e.toString(),o)):i.toLowerCase()==n.toLowerCase()&&t[1].gte(cE(e.toString(),o)),Nx=async({blockchain:t,exchange:e,path:n})=>{const r=Ax({blockchain:t,exchange:e,path:n});if(!r||1===r.length)return!1;try{let i=await _E({blockchain:t,address:e[t].factory.address,method:"getPair",api:e[t].factory.api,cache:36e5,params:Ax({blockchain:t,exchange:e,path:n})});if(!i||i==Vp[t].zero)return!1;let[o,a,s]=await Promise.all([_E({blockchain:t,address:i,method:"getReserves",api:e[t].pair.api,cache:36e5}),_E({blockchain:t,address:i,method:"token0",api:e[t].pair.api,cache:36e5}),_E({blockchain:t,address:i,method:"token1",api:e[t].pair.api,cache:36e5})]);if(r.includes(Vp[t].wrapped.address))return Ex({min:1,token:Vp[t].wrapped.address,decimals:Vp[t].currency.decimals,reserves:o,token0:a,token1:s});if(n.find((e=>Vp[t].stables.usd.includes(e)))){let e=n.find((e=>Vp[t].stables.usd.includes(e))),r=new Tk({blockchain:t,address:e}),i=await r.decimals();return Ex({min:1e3,token:e,decimals:i,reserves:o,token0:a,token1:s})}return!0}catch(t){return console.log("e",t),!1}};let Tx=({blockchain:t,exchange:e,path:n,amountIn:r,tokenIn:i,tokenOut:o})=>new Promise((i=>{_E({blockchain:t,address:e[t].router.address,method:"getAmountsOut",api:e[t].router.api,params:{amountIn:r,path:Ax({blockchain:t,exchange:e,path:n})}}).then((t=>{i(t[t.length-1])})).catch((()=>i()))})),Ix=({blockchain:t,exchange:e,path:n,amountOut:r,block:i})=>new Promise((o=>{_E({blockchain:t,address:e[t].router.address,method:"getAmountsIn",api:e[t].router.api,params:{amountOut:r,path:Ax({blockchain:t,exchange:e,path:n})},block:i}).then((t=>o(t[0]))).catch((()=>o()))}));var kx={findPath:async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r})=>{if([n,r].includes(Vp[t].currency.address)&&[n,r].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let i;if(await Nx({blockchain:t,exchange:e,path:[n,r]}))i=[n,r];else if(n!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[n,Vp[t].wrapped.address]})&&r!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[r,Vp[t].wrapped.address]}))i=[n,Vp[t].wrapped.address,r];else if(!Vp[t].stables.usd.includes(n)&&(await Promise.all(Vp[t].stables.usd.map((r=>Nx({blockchain:t,exchange:e,path:[n,r]}))))).filter(Boolean).length&&r!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[Vp[t].wrapped.address,r]})){let o=(await Promise.all(Vp[t].stables.usd.map((async r=>await Nx({blockchain:t,exchange:e,path:[n,r]})?r:void 0)))).find(Boolean);i=[n,o,Vp[t].wrapped.address,r]}else if(n!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[n,Vp[t].wrapped.address]})&&!Vp[t].stables.usd.includes(r)&&(await Promise.all(Vp[t].stables.usd.map((n=>Nx({blockchain:t,exchange:e,path:[n,r]}))))).filter(Boolean).length){let o=(await Promise.all(Vp[t].stables.usd.map((async n=>await Nx({blockchain:t,exchange:e,path:[n,r]})?n:void 0)))).find(Boolean);i=[n,Vp[t].wrapped.address,o,r]}return Mx([i,"optionalAccess",t=>t.length])&&i[0]==Vp[t].currency.address?i.splice(1,0,Vp[t].wrapped.address):Mx([i,"optionalAccess",t=>t.length])&&i[i.length-1]==Vp[t].currency.address&&i.splice(i.length-1,0,Vp[t].wrapped.address),{path:i,exchangePath:Ax({blockchain:t,exchange:e,path:i})}},pathExists:Nx,getAmounts:async({blockchain:t,exchange:e,path:n,block:r,tokenIn:i,tokenOut:o,amountOut:a,amountIn:s,amountInMax:u,amountOutMin:c})=>{if(a){if(null==(s=await Ix({blockchain:t,exchange:e,block:r,path:n,amountOut:a,tokenIn:i,tokenOut:o}))||u&&s.gt(u))return{};void 0===u&&(u=s)}else if(s){if(null==(a=await Tx({blockchain:t,exchange:e,path:n,amountIn:s,tokenIn:i,tokenOut:o}))||c&&a.lt(c))return{};void 0===c&&(c=a)}else if(c){if(null==(s=await Ix({blockchain:t,exchange:e,block:r,path:n,amountOut:c,tokenIn:i,tokenOut:o}))||u&&s.gt(u))return{};void 0===u&&(u=s)}else if(u){if(null==(a=await Tx({blockchain:t,exchange:e,path:n,amountIn:u,tokenIn:i,tokenOut:o}))||c&&a.lt(c))return{};void 0===c&&(c=a)}return{amountOut:a,amountIn:s,amountInMax:u,amountOutMin:c}},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i})=>{if(n===Vp[e].currency.address)return;const o=await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,t[e].router.address]});if(o.gte(r))return;return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[t[e].router.address,r.sub(o)]}}},getTransaction:({exchange:t,blockchain:e,path:n,amountIn:r,amountInMax:i,amountOut:o,amountOutMin:a,amountInInput:s,amountOutInput:u,amountInMaxInput:c,amountOutMinInput:l,account:h})=>{let d={blockchain:e,from:h,to:t[e].router.address,api:t[e].router.api};return n[0]===Vp[e].currency.address?s||l?(d.method="swapExactETHForTokens",d.value=r.toString(),d.params={amountOutMin:a.toString()}):(u||c)&&(d.method="swapETHForExactTokens",d.value=i.toString(),d.params={amountOut:o.toString()}):n[n.length-1]===Vp[e].currency.address?s||l?(d.method="swapExactTokensForETH",d.params={amountIn:r.toString(),amountOutMin:a.toString()}):(u||c)&&(d.method="swapTokensForExactETH",d.params={amountInMax:i.toString(),amountOut:o.toString()}):s||l?(d.method="swapExactTokensForTokens",d.params={amountIn:r.toString(),amountOutMin:a.toString()}):(u||c)&&(d.method="swapTokensForExactTokens",d.params={amountInMax:i.toString(),amountOut:o.toString()}),d.params=Object.assign({},d.params,{path:Ax({blockchain:e,exchange:t,path:n}),to:h,deadline:Math.round(Date.now()/1e3)+86400}),d},ROUTER:[{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint256",name:"amountADesired",type:"uint256"},{internalType:"uint256",name:"amountBDesired",type:"uint256"},{internalType:"uint256",name:"amountAMin",type:"uint256"},{internalType:"uint256",name:"amountBMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"addLiquidity",outputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"amountB",type:"uint256"},{internalType:"uint256",name:"liquidity",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountTokenDesired",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"addLiquidityETH",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountETH",type:"uint256"},{internalType:"uint256",name:"liquidity",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"reserveIn",type:"uint256"},{internalType:"uint256",name:"reserveOut",type:"uint256"}],name:"getAmountIn",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"reserveIn",type:"uint256"},{internalType:"uint256",name:"reserveOut",type:"uint256"}],name:"getAmountOut",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"}],name:"getAmountsIn",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"}],name:"getAmountsOut",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"reserveA",type:"uint256"},{internalType:"uint256",name:"reserveB",type:"uint256"}],name:"quote",outputs:[{internalType:"uint256",name:"amountB",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountAMin",type:"uint256"},{internalType:"uint256",name:"amountBMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidity",outputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"amountB",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidityETH",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidityETHSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bool",name:"approveMax",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"removeLiquidityETHWithPermit",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bool",name:"approveMax",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountAMin",type:"uint256"},{internalType:"uint256",name:"amountBMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bool",name:"approveMax",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"removeLiquidityWithPermit",outputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"amountB",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapETHForExactTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactETHForTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactETHForTokensSupportingFeeOnTransferTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForETH",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForETHSupportingFeeOnTransferTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokensSupportingFeeOnTransferTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactETH",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[{internalType:"address",name:"_feeToSetter",type:"address"}],payable:!1,stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!1,internalType:"address",name:"pair",type:"address"},{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"PairCreated",type:"event"},{constant:!0,inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"allPairs",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"allPairsLength",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"}],name:"createPair",outputs:[{internalType:"address",name:"pair",type:"address"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"feeTo",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"feeToSetter",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"getPair",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"_feeTo",type:"address"}],name:"setFeeTo",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"_feeToSetter",type:"address"}],name:"setFeeToSetter",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"}],PAIR:[{inputs:[],payable:!1,stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0In",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1In",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount0Out",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1Out",type:"uint256"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint112",name:"reserve0",type:"uint112"},{indexed:!1,internalType:"uint112",name:"reserve1",type:"uint112"}],name:"Sync",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{constant:!0,inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"MINIMUM_LIQUIDITY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"PERMIT_TYPEHASH",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"getReserves",outputs:[{internalType:"uint112",name:"_reserve0",type:"uint112"},{internalType:"uint112",name:"_reserve1",type:"uint112"},{internalType:"uint32",name:"_blockTimestampLast",type:"uint32"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"_token0",type:"address"},{internalType:"address",name:"_token1",type:"address"}],name:"initialize",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"kLast",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"}],name:"mint",outputs:[{internalType:"uint256",name:"liquidity",type:"uint256"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"price0CumulativeLast",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"price1CumulativeLast",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"}],name:"skim",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"amount0Out",type:"uint256"},{internalType:"uint256",name:"amount1Out",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[],name:"sync",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"}]};const Lx={name:"honeyswap",label:"Honeyswap",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAYAAADBTPF9AAAACXBIWXMAAAsTAAALEwEAmpwYAAALmklEQVR4nO2de3BU1R3HP7+7eQALAcSNyq4ELDpUS0HJdrRm0aE6oPWJWqtQxUdn1KpcdQy04nssslQbdKxa7cC0iq22+BhsUQcfbBzQAL4V7VQM7OK4i4oJBJLs3l//uEHDkvfevbsb85nJHzn33PP73fu99+x5/M65Mt08jXwlVpuYCTwCjAS+BD5FeRXhaX+Vb51Tdja/khhZUsQpCGcBE4HRQCmwoqWFS8ZN8zU7ZctpJF8FjEbixSLyBnB0B4ebgZeAuzIRMhqJe0XkKuBKYFwn2c7xV/lW9NVGtjFy7UBniKKA1cnhUuA0oDYaSdyxLbLd09vyo5HEFBGJAGE6Fw+0Ux/ygrwV0D+1PKmqc4F1wGZgRwfZPCLcrKJ/i0bixT0tOxqJnyLCy3T8dqeAL9psLlH0+d577x5FuXagKwKh8teja+I/RRimKsMMQyeB/BL4BfZbuJcLRGQPcGl3ZUYj8eNBngK8aYc2AUtVeQk0CjQFQuW7nLqWbJG3v4FdYVd/PAxMSTv0G3+V70+dnxcfJSJrgcPbJStwm6reUwiCpZO3VWhXBEK+Dao6DViddui2aCQ+prPzROR37CteK8psf5XvjkIUDwpUQIBAqLxBVS8A/tsu2SciV3aUPxaJHwZcnpY83x/yLc+Wj25QsAICBELlCWB+WvL50Ui8bL/MIucC7dNr1dI/ZtE9VyhoAQFE5VngrXZJ46SD1qUIp6Yl3ReYWq5Zdc4FCl7A0aEDU6qs3CdRZJ/GTTQS96kyoV3SF6r6qgvuZZ2CFxBAhPfSksalHR8FjGiXtBlle7b9coN+IaDuL8bwtOPDgJJ2SV/3h+oT+omAgn6MPXoCgCpvpmX5FNj63b+6xhXHXMAz/tgjcu1DxpRVeBsbtzTVApYqy0T1obIKr9Xu+O6G+qbXAEuEv7e0yH0jx3lTufPYOQpyJGaA7+gXVej3mQEBC5wBAQucvJ5OyoRtke0eC2tQa6sk8zkkIlP6nYDRSDwkIrMRpghSVlJCc6w28RHwlKo+EwiVt+baRyfpNwLGauMTQO4QkfM6OPwj4DwReTMaid8WCJX/x23/skXB9wM3v5IY2RRrWgDyCHBMN9n9IjKrcUvTUTs2N304fKw34YaP2aRgBdwW2e5p2LrzYo9HlgNnsG+IRXccJcLFjVubhn35v6aNI8d592TJzaxTkK3QaCR+PIauBllKVxFlXSCCF5hfUsyGWG18Tl8i2/KBghIwFomPjdUmHhWRiConOFTsOJClGLo6GomHHCrTNQqiCo1G4t7GrbtuQGQpUAVIFsyMFZE5jVuaKhrrd71XVuH9Ogs2HCfvBYzVJmaKyOMgFwJDsmxOgKMR+VXjll1FDfW7NpZVePO625G3VWg0kjg6Vpv4N/Av7G6AmxwAcpeIvBmrTXTULckb8k7AaCRxcKw2USPCWuCUHLtzJPBkrDbxQjQSD+bYlw7Jmyp088uJ0l3RpisRHkc5ifwaZPiBiMxpqG865Jv6preHV3gbc+3QXvLiJumm2ImlpSW3FXl0altSvvbLrmhNyoz42vjd55+8Y9krO49oybVDOZ3QXXXtmjFqyb3RePGpyZSUFHk05zekO5IpKQHw+1rfKinV62csCUVy6U/OBFx1TWQisAIYjwFIgcUYpQSgFZg14/7QU7lyIyeNmFXXrPECjwHjAXsVYEoK68+mGFi66ppId2OwWSNHrVAxgR/nxrbjeIHf58q46wK2vX1z3LabZabl6i3MwRsohwEV7tvNKsXYQ3yu476AkvJjX3B/IycPZd6NxBQshpWTh3JAwAJnQMACJzdDacUF1mnvCTlaaeGqgMdcv+T4h7avvHXS1sWOly2aSvY0r4rHg8OTwp+POumsiTcurn1v8SVPOllud7giYKW5aKwgCzxF1mUb6g/h3lsOwfA4HoKSs4H55J5mJs4ef+jk8Q3/CJrhS1FuqVtSnb7ELStk9aIrzUVDBLkWuBE4AEDUoqRIEUOzExiRA6RIEfl2Ndt0hBODZvgRYGFdTfW2bNrOWiMmaIbPFmQdsJA28fahn4i3l7TLKQWuBjYEzfDVlXPDvQl57BWOCxg0w8cEzfBK7JmGiU6XX2AcDNwvwutBMzw9GwYcq0IrzUUHCTIfe+vGrD1xBcoUYFXQDP8TuLmupnqTUwVnLOCUuYuKDJHLgZuAQOYu9WvOBWYEzXCNIvesr7lxR6YFZlSFBs3wdENkDfAgA+L1lKHAAkE3BM3wxdE18YxaA316A4NmeDxwKzA7E+Pfcw4Dlp29YtmclFG6YOO9c1/vSyG9ErDSXDxC0BssPNcapPbfj2yAvnCix2p+LWiGl4HeWVczr743J/e4Cg2a4VmCvgEsGBDPcTzAZSAbg2Z4fqW5qMcR6N0KGDTDxwXN8EvYMSzOBZH2s+FQhy7nAGChIOuCZvjsnpzQaRUaNMOjgZuBX2M/IY5gqdCSFMSTYRdU1blHQKTPDQkBkknBcnZr9InAiqAZfg64pa6m+p3OMu4nYOXccKkIVwHV2B1Rx2hJGkwcv5sLbv8m47KKrN07RVMZzwGoeDwpY/DQTAb2hnia+Ni3m09aHHzSbc4ApgfN8IOqLFy/pDqenmEfAYNm+HTs1mX6XtSOoBYcOLyZn1XWs+/ec31Bhjnhk82ODM9voTnVzEeWOC0g2IMipgjnBs3wXZbqoxuWzPt25qUIIGguqgD5A3ZHM/u0Cvk1l5zpwKy4cTkB4EFD5KLg3LC5d7bDqDQXjQV5EbfEGyBTjkNYXWmGTwAwBFmMk63LAdxgqMA9lXPDpQYwI9feDNAnJoswwQAGu2m1AR/KIPpbR3AHB2G4e00eYIgBfOiexVa+IsBORgF5v5KshygphvK5HN59Vmf5Cqg3gD+7ZVGw2Mko3pWT3TLpAi1slmOIcSQeXN0P4em6muptxtMz5zyAPUzmCh5aqTVm0Ygf+zOAhUwzKYbyknEFKYoR975U94miNwEYganlqsrluCSiYLGD0TzmWfydiGLZ/ahC+RMLaEYZxDPGb9nCJIrcexjfA36+vmbeF5C2Qjdohq/AHolxdAitI5KUMoZ3ONl6iBE736eE5tYij5X3r2QyZZS2UFq8Z3CA1cVXsYmQW+KlgAcVubn9TP5+S6zbBrGvU/FcLJryZdMjC09DidH6wlfL76774JUPZyWTMkmEZnIW59w1qgwxDOIHV5T99Yfz7xrRXDzqzGzfI+x78Txwd11N9dr0g52ukW8TciZwIfY2jk4FKn0F1AErFV25vmbeZ2BvG1lcxHXA9ZZK+scZ8wJDdIVlccuYE3wfwLeBXDOw79NPcLbm+gR4DniirqZ6Y2eZerTJQdAMT8BewHgCMAnwY38dpbux251AHPvDG28Da4ANXQW7RiPxw0XkduCCbh1zjzdVtcuNYtvEnIx9n4LY3yksx46B6Y699+l9YG3KKI0Y1p631tfMa+ruxF7vUtEWhVaO/bT5gAOBYdgD40lgN/Zbth1IKLqtJ46kE43ETxKRO4Fje3uug2xTZSHow73dqrktKn009j06GBgFDOK7xa2NwJcpozTusZq/6Ot9yusPf8TWxIuKi7m0NSU3AZ1+mTML7AEeVtVFgVD55y7a7TV5s9VWR5RVeC3vod4NDfW7louIB5hM9pdnr1RldiDkW1ZW4d2ZZVsZk0+Tcp0SCJXH/VW+G1Q5Fng2S2beB87xV/lOD4R8b3WbO08oCAH3Egj53vVX+c5SOBPoNE6kl2wH5qnqsf4q3wqHynSNghJwL4Eq33Nq6XHADbT77FwvSQF/UdUp/ipfuFC/Yp3Xv4FdUVbhTZaN8a795rOmJ4DBIkym5zFFr6rqRYFQ+QNlFd7MI6xySEG+ge05dKovFgj5rgKmAi92k30Tyiy1dFogVN6nUPZ8Iy/2C3UCf5VvHTA9VpuYCVyEPdCQwn4rU8ALqvpIIFS+I3deOs//AZb84smmUsyHAAAAAElFTkSuQmCC",protocol:"uniswap_v2",slippage:!0,blockchains:["gnosis"],gnosis:{router:{address:"0x1C232F01118CB8B424793ae03F870aa7D0ac7f77",api:kx.ROUTER},factory:{address:"0xA818b4F111Ccac7AA31D0BCc0806d64F2E0737D7",api:kx.FACTORY},pair:{api:kx.PAIR}}};var xx=t=>new bx(Object.assign(Lx,{scope:t,findPath:t=>kx.findPath({...t,exchange:Lx}),pathExists:t=>kx.pathExists({...t,exchange:Lx}),getAmounts:t=>kx.getAmounts({...t,exchange:Lx}),getPrep:t=>kx.getPrep({...t,exchange:Lx}),getTransaction:t=>kx.getTransaction({...t,exchange:Lx})}));const Sx="79226673515401279992447579055",jx=t=>-t;class Cx{static priceToSqrtPriceX64(t,e,n){return r=t.mul(hx.pow(10,n-e)).sqrt(),new rp(r.mul(hx.pow(2,64)).floor().toFixed());var r}static sqrtPriceX64ToPrice(t,e,n){return(r=t,new hx(r.toString()).mul(hx.pow(2,-64))).pow(2).mul(hx.pow(10,e-n));var r}static tickIndexToSqrtPriceX64(t){return new rp(t>0?function(t){let e;e=new rp(0!=(1&t)?"79232123823359799118286999567":"79228162514264337593543950336");0!=(2&t)&&(e=Dx(e.mul(new rp("79236085330515764027303304731")),96,256));0!=(4&t)&&(e=Dx(e.mul(new rp("79244008939048815603706035061")),96,256));0!=(8&t)&&(e=Dx(e.mul(new rp("79259858533276714757314932305")),96,256));0!=(16&t)&&(e=Dx(e.mul(new rp("79291567232598584799939703904")),96,256));0!=(32&t)&&(e=Dx(e.mul(new rp("79355022692464371645785046466")),96,256));0!=(64&t)&&(e=Dx(e.mul(new rp("79482085999252804386437311141")),96,256));0!=(128&t)&&(e=Dx(e.mul(new rp("79736823300114093921829183326")),96,256));0!=(256&t)&&(e=Dx(e.mul(new rp("80248749790819932309965073892")),96,256));0!=(512&t)&&(e=Dx(e.mul(new rp("81282483887344747381513967011")),96,256));0!=(1024&t)&&(e=Dx(e.mul(new rp("83390072131320151908154831281")),96,256));0!=(2048&t)&&(e=Dx(e.mul(new rp("87770609709833776024991924138")),96,256));0!=(4096&t)&&(e=Dx(e.mul(new rp("97234110755111693312479820773")),96,256));0!=(8192&t)&&(e=Dx(e.mul(new rp("119332217159966728226237229890")),96,256));0!=(16384&t)&&(e=Dx(e.mul(new rp("179736315981702064433883588727")),96,256));0!=(32768&t)&&(e=Dx(e.mul(new rp("407748233172238350107850275304")),96,256));0!=(65536&t)&&(e=Dx(e.mul(new rp("2098478828474011932436660412517")),96,256));0!=(131072&t)&&(e=Dx(e.mul(new rp("55581415166113811149459800483533")),96,256));0!=(262144&t)&&(e=Dx(e.mul(new rp("38992368544603139932233054999993551")),96,256));return Dx(e,32,256)}(t):function(t){let e,n=Math.abs(t);e=new rp(0!=(1&n)?"18445821805675392311":"18446744073709551616");0!=(2&n)&&(e=Dx(e.mul(new rp("18444899583751176498")),64,256));0!=(4&n)&&(e=Dx(e.mul(new rp("18443055278223354162")),64,256));0!=(8&n)&&(e=Dx(e.mul(new rp("18439367220385604838")),64,256));0!=(16&n)&&(e=Dx(e.mul(new rp("18431993317065449817")),64,256));0!=(32&n)&&(e=Dx(e.mul(new rp("18417254355718160513")),64,256));0!=(64&n)&&(e=Dx(e.mul(new rp("18387811781193591352")),64,256));0!=(128&n)&&(e=Dx(e.mul(new rp("18329067761203520168")),64,256));0!=(256&n)&&(e=Dx(e.mul(new rp("18212142134806087854")),64,256));0!=(512&n)&&(e=Dx(e.mul(new rp("17980523815641551639")),64,256));0!=(1024&n)&&(e=Dx(e.mul(new rp("17526086738831147013")),64,256));0!=(2048&n)&&(e=Dx(e.mul(new rp("16651378430235024244")),64,256));0!=(4096&n)&&(e=Dx(e.mul(new rp("15030750278693429944")),64,256));0!=(8192&n)&&(e=Dx(e.mul(new rp("12247334978882834399")),64,256));0!=(16384&n)&&(e=Dx(e.mul(new rp("8131365268884726200")),64,256));0!=(32768&n)&&(e=Dx(e.mul(new rp("3584323654723342297")),64,256));0!=(65536&n)&&(e=Dx(e.mul(new rp("696457651847595233")),64,256));0!=(131072&n)&&(e=Dx(e.mul(new rp("26294789957452057")),64,256));0!=(262144&n)&&(e=Dx(e.mul(new rp("37481735321082")),64,256));return e}(t))}static sqrtPriceX64ToTickIndex(t){if(t.gt(new rp(Sx))||t.lt(new rp("4295048016")))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");const e=t.bitLength()-1,n=function(t,e,n){let r=t.toTwos(n).shln(e);return r.imaskn(n+1),r.fromTwos(n)}(new rp(e-64),32,128);let r=new rp("8000000000000000","hex"),i=0,o=new rp(0),a=e>=64?t.shrn(e-63):t.shln(63-e);for(;r.gt(new rp(0))&&i<14;){a=a.mul(a);let t=a.shrn(127);a=a.shrn(63+t.toNumber()),o=o.add(r.mul(t)),r=r.shrn(1),i+=1}const s=o.shrn(32),u=n.add(s).mul(new rp("59543866431248")),c=Dx(u.sub(new rp("184467440737095516")),64,128).toNumber(),l=Dx(u.add(new rp("15793534762490258745")),64,128).toNumber();if(c==l)return c;return Cx.tickIndexToSqrtPriceX64(l).lte(t)?l:c}static tickIndexToPrice(t,e,n){return Cx.sqrtPriceX64ToPrice(Cx.tickIndexToSqrtPriceX64(t),e,n)}static priceToTickIndex(t,e,n){return Cx.sqrtPriceX64ToTickIndex(Cx.priceToSqrtPriceX64(t,e,n))}static priceToInitializableTickIndex(t,e,n,r){return((t,e)=>t-t%e)(Cx.priceToTickIndex(t,e,n),r)}static invertPrice(t,e,n){const r=Cx.priceToTickIndex(t,e,n),i=jx(r);return Cx.tickIndexToPrice(i,n,e)}static invertSqrtPriceX64(t){const e=Cx.sqrtPriceX64ToTickIndex(t),n=jx(e);return Cx.tickIndexToSqrtPriceX64(n)}}function Dx(t,e,n){let r=t.toTwos(n).shrn(e);return r.imaskn(n-e+1),r.fromTwos(n-e)}const Ox=new rp(1e4),zx=new rp(1e6),_x=new rp(0),Px=new rp(1),Bx=new rp(2),Rx=Bx.pow(new rp(64)).sub(Px);class Ux extends rp{toBuffer(){const t=super.toArray().reverse(),e=buffer.Buffer.from(t);if(8===e.length)return e;assert__default.default(e.length<8,"u64 too large");const n=buffer.Buffer.alloc(8);return e.copy(n),n}static fromBuffer(t){return assert__default.default(8===t.length,`Invalid buffer length: ${t.length}`),new Ux([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}class Wx{static mul(t,e,n){const r=t.mul(e);if(this.isOverLimit(r,n))throw new Error(`Mul result higher than u${n}`);return r}static mulDiv(t,e,n,r){return this.mulDivRoundUpIf(t,e,n,!1,r)}static mulDivRoundUp(t,e,n,r){return this.mulDivRoundUpIf(t,e,n,!0,r)}static mulDivRoundUpIf(t,e,n,r,i){if(n.eq(_x))throw new Error("mulDiv denominator is zero");const o=this.mul(t,e,i),a=o.div(n);return r&&o.mod(n).gt(_x)?a.add(Px):a}static checked_mul_shift_right(t,e,n){return this.checked_mul_shift_right_round_up_if(t,e,!1,n)}static checked_mul_shift_right_round_up_if(t,e,n,r){if(t.eq(_x)||e.eq(_x))return _x;const i=this.mul(t,e,r);if(this.isOverLimit(i,r))throw new Error(`MulShiftRight overflowed u${r}.`);const o=i.div(new rp(2).pow(new rp(64)));const a=n&&o.and(Rx).gt(_x);if(a&&o.eq(Rx))throw new Error(`MulShiftRight overflowed u${r}.`);return a?o.add(Px):o}static isOverLimit(t,e){const n=Bx.pow(new rp(e)).sub(Px);return t.gt(n)}static divRoundUp(t,e){return this.divRoundUpIf(t,e,!0)}static divRoundUpIf(t,e,n){if(e.eq(_x))throw new Error("divRoundUpIf - divide by zero");let r=t.div(e);return n&&t.mod(e).gt(_x)?r.add(Px):r}}const Qx=(t,e,n)=>{const r=Cx.tickIndexToSqrtPriceX64(t);return{nextTickPrice:r,nextSqrtPriceLimit:n?rp.max(e,r):rp.min(e,r)}},Yx=(t,e)=>t.gt(e)?[e,t]:[t,e],Fx=(t,e,n,r)=>{let[i,o]=Yx(t,e),a=o.sub(i),s=n.mul(a).shln(64),u=i.mul(o),c=s.div(u),l=s.mod(u),h=r&&!l.eq(_x)?c.add(Px):c;if(h.gt(Rx))throw new Error("Results larger than U64");return h},Vx=(t,e,n,r)=>{let[i,o]=Yx(t,e),a=o.sub(i);return Wx.checked_mul_shift_right_round_up_if(n,a,r,128)},Hx=(t,e,n,r,i)=>r===i?((t,e,n,r)=>{if(n.eq(_x))return t;let i=Wx.mul(t,n,256),o=Wx.mul(e,t,256).shln(64);if(Wx.isOverLimit(o,256))throw new Error("getNextSqrtPriceFromARoundUp - numerator overflow u256");let a=e.shln(64);if(!r&&a.lte(i))throw new Error("getNextSqrtPriceFromARoundUp - Unable to divide currLiquidityX64 by product");let s=r?a.add(i):a.sub(i),u=Wx.divRoundUp(o,s);if(u.lt(new rp("4295048016")))throw new Error("getNextSqrtPriceFromARoundUp - price less than min sqrt price");if(u.gt(new rp(Sx)))throw new Error("getNextSqrtPriceFromARoundUp - price less than max sqrt price");return u})(t,e,n,r):((t,e,n,r)=>{let i=n.shln(64),o=Wx.divRoundUpIf(i,e,!r);return r?t.add(o):t.sub(o)})(t,e,n,r),Gx=(t,e,n,r,i)=>i===r?Fx(t,e,n,r):Vx(t,e,n,r),qx=(t,e,n,r,i,o,a)=>{let s=Gx(r,i,n,o,a),u=t;if(o){u=Wx.mulDiv(t,zx.sub(new rp(e)),zx,128)}let c=u.gte(s)?i:Hx(r,n,u,o,a),l=c.eq(i),h=((t,e,n,r,i)=>i===r?Vx(t,e,n,!r):Fx(t,e,n,!r))(r,c,n,o,a);l||(s=Gx(r,c,n,o,a));let d,p=o?s:h,f=o?h:s;if(!o&&f.gt(t)&&(f=t),o&&!l)d=t.sub(p);else{const t=new rp(e);d=Wx.mulDivRoundUp(p,t,zx.sub(t),128)}return{amountIn:p,amountOut:f,nextPrice:c,feeAmount:d}},Zx=(t,e,n)=>n?e.sub(t):e.add(t),Jx=(t,e,n,r,i)=>{let o=r,a=i,s=t;if(e>0){let t=((t,e)=>t.mul(new Ux(e).div(Ox)))(s,e);s=s.sub(t),o=o.add(r)}if(n.gt(_x)){const t=s.shln(64).div(n);a=a.add(t)}return{nextProtocolFee:o,nextFeeGrowthGlobalInput:a}},Xx=pp([lp("mint"),lp("vault"),lp("authority"),fp("emissionsPerSecondX64"),fp("growthGlobalX64")]),Kx=pp([gp("anchorDiscriminator"),lp("whirlpoolsConfig"),Kd(vp(),1,"whirlpoolBump"),mp("tickSpacing"),Kd(vp(),2,"tickSpacingSeed"),mp("feeRate"),mp("protocolFeeRate"),fp("liquidity"),fp("sqrtPrice"),sp("tickCurrentIndex"),gp("protocolFeeOwedA"),gp("protocolFeeOwedB"),lp("tokenMintA"),lp("tokenVaultA"),fp("feeGrowthGlobalA"),lp("tokenMintB"),lp("tokenVaultB"),fp("feeGrowthGlobalB"),gp("rewardLastUpdatedTimestamp"),Kd(Xx,3,"rewardInfos")]),$x=pp([op("initialized"),ap("liquidityNet"),fp("liquidityGross"),fp("feeGrowthOutsideA"),fp("feeGrowthOutsideB"),Kd(fp(),3,"reward_growths_outside")]),tS=pp([gp("anchorDiscriminator"),sp("startTickIndex"),Kd($x,88,"ticks"),lp("whirlpool")]),eS=(t,e,n)=>{const r=(Math.floor(t/e/88)+n)*e*88,i=88*e;if(r<-443636-(-443636%i+i))throw`startTickIndex is too small - - ${r}`;if(r>443636)throw`startTickIndex is too large - ${r}`;return r},nS=async({pool:t,freshWhirlpoolData:e,aToB:n})=>{const r=await(async({aToB:t,pool:e,tickSpacing:n,tickCurrentIndex:r})=>{const i=t?0:n;let o=0,a=[];for(let s=0;s<3;s++){let s;try{s=eS(r+i,n,o)}catch(t){return a}const u=(await Xs.findProgramAddress([np.from("tick_array"),new Xs(e.toString()).toBuffer(),np.from(s.toString())],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0];a.push(u),o=t?o-1:o+1}return a})({aToB:n,pool:t,tickSpacing:e.tickSpacing,tickCurrentIndex:e.tickCurrentIndex});return await Promise.all(r.map((async(t,e)=>{let n;try{n=await _E({blockchain:"solana",address:t.toString(),api:tS,cache:10})}catch(t){}return{address:t,data:n}})))};class rS{static fromTickIndex(t,e){const n=Math.floor(Math.floor(t/e)/88);let r=Math.floor(t%(88*e)/e);return r<0&&(r=88+r),new rS(n,r,e)}constructor(t,e,n){if(e>=88)throw new Error("Invalid offsetIndex - value has to be smaller than TICK_ARRAY_SIZE");if(e<0)throw new Error("Invalid offsetIndex - value is smaller than 0");if(n<0)throw new Error("Invalid tickSpacing - value is less than 0");this.arrayIndex=t,this.offsetIndex=e,this.tickSpacing=n}toTickIndex(){return 88*this.arrayIndex*this.tickSpacing+this.offsetIndex*this.tickSpacing}toNextInitializableTickIndex(){return rS.fromTickIndex(this.toTickIndex()+this.tickSpacing,this.tickSpacing)}toPrevInitializableTickIndex(){return rS.fromTickIndex(this.toTickIndex()-this.tickSpacing,this.tickSpacing)}}class iS{constructor(t,e,n){if(!t[0]||!t[0].data)throw new Error("TickArray index 0 must be initialized");this.sequence=[];for(const e of t){if(!e||!e.data)break;this.sequence.push({address:e.address,data:e.data})}this.tickArrays=t,this.tickSpacing=e,this.aToB=n,this.touchedArrays=[...Array(this.sequence.length).fill(!1)],this.startArrayIndex=rS.fromTickIndex(this.sequence[0].data.startTickIndex,this.tickSpacing).arrayIndex}isValidTickArray0(t){const e=this.aToB?0:this.tickSpacing,n=this.sequence[0].data;return this.checkIfIndexIsInTickArrayRange(n.startTickIndex,t+e)}getNumOfTouchedArrays(){return this.touchedArrays.filter((t=>!!t)).length}getTouchedArrays(t){let e=this.touchedArrays.reduce(((t,e,n)=>(e&&t.push(this.sequence[n].address),t)),[]);if(0===e.length)return[];const n=t-e.length;return n>0&&(e=e.concat(Array(n).fill(e[e.length-1]))),e}getTick(t){const e=rS.fromTickIndex(t,this.tickSpacing);if(!this.isArrayIndexInBounds(e,this.aToB))throw new Error("Provided tick index is out of bounds for this sequence.");const n=this.getLocalArrayIndex(e.arrayIndex,this.aToB),r=this.sequence[n].data;if(this.touchedArrays[n]=!0,!r)throw new Error(`TickArray at index ${n} is not initialized.`);if(!this.checkIfIndexIsInTickArrayRange(r.startTickIndex,t))throw new Error(`TickArray at index ${n} is unexpected for this sequence.`);return r.ticks[e.offsetIndex]}findNextInitializedTickIndex(t){const e=this.aToB?t:t+this.tickSpacing;let n=rS.fromTickIndex(e,this.tickSpacing);if(!this.isArrayIndexInBounds(n,this.aToB))throw new Error(`Swap input value traversed too many arrays. Out of bounds at attempt to traverse tick index - ${n.toTickIndex()}.`);for(;this.isArrayIndexInBounds(n,this.aToB);){const t=this.getTick(n.toTickIndex());if(t.initialized)return{nextIndex:n.toTickIndex(),nextTickData:t};n=this.aToB?n.toPrevInitializableTickIndex():n.toNextInitializableTickIndex()}return{nextIndex:Math.max(Math.min(this.aToB?n.toTickIndex()+this.tickSpacing:n.toTickIndex()-1,443636),-443636),nextTickData:null}}getLocalArrayIndex(t,e){return e?this.startArrayIndex-t:t-this.startArrayIndex}isArrayIndexInBounds(t,e){const n=this.getLocalArrayIndex(t.arrayIndex,e),r=this.sequence.length;return n>=0&&n=t&&e{try{const n=await _E({blockchain:"solana",address:t.pubkey.toString(),api:Kx,cache:10}),s=n.tokenMintA.toString()===e,u=await nS({pool:t.pubkey,freshWhirlpoolData:n,aToB:s}),c=new iS(u,n.tickSpacing,s),l=new rp(s?"4295048016":Sx),h=!(!r&&!i);return{price:(({tokenAmount:t,aToB:e,freshWhirlpoolData:n,tickSequence:r,sqrtPriceLimit:i,amountSpecifiedIsInput:o})=>{let a=t,s=_x,u=n.sqrtPrice,c=n.liquidity,l=n.tickCurrentIndex,h=_x;const d=n.feeRate,p=n.protocolFeeRate;let f=new Ux(0),m=e?n.feeGrowthGlobalA:n.feeGrowthGlobalB;for(;a.gt(_x)&&!i.eq(u);){let{nextIndex:t}=r.findNextInitializedTickIndex(l),{nextTickPrice:n,nextSqrtPriceLimit:y}=Qx(t,i,e);const g=qx(a,d,c,u,y,o,e);h=h.add(g.feeAmount),o?(a=a.sub(g.amountIn),a=a.sub(g.feeAmount),s=s.add(g.amountOut)):(a=a.sub(g.amountOut),s=s.add(g.amountIn),s=s.add(g.feeAmount));let{nextProtocolFee:v,nextFeeGrowthGlobalInput:w}=Jx(g.feeAmount,p,c,f,m);if(f=v,m=w,g.nextPrice.eq(n)){const n=r.getTick(t);n.initialized&&(c=Zx(n.liquidityNet,c,e)),l=e?t-1:t}else l=Cx.sqrtPriceX64ToTickIndex(g.nextPrice);u=g.nextPrice}return s})({tokenAmount:new rp((r||i||o||a).toString()),aToB:s,freshWhirlpoolData:n,tickSequence:c,sqrtPriceLimit:l,amountSpecifiedIsInput:h}).toString(),tickArrays:u,aToB:s,sqrtPriceLimit:l}}catch(t){return{price:void 0,tickArrays:void 0,aToB:void 0,sqrtPriceLimit:void 0}}};let aS=async(t,e)=>await _E("solana://whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc/getProgramAccounts",{params:{filters:[{dataSize:Kx.span},{memcmp:{offset:8,bytes:"2LecshUwdy9xi7meFgHtFJQNSKk4KdTrcpvaB56dP2NQ"}},{memcmp:{offset:101,bytes:t}},{memcmp:{offset:181,bytes:e}}]},api:Kx,cache:86400,cacheKey:["whirlpool",t.toString(),e.toString()].join("-")}),sS=async({tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o})=>{try{let a=await aS(t,e);return 0===a.length&&(a=await aS(e,t)),a=a.filter((t=>t.data.liquidity.gt(1))),a=(await Promise.all(a.map((async a=>{const{price:s,tickArrays:u,sqrtPriceLimit:c,aToB:l}=await oS({account:a,tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o});return void 0!==s&&{pubkey:a.pubkey,price:s,tickArrays:u,sqrtPriceLimit:c,aToB:l,data:{tokenVaultA:a.data.tokenVaultA,tokenVaultB:a.data.tokenVaultB}}})))).filter(Boolean),a}catch(t){return[]}},uS=async({tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o})=>{const a=await sS({tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o});if(!a||0===a.length)return;let s;return s=n||r?(t=>t.reduce(((t,e)=>Ff.from(e.price).gt(Ff.from(t.price))?e:t)))(a):(t=>t.reduce(((t,e)=>Ff.from(e.price).lt(Ff.from(t.price))?e:t)))(a),s};function cS(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const lS=Vp.solana;let hS=({path:t})=>{if(!t)return;let e=t.map(((e,n)=>e===lS.currency.address&&t[n+1]!=lS.wrapped.address&&t[n-1]!=lS.wrapped.address?lS.wrapped.address:e));return e[0]==lS.currency.address&&e[1]==lS.wrapped.address?e.splice(0,1):e[e.length-1]==lS.currency.address&&e[e.length-2]==lS.wrapped.address&&e.splice(e.length-1,1),e},dS=async({path:t,amountIn:e,amountInMax:n,amountOut:r,amountOutMin:i})=>1!=t.length&&(t=hS({path:t}),(await sS({tokenIn:t[0],tokenOut:t[1],amountIn:e,amountInMax:n,amountOut:r,amountOutMin:i})).length>0),pS=async({path:t,amountIn:e,amountInMax:n})=>{let r=[Ff.from(e||n)];if(r.push(Ff.from((await uS({tokenIn:t[0],tokenOut:t[1],amountIn:e,amountInMax:n})).price)),3===t.length&&r.push(Ff.from((await uS({tokenIn:t[1],tokenOut:t[2],amountIn:e?r[1]:void 0,amountInMax:n?r[1]:void 0})).price)),r.length==t.length)return r},fS=async({path:t,amountOut:e,amountOutMin:n})=>{t=t.slice().reverse();let r=[Ff.from(e||n)];if(r.push(Ff.from((await uS({tokenIn:t[1],tokenOut:t[0],amountOut:e,amountOutMin:n})).price)),3===t.length&&r.push(Ff.from((await uS({tokenIn:t[2],tokenOut:t[1],amountOut:e?r[1]:void 0,amountOutMin:n?r[1]:void 0})).price)),r.length==t.length)return r.slice().reverse()};const mS=Vp.solana,yS=new rp("14449647541112719096"),gS=new rp("16635068063392030915"),vS=async({instructions:t,owner:e,token:n,account:r})=>{let i;try{i=!!await _E({blockchain:"solana",address:r.toString()})}catch(t){}i||t.push(await Tk.solana.createAssociatedTokenAccountInstruction({token:n,owner:e,payer:e}))},wS=async({account:t,poolOne:e,tickArraysOne:n,tokenAccountOneA:r,tokenVaultOneA:i,tokenAccountOneB:o,tokenVaultOneB:a,poolTwo:s,tickArraysTwo:u,tokenAccountTwoA:c,tokenVaultTwoA:l,tokenAccountTwoB:h,tokenVaultTwoB:d})=>{let p=!1;const f=n.map(((t,e)=>!1!==p?n[p]:t.data?t:(p=e-1,n[e-1])));let m=!1;const y=u.map(((t,e)=>!1!==m?u[m]:t.data?t:(m=e-1,u[e-1])));return[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isWritable:!1,isSigner:!1},{pubkey:new Xs(t),isWritable:!1,isSigner:!0},{pubkey:new Xs(e.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(s.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(r.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(i.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(o.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(a.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(c.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(l.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(h.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(d.toString()),isWritable:!0,isSigner:!1},{pubkey:f[0].address,isWritable:!0,isSigner:!1},{pubkey:f[1].address,isWritable:!0,isSigner:!1},{pubkey:f[2].address,isWritable:!0,isSigner:!1},{pubkey:y[0].address,isWritable:!0,isSigner:!1},{pubkey:y[1].address,isWritable:!0,isSigner:!1},{pubkey:y[2].address,isWritable:!0,isSigner:!1},{pubkey:(await Xs.findProgramAddress([np.from("oracle"),new Xs(e.toString()).toBuffer()],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0],isWritable:!1,isSigner:!1},{pubkey:(await Xs.findProgramAddress([np.from("oracle"),new Xs(s.toString()).toBuffer()],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0],isWritable:!1,isSigner:!1}]},bS=({amount:t,otherAmountThreshold:e,amountSpecifiedIsInput:n,aToBOne:r,aToBTwo:i,sqrtPriceLimitOne:o,sqrtPriceLimitTwo:a})=>{let s,u;return s=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),op("amountSpecifiedIsInput"),op("aToBOne"),op("aToBTwo"),fp("sqrtPriceLimitOne"),fp("sqrtPriceLimitTwo")]),u=np.alloc(s.span),s.encode({anchorDiscriminator:gS,amount:new rp(t.toString()),otherAmountThreshold:new rp(e.toString()),amountSpecifiedIsInput:n,aToBOne:r,aToBTwo:i,sqrtPriceLimitOne:o,sqrtPriceLimitTwo:a},u),u},MS=async({account:t,pool:e,tokenAccountA:n,tokenVaultA:r,tokenAccountB:i,tokenVaultB:o,tickArrays:a})=>{let s=!1;const u=a.map(((t,e)=>!1!==s?a[s]:t.data?t:(s=e-1,a[e-1])));return[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isWritable:!1,isSigner:!1},{pubkey:new Xs(t),isWritable:!1,isSigner:!0},{pubkey:new Xs(e.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(n.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(r.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(i.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(o.toString()),isWritable:!0,isSigner:!1},{pubkey:u[0].address,isWritable:!0,isSigner:!1},{pubkey:u[1].address,isWritable:!0,isSigner:!1},{pubkey:u[2].address,isWritable:!0,isSigner:!1},{pubkey:(await Xs.findProgramAddress([np.from("oracle"),new Xs(e.toString()).toBuffer()],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0],isWritable:!1,isSigner:!1}]},AS=({amount:t,otherAmountThreshold:e,sqrtPriceLimit:n,amountSpecifiedIsInput:r,aToB:i})=>{let o,a;return o=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),fp("sqrtPriceLimit"),op("amountSpecifiedIsInput"),op("aToB")]),a=np.alloc(o.span),o.encode({anchorDiscriminator:yS,amount:new rp(t.toString()),otherAmountThreshold:new rp(e.toString()),sqrtPriceLimit:n,amountSpecifiedIsInput:r,aToB:i},a),a};var ES={findPath:async({tokenIn:t,tokenOut:e,amountIn:n,amountOut:r,amountInMax:i,amountOutMin:o})=>{if([t,e].includes(lS.currency.address)&&[t,e].includes(lS.wrapped.address))return{path:void 0,exchangePath:void 0};let a,s,u,c;return await dS({path:[t,e],amountIn:n,amountInMax:i,amountOut:r,amountOutMin:o})?a=[t,e]:t!=lS.wrapped.address&&t!=lS.currency.address&&await dS({path:[t,lS.wrapped.address],amountIn:n,amountInMax:i,amountOut:r,amountOutMin:o})&&e!=lS.wrapped.address&&e!=lS.currency.address&&await dS({path:[e,lS.wrapped.address],amountIn:r||o,amountInMax:r||o,amountOut:n||i,amountOutMin:n||i})?a=[t,lS.wrapped.address,e]:!lS.stables.usd.includes(t)&&(s=(await Promise.all(lS.stables.usd.map((async e=>await dS({path:[t,e],amountIn:n,amountInMax:i,amountOut:r,amountOutMin:o})?e:void 0)))).filter(Boolean))&&!lS.stables.usd.includes(e)&&(u=(await Promise.all(lS.stables.usd.map((async t=>await dS({path:[e,t],amountIn:r||o,amountInMax:r||o,amountOut:n||i,amountOutMin:n||i})?t:void 0)))).filter(Boolean))&&(c=s.filter((t=>u.includes(t)))[0])&&(a=[t,c,e]),cS([a,"optionalAccess",t=>t.length])&&a[0]==lS.currency.address?a.splice(1,0,lS.wrapped.address):cS([a,"optionalAccess",t=>t.length])&&a[a.length-1]==lS.currency.address&&a.splice(a.length-1,0,lS.wrapped.address),{path:a,exchangePath:hS({path:a})}},pathExists:dS,getAmounts:async({path:t,tokenIn:e,tokenOut:n,amountOut:r,amountIn:i,amountInMax:o,amountOutMin:a})=>{let s;if(t=hS({path:t}),r){if(s=await fS({path:t,amountOut:r,tokenIn:e,tokenOut:n}),null==(i=s?s[0]:void 0)||o&&i.gt(o))return{};void 0===o&&(o=i)}else if(i){if(s=await pS({path:t,amountIn:i,tokenIn:e,tokenOut:n}),null==(r=s?s[s.length-1]:void 0)||a&&r.lt(a))return{};void 0===a&&(a=r)}else if(a){if(s=await fS({path:t,amountOutMin:a,tokenIn:e,tokenOut:n}),null==(i=s?s[0]:void 0)||o&&i.gt(o))return{};void 0===o&&(o=i)}else if(o){if(s=await pS({path:t,amountInMax:o,tokenIn:e,tokenOut:n}),null==(r=s?s[s.length-1]:void 0)||a&&r.lt(a))return{};void 0===a&&(a=r)}return{amountOut:r||a,amountIn:i||o,amountInMax:o||i,amountOutMin:a||r,amounts:s}},getTransaction:async({path:t,amountIn:e,amountInMax:n,amountOut:r,amountOutMin:i,amounts:o,amountInInput:a,amountOutInput:s,amountInMaxInput:u,amountOutMinInput:c,account:l})=>{let h={blockchain:"solana"},d=[];const p=hS({path:t});if(p.length>3)throw"Orca can only handle fixed paths with a max length of 3 (2 pools)!";const f=p[0],m=3==p.length?p[1]:void 0,y=p[p.length-1];let g;2==p.length?g=[await uS({tokenIn:f,tokenOut:y,amountIn:a||u,amountOut:s||c})]:a||u?(g=[await uS({tokenIn:f,tokenOut:m,amountIn:a||u})],g.push(await uS({tokenIn:m,tokenOut:y,amountIn:g[0].price}))):(g=[await uS({tokenIn:m,tokenOut:y,amountOut:s||c})],g.unshift(await uS({tokenIn:f,tokenOut:m,amountOut:g[0].price})));let v,w=t[0]===mS.currency.address&&p[0]===mS.wrapped.address,b=t[t.length-1]===mS.currency.address&&p[p.length-1]===mS.wrapped.address;const M=await xE("solana");if(w||b){const t=await M.getMinimumBalanceForRentExemption(Tk.solana.TOKEN_LAYOUT.span),n=Zl.generate();v=n.publicKey.toString();const r=w?new rp(e.toString()).add(new rp(t)):new rp(t);let i=Yu.createAccount({fromPubkey:new Xs(l),newAccountPubkey:new Xs(v),programId:new Xs(Tk.solana.TOKEN_PROGRAM),space:Tk.solana.TOKEN_LAYOUT.span,lamports:r});i.signers=[n],d.push(i),d.push(Tk.solana.initializeAccountInstruction({account:v,token:mS.wrapped.address,owner:l}))}if(1===g.length){let t=!(!a&&!c),o=t?e:r,s=t?i:n,u=new Xs(w?v:await Tk.solana.findProgramAddress({owner:l,token:f})),h=new Xs(b?v:await Tk.solana.findProgramAddress({owner:l,token:y}));b||await vS({instructions:d,owner:l,token:y,account:h}),d.push(new gu({programId:new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),keys:await MS({account:l,pool:g[0].pubkey,tokenAccountA:g[0].aToB?u:h,tokenVaultA:g[0].data.tokenVaultA,tokenAccountB:g[0].aToB?h:u,tokenVaultB:g[0].data.tokenVaultB,tickArrays:g[0].tickArrays}),data:AS({amount:o,otherAmountThreshold:s,sqrtPriceLimit:g[0].sqrtPriceLimit,amountSpecifiedIsInput:t,aToB:g[0].aToB})}))}else if(2===g.length){let t=!(!a&&!c),o=t?e:r,s=t?i:n,u=new Xs(w?v:await Tk.solana.findProgramAddress({owner:l,token:f})),h=p[1],m=new Xs(await Tk.solana.findProgramAddress({owner:l,token:h}));await vS({instructions:d,owner:l,token:h,account:m});let M=new Xs(b?v:await Tk.solana.findProgramAddress({owner:l,token:y}));b||await vS({instructions:d,owner:l,token:y,account:M}),d.push(new gu({programId:new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),keys:await wS({account:l,poolOne:g[0].pubkey,tickArraysOne:g[0].tickArrays,tokenAccountOneA:g[0].aToB?u:m,tokenVaultOneA:g[0].data.tokenVaultA,tokenAccountOneB:g[0].aToB?m:u,tokenVaultOneB:g[0].data.tokenVaultB,poolTwo:g[1].pubkey,tickArraysTwo:g[1].tickArrays,tokenAccountTwoA:g[1].aToB?m:M,tokenVaultTwoA:g[1].data.tokenVaultA,tokenAccountTwoB:g[1].aToB?M:m,tokenVaultTwoB:g[1].data.tokenVaultB}),data:bS({amount:o,otherAmountThreshold:s,amountSpecifiedIsInput:t,aToBOne:g[0].aToB,aToBTwo:g[1].aToB,sqrtPriceLimitOne:g[0].sqrtPriceLimit,sqrtPriceLimitTwo:g[1].sqrtPriceLimit})}))}return(w||b)&&d.push(Tk.solana.closeAccountInstruction({account:v,owner:l})),h.instructions=d,h},WHIRLPOOL_LAYOUT:Kx};const NS={name:"orca",label:"Orca",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI3LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9ImthdG1hbl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNjAwIDQ1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjAwIDQ1MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8cGF0aCBmaWxsPSIjRkZEMTVDIiBkPSJNNDg4LjQsMjIyLjljMCwxMDMuOC04NC4xLDE4Ny45LTE4Ny45LDE4Ny45Yy0xMDMuOCwwLTE4Ny45LTg0LjEtMTg3LjktMTg3LjlDMTEyLjYsMTE5LjEsMTk2LjcsMzUsMzAwLjUsMzUKCUM0MDQuMiwzNSw0ODguNCwxMTkuMSw0ODguNCwyMjIuOXoiLz4KPHBhdGggZmlsbD0iI0ZGRkZGRiIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjE3LjY3NTUiIGQ9Ik0yMDkuNSwyOTkuOGMxLjYtMS4xLDMuMS0yLjgsMy45LTUuMWMwLjgtMi42LDAuMy00LjksMC02LjJjMCwwLDAtMC4xLDAtMC4xbDAuMy0xLjhjMC45LDAuNSwxLjksMS4xLDMsMS45CgljMC4zLDAuMiwwLjcsMC41LDEuMSwwLjdjMC41LDAuNCwxLjEsMC44LDEuNCwxYzAuNiwwLjQsMS41LDEsMi41LDEuNWMyNS4xLDE1LjYsNDUuOCwyMiw2Mi4yLDIxLjJjMTctMC44LDI4LjktOS40LDM1LjEtMjEuOQoJYzUuOS0xMi4xLDYuMi0yNywyLTQwLjljLTQuMi0xMy45LTEzLTI3LjUtMjYuMi0zNi45Yy0yMi4yLTE1LjgtNDIuNS0zOS44LTUyLjctNjAuM2MtNS4yLTEwLjQtNy4zLTE4LjctNi43LTI0LjIKCWMwLjMtMi41LDEtNC4xLDItNS4xYzAuOS0xLDIuNi0yLjEsNS45LTIuNmM2LjktMS4xLDE1LTMuNiwyMy4xLTYuMmMzLjItMSw2LjMtMiw5LjUtMi45YzExLjctMy40LDI0LjItNi4zLDM3LjItNi4zCgljMjUuMywwLDU1LDExLDg2LjMsNTYuOGM0MC4yLDU4LjgsMTguMSwxMjQuNC0yOC4yLDE1OC45Yy0yMy4xLDE3LjItNTEuOSwyNi4zLTgxLjUsMjIuOUMyNjIuOSwzNDEuMywyMzQuOSwzMjcuOSwyMDkuNSwyOTkuOHoKCSBNMjE0LjIsMjg0LjZDMjE0LjIsMjg0LjYsMjE0LjIsMjg0LjcsMjE0LjIsMjg0LjZDMjE0LjEsMjg0LjcsMjE0LjIsMjg0LjYsMjE0LjIsMjg0LjZ6IE0yMTEuNiwyODUuOAoJQzIxMS42LDI4NS44LDIxMS43LDI4NS44LDIxMS42LDI4NS44QzIxMS43LDI4NS44LDIxMS42LDI4NS44LDIxMS42LDI4NS44eiIvPgo8cGF0aCBkPSJNMjMyLjUsMTI0LjNjMCwwLDcxLjgtMTkuMSw4Ny41LTE5LjFjMTUuNywwLDc4LjYsMzAuNSw5Ni45LDg2LjNjMjYsNzktNDQuNywxMzAuOS01Mi43LDEyNS44CgljNzYuMS02Mi45LTQ4LjQtMTc5LjEtMTA5LjYtMTcwLjRjLTcuNiwxLjEtMy40LDcuNi0zLjQsNy42bC0xLjcsMTdsLTEyLjctMjEuMkwyMzIuNSwxMjQuM3oiLz4KPHBhdGggZD0iTTQwNi41LDE2Ny42YzIyLjcsMzkuOSwxOCwxNy4xLDEyLjksNjIuN2M5LjMtMTUuMSwyMy45LTMuOCwyOS45LDJjMS4xLDEsMi45LDAuNCwyLjgtMS4xYy0wLjItNi44LTIuMi0yMS40LTEzLjQtMzcuMQoJQzQyMy40LDE3Mi42LDQwNi41LDE2Ny42LDQwNi41LDE2Ny42eiIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMC45OTMiIGQ9Ik00MTkuNCwyMzAuM2M1LTQ1LjYsOS43LTIyLjgtMTIuOS02Mi43YzAsMCwxNi45LDUsMzIuMywyNi41YzExLjIsMTUuNywxMy4xLDMwLjMsMTMuNCwzNy4xCgljMC4xLDEuNS0xLjcsMi4xLTIuOCwxLjFDNDQzLjMsMjI2LjUsNDI4LjcsMjE1LjMsNDE5LjQsMjMwLjN6IE00MTkuNCwyMzAuM2MwLjktMi4xLDIuMi01LjUsMi4yLTUuNSIvPgo8cGF0aCBkPSJNMjI0LDIyNC4yYy05LjYsMTYuMi0yOS4yLDE1LTI4LjgsMzQuM2MxNy41LDM5LDE3LjYsMzYuMiwxNy42LDM2LjJjMzIuNS0xOC4yLDE5LjEtNTguNSwxNC4zLTcwLjQKCUMyMjYuNiwyMjMsMjI0LjcsMjIzLDIyNCwyMjQuMnoiLz4KPHBhdGggZD0iTTE1MC40LDI2MC4xYzE4LjcsMi40LDI5LjgtMTMuOCw0NC44LTEuNmMxOS45LDM3LjgsMTcuNiwzNi4yLDE3LjYsMzYuMmMtMzQuNCwxNC40LTU3LjktMjEtNjQuMy0zMi4xCglDMTQ3LjgsMjYxLjMsMTQ5LDI1OS45LDE1MC40LDI2MC4xeiIvPgo8cGF0aCBkPSJNMzA2LjksMjM2YzAsMCwxOC43LDE5LjEsOC45LDIyLjFjLTEyLjItNy41LTM0LTEuNy00NC43LDEuOWMtMi42LDAuOS01LjItMS40LTQuMy00LjFjMy42LTEwLDEyLjYtMjguNiwyOS45LTMxCglDMzA2LjksMjIyLjQsMzA2LjksMjM2LDMwNi45LDIzNnoiLz4KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTMxOC4zLDE0Mi41Yy0yLjEtMy02LjQtMTEsNi44LTExYzEzLjIsMCwzMy4zLDE0LjksMzcuNCwyMC40Yy0xLjMsMy40LTkuOCw0LjEtMTQsMy44Yy00LjItMC4zLTExLjUtMS0xNy0zLjgKCUMzMjYsMTQ5LjIsMzIwLjUsMTQ1LjUsMzE4LjMsMTQyLjV6Ii8+Cjwvc3ZnPgo=",protocol:"orca",slippage:!0,blockchains:["solana"],solana:{router:{address:"whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc",api:ES.WHIRLPOOL_LAYOUT}}};var TS=t=>new bx(Object.assign(NS,{scope:t,findPath:t=>ES.findPath({...t,exchange:NS}),pathExists:t=>ES.pathExists({...t,exchange:NS}),getAmounts:t=>ES.getAmounts({...t,exchange:NS}),getPrep:t=>{},getTransaction:t=>ES.getTransaction({...t,exchange:NS})}));const IS={name:"pancakeswap",label:"PancakeSwap",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTk4IiBoZWlnaHQ9IjE5OSIgdmlld0JveD0iMCAwIDE5OCAxOTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguNTUyIDE5OC42MDdDNjkuMDYxMyAxOTguNTg1IDQ1LjMwNiAxOTEuNTggMjguNzA3OSAxNzguOTk4QzExLjkxMDggMTY2LjI2NSAzIDE0OC4xOTUgMyAxMjcuNzQ4QzMgMTA4LjA0NyAxMS44OTEzIDkzLjg0MTEgMjEuOTUxNyA4NC4yMzg1QzI5LjgzNTkgNzYuNzEzMiAzOC41MzYzIDcxLjg5MzYgNDQuNTk0NSA2OS4xMjEzQzQzLjIyNDUgNjQuOTU5NCA0MS41MTUzIDU5LjUxMDggMzkuOTg2MSA1My44ODMyQzM3LjkzOTkgNDYuMzUyNyAzNS45MzI1IDM3LjUxNzQgMzUuOTMyNSAzMS4wNDI5QzM1LjkzMjUgMjMuMzc5NSAzNy42MjA0IDE1LjY4MzMgNDIuMTcxNCA5LjcwMzA2QzQ2Ljk3OTcgMy4zODQ3NiA1NC4yMTgyIDAgNjIuOTI2NCAwQzY5LjczMjIgMCA3NS41MTAzIDIuNDk5MDMgODAuMDMzOSA2LjgxMDExQzg0LjM1NzkgMTAuOTMwOSA4Ny4yMzU3IDE2LjQwMzQgODkuMjIyNyAyMi4xMDgyQzkyLjcxNDMgMzIuMTMyNSA5NC4wNzM4IDQ0LjcyNjQgOTQuNDU1MSA1Ny4yOTQ1SDEwMi43OTZDMTAzLjE3OCA0NC43MjY0IDEwNC41MzcgMzIuMTMyNSAxMDguMDI5IDIyLjEwODJDMTEwLjAxNiAxNi40MDM0IDExMi44OTQgMTAuOTMwOSAxMTcuMjE4IDYuODEwMTFDMTIxLjc0MSAyLjQ5OTAzIDEyNy41MTkgMCAxMzQuMzI1IDBDMTQzLjAzMyAwIDE1MC4yNzIgMy4zODQ3NiAxNTUuMDggOS43MDMwNkMxNTkuNjMxIDE1LjY4MzMgMTYxLjMxOSAyMy4zNzk1IDE2MS4zMTkgMzEuMDQyOUMxNjEuMzE5IDM3LjUxNzQgMTU5LjMxMiA0Ni4zNTI3IDE1Ny4yNjUgNTMuODgzMkMxNTUuNzM2IDU5LjUxMDggMTU0LjAyNyA2NC45NTk0IDE1Mi42NTcgNjkuMTIxM0MxNTguNzE1IDcxLjg5MzYgMTY3LjQxNiA3Ni43MTMyIDE3NS4zIDg0LjIzODVDMTg1LjM2IDkzLjg0MTEgMTk0LjI1MiAxMDguMDQ3IDE5NC4yNTIgMTI3Ljc0OEMxOTQuMjUyIDE0OC4xOTUgMTg1LjM0MSAxNjYuMjY1IDE2OC41NDQgMTc4Ljk5OEMxNTEuOTQ1IDE5MS41OCAxMjguMTkgMTk4LjU4NSA5OC42OTk2IDE5OC42MDdIOTguNTUyWiIgZmlsbD0iIzYzMzAwMSIvPgo8cGF0aCBkPSJNNjIuOTI2MiA3LjI4ODMzQzUwLjE3MTYgNy4yODgzMyA0NC4zMDA0IDE2LjgwMzcgNDQuMzAwNCAyOS45NjMyQzQ0LjMwMDQgNDAuNDIzMSA1MS4xMjIyIDYxLjM3MTUgNTMuOTIxMiA2OS41MjYzQzU0LjU1MDggNzEuMzYwNSA1My41NjE2IDczLjM3MDEgNTEuNzU3NCA3NC4wODE0QzQxLjUzNTEgNzguMTEyMSAxMS4zNjc5IDkyLjg3IDExLjM2NzkgMTI2LjY2OUMxMS4zNjc5IDE2Mi4yNzIgNDIuMDI0NiAxODkuMTE3IDk4LjU1ODEgMTg5LjE2Qzk4LjU4MDYgMTg5LjE2IDk4LjYwMzEgMTg5LjE1OSA5OC42MjU2IDE4OS4xNTlDOTguNjQ4MSAxODkuMTU5IDk4LjY3MDYgMTg5LjE2IDk4LjY5MzEgMTg5LjE2QzE1NS4yMjcgMTg5LjExNyAxODUuODgzIDE2Mi4yNzIgMTg1Ljg4MyAxMjYuNjY5QzE4NS44ODMgOTIuODcgMTU1LjcxNiA3OC4xMTIxIDE0NS40OTQgNzQuMDgxNEMxNDMuNjkgNzMuMzcwMSAxNDIuNyA3MS4zNjA1IDE0My4zMyA2OS41MjYzQzE0Ni4xMjkgNjEuMzcxNSAxNTIuOTUxIDQwLjQyMzEgMTUyLjk1MSAyOS45NjMyQzE1Mi45NTEgMTYuODAzNyAxNDcuMDggNy4yODgzMyAxMzQuMzI1IDcuMjg4MzNDMTE1Ljk2NSA3LjI4ODMzIDExMS4zODkgMzMuMjk1NSAxMTEuMDYyIDYxLjIwNzVDMTExLjA0IDYzLjA3MDkgMTA5LjUzNCA2NC41ODI4IDEwNy42NyA2NC41ODI4SDg5LjU4MDdDODcuNzE3MiA2NC41ODI4IDg2LjIxMDggNjMuMDcwOSA4Ni4xODkgNjEuMjA3NUM4NS44NjI2IDMzLjI5NTUgODEuMjg2IDcuMjg4MzMgNjIuOTI2MiA3LjI4ODMzWiIgZmlsbD0iI0QxODg0RiIvPgo8cGF0aCBkPSJNOTguNjkzMSAxNzcuNzU1QzU3LjE1NTEgMTc3Ljc1NSAxMS40Mzk3IDE1NS41MiAxMS4zNjgxIDEyNi43MzdDMTEuMzY4IDEyNi43ODEgMTEuMzY3OSAxMjYuODI2IDExLjM2NzkgMTI2Ljg3MUMxMS4zNjc5IDE2Mi41MDMgNDIuMDczNCAxODkuMzYyIDk4LjY5MzEgMTg5LjM2MkMxNTUuMzEzIDE4OS4zNjIgMTg2LjAxOCAxNjIuNTAzIDE4Ni4wMTggMTI2Ljg3MUMxODYuMDE4IDEyNi44MjYgMTg2LjAxOCAxMjYuNzgxIDE4Ni4wMTggMTI2LjczN0MxODUuOTQ2IDE1NS41MiAxNDAuMjMxIDE3Ny43NTUgOTguNjkzMSAxNzcuNzU1WiIgZmlsbD0iI0ZFREM5MCIvPgo8cGF0aCBkPSJNNzUuNjEzNSAxMTcuODk2Qzc1LjYxMzUgMTI3LjYxNCA3MS4wMjEgMTMyLjY3NSA2NS4zNTU4IDEzMi42NzVDNTkuNjkwNyAxMzIuNjc1IDU1LjA5ODEgMTI3LjYxNCA1NS4wOTgxIDExNy44OTZDNTUuMDk4MSAxMDguMTc4IDU5LjY5MDcgMTAzLjExNyA2NS4zNTU4IDEwMy4xMTdDNzEuMDIxIDEwMy4xMTcgNzUuNjEzNSAxMDguMTc4IDc1LjYxMzUgMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPHBhdGggZD0iTTE0Mi4yODggMTE3Ljg5NkMxNDIuMjg4IDEyNy42MTQgMTM3LjY5NiAxMzIuNjc1IDEzMi4wMzEgMTMyLjY3NUMxMjYuMzY1IDEzMi42NzUgMTIxLjc3MyAxMjcuNjE0IDEyMS43NzMgMTE3Ljg5NkMxMjEuNzczIDEwOC4xNzggMTI2LjM2NSAxMDMuMTE3IDEzMi4wMzEgMTAzLjExN0MxMzcuNjk2IDEwMy4xMTcgMTQyLjI4OCAxMDguMTc4IDE0Mi4yODggMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPC9zdmc+Cg==",protocol:"uniswap_v2",slippage:!0,blockchains:["bsc"],bsc:{router:{address:"0x10ED43C718714eb63d5aA57B78B54704E256024E",api:kx.ROUTER},factory:{address:"0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73",api:kx.FACTORY},pair:{api:kx.PAIR}}};var kS=t=>new bx(Object.assign(IS,{scope:t,findPath:t=>kx.findPath({...t,exchange:IS}),pathExists:t=>kx.pathExists({...t,exchange:IS}),getAmounts:t=>kx.getAmounts({...t,exchange:IS}),getPrep:t=>kx.getPrep({...t,exchange:IS}),getTransaction:t=>kx.getTransaction({...t,exchange:IS})}));function LS(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const xS=({blockchain:t,exchange:e,path:n})=>{if(!n)return;let r=n.map(((e,r)=>e===Vp[t].currency.address&&n[r+1]!=Vp[t].wrapped.address&&n[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:e));return r[0]==Vp[t].currency.address&&r[1]==Vp[t].wrapped.address?r.splice(0,1):r[r.length-1]==Vp[t].currency.address&&r[r.length-2]==Vp[t].wrapped.address&&r.splice(r.length-1,1),r},SS=async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,block:o})=>{if((n=xS({blockchain:t,exchange:e,path:n})).length>2)throw"PancakeSwap V3 can only check paths for up to 2 tokens!";try{let o=(await Promise.all(e.fees.map((r=>_E({blockchain:Vp[t].name,address:e[t].factory.address,method:"getPool",api:e[t].factory.api,cache:3600,params:[n[0],n[1],r]}).then((e=>({blockchain:t,address:e,path:n,fee:r,token0:[...n].sort()[0],token1:[...n].sort()[1]}))).catch((()=>{})))))).filter(Boolean);return o=o.filter((e=>e.address!=Vp[t].zero)),o=(await Promise.all(o.map((async t=>{try{let n;return n=r?await(async({exchange:t,pool:e,inputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactInput",params:{path:oE(["address","uint24","address"],[e.path[0],e.fee,e.path[1]]),amountIn:n},cache:5})).amountOut)({exchange:e,pool:t,inputAmount:r}):await(async({exchange:t,pool:e,outputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactOutput",params:{path:oE(["address","uint24","address"],[e.path[1],e.fee,e.path[0]]),amountOut:n},cache:5})).amountIn)({exchange:e,pool:t,outputAmount:i}),{...t,amountIn:r||n,amountOut:i||n}}catch(t){}})))).filter(Boolean),r?o.sort(((t,e)=>e.amountOut.gt(t.amountOut)?1:-1))[0]:o.sort(((t,e)=>e.amountIn.lt(t.amountIn)?1:-1))[0]}catch(t){return}};let jS=({blockchain:t,exchange:e,path:n,pools:r,amountIn:i})=>r[r.length-1].amountOut,CS=async({blockchain:t,exchange:e,path:n,pools:r,amountOut:i,block:o})=>{if(void 0===o)return r[0].amountIn;{let n;2==r.length?n=oE(["address","uint24","address","uint24","address"],[r[1].path[1],r[1].fee,r[0].path[1],r[0].fee,r[0].path[0]]):1==r.length&&(n=oE(["address","uint24","address"],[r[0].path[1],r[0].fee,r[0].path[0]]));return(await _E({block:o,blockchain:t,address:e[t].quoter.address,api:e[t].quoter.api,method:"quoteExactOutput",params:{path:n,amountOut:i}})).amountIn}};var DS={findPath:async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if([n,r].includes(Vp[t].currency.address)&&[n,r].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let u,c=[];if(c=[await SS({exchange:e,blockchain:t,path:[n,r],amountIn:i||a,amountOut:o||s})],c.filter(Boolean).length&&(u=[n,r]),u||n==Vp[t].wrapped.address||r==Vp[t].wrapped.address||(c=[],o||s?(c.push(await SS({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await SS({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountOut:c[0].amountIn}))):(c.push(await SS({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountIn:i||a})),c.filter(Boolean).length&&c.push(await SS({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length&&(u=[n,Vp[t].wrapped.address,r])),!u){c=[];let l=(await Promise.all(Vp[t].stables.usd.map((async u=>{let c=[];if(o||s?(c.push(await SS({exchange:e,blockchain:t,path:[u,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await SS({exchange:e,blockchain:t,path:[n,u],amountOut:c[0].amountIn}))):(c.push(await SS({exchange:e,blockchain:t,path:[n,u],amountIn:i||a})),c.filter(Boolean).length&&c.push(await SS({exchange:e,blockchain:t,path:[u,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length)return[u,c]})))).filter(Boolean)[0];l&&(u=[n,l[0],r],c=l[1])}return LS([u,"optionalAccess",t=>t.length])&&u[0]==Vp[t].currency.address?u.splice(1,0,Vp[t].wrapped.address):LS([u,"optionalAccess",t=>t.length])&&u[u.length-1]==Vp[t].currency.address&&u.splice(u.length-1,0,Vp[t].wrapped.address),u||(c=[]),{path:u,pools:c,exchangePath:xS({blockchain:t,exchange:e,path:u})}},pathExists:async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>{try{return!!await SS({blockchain:t,exchange:e,path:n,amountIn:r||o,amountOut:i||a})}catch(t){return!1}},getAmounts:async({blockchain:t,exchange:e,path:n,pools:r,block:i,tokenIn:o,tokenOut:a,amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l})=>{if(s){if(null==(u=await CS({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:s,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(u){if(null==(s=await jS({blockchain:t,exchange:e,path:n,pools:r,amountIn:u,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}else if(l){if(null==(u=await CS({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:l,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(c){if(null==(s=await jS({blockchain:t,exchange:e,path:n,pools:r,amountIn:c,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}return{amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l}},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i,tokenOut:o})=>{if(n===Vp[e].currency.address)return;let a;a=o===Vp[e].currency.address?t[e].smartRouter.address:t[e].router.address;if((await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,a]})).lt(r)){return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[a,Vp[e].maxInt]}}}},getTransaction:async({blockchain:t,exchange:e,pools:n,path:r,amountIn:i,amountInMax:o,amountOut:a,amountOutMin:s,amountInInput:u,amountOutInput:c,amountInMaxInput:l,amountOutMinInput:h,account:d,inputTokenPushed:p})=>{const f={blockchain:t,from:d},m=Math.floor(Date.now()/1e3)+21600,y=xS({blockchain:t,exchange:e,path:r});if(r[r.length-1]===Vp[t].currency.address){f.to=e[t].smartRouter.address,f.api=e[t].smartRouter.api,f.method="multicall";const r=new Og(e[t].smartRouter.api);if(f.params={data:[]},2===y.length)u||h?f.params.data.push(r.encodeFunctionData("exactInputSingle",[{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:e[t].smartRouter.address,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}])):(c||l)&&f.params.data.push(r.encodeFunctionData("exactOutputSingle",[{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:e[t].smartRouter.address,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}]));else{const d=oE(["address","uint24","address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1],n[1].fee,n[1].path[1]]);u||h?f.params.data.push(r.encodeFunctionData("exactInput",[{path:d,recipient:e[t].smartRouter.address,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString()}])):(c||l)&&f.params.data.push(r.encodeFunctionData("exactOutput",[{path:d,recipient:e[t].smartRouter.address,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString()}]))}f.params.data.push(r.encodeFunctionData("unwrapWETH9",[(s||a).toString(),d]))}else if(f.to=e[t].router.address,f.api=e[t].router.api,r[0]===Vp[t].currency.address&&(f.value=(i||o).toString()),2===y.length)u||h?(f.method="exactInputSingle",f.params={params:{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:d,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}}):(c||l)&&(f.method="exactOutputSingle",f.params={params:{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:d,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}});else{const t=oE(["address","uint24","address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1],n[1].fee,n[1].path[1]]);u||h?(f.method="exactInput",f.params={params:{path:t,recipient:d,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString()}}):(c||l)&&(f.method="exactOutput",f.params={params:{path:t,recipient:d,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString()}})}return f},ROUTER:[{inputs:[{internalType:"address",name:"_deployer",type:"address"},{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"}],internalType:"struct ISwapRouter.ExactInputParams",name:"params",type:"tuple"}],name:"exactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct ISwapRouter.ExactInputSingleParams",name:"params",type:"tuple"}],name:"exactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"}],internalType:"struct ISwapRouter.ExactOutputParams",name:"params",type:"tuple"}],name:"exactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct ISwapRouter.ExactOutputSingleParams",name:"params",type:"tuple"}],name:"exactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"_data",type:"bytes"}],name:"pancakeV3SwapCallback",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"refundETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowed",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowedIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"sweepToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"sweepTokenWithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"unwrapWETH9",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"unwrapWETH9WithFee",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],SMART_ROUTER:[{inputs:[{internalType:"address",name:"_factoryV2",type:"address"},{internalType:"address",name:"_deployer",type:"address"},{internalType:"address",name:"_factoryV3",type:"address"},{internalType:"address",name:"_positionManager",type:"address"},{internalType:"address",name:"_stableFactory",type:"address"},{internalType:"address",name:"_stableInfo",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"factory",type:"address"},{indexed:!0,internalType:"address",name:"info",type:"address"}],name:"SetStableSwap",type:"event"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveMax",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveMaxMinusOne",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveZeroThenMax",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveZeroThenMaxMinusOne",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes",name:"data",type:"bytes"}],name:"callPositionManager",outputs:[{internalType:"bytes",name:"result",type:"bytes"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes[]",name:"paths",type:"bytes[]"},{internalType:"uint128[]",name:"amounts",type:"uint128[]"},{internalType:"uint24",name:"maximumTickDivergence",type:"uint24"},{internalType:"uint32",name:"secondsAgo",type:"uint32"}],name:"checkOracleSlippage",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint24",name:"maximumTickDivergence",type:"uint24"},{internalType:"uint32",name:"secondsAgo",type:"uint32"}],name:"checkOracleSlippage",outputs:[],stateMutability:"view",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"}],internalType:"struct IV3SwapRouter.ExactInputParams",name:"params",type:"tuple"}],name:"exactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IV3SwapRouter.ExactInputSingleParams",name:"params",type:"tuple"}],name:"exactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"path",type:"address[]"},{internalType:"uint256[]",name:"flag",type:"uint256[]"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address",name:"to",type:"address"}],name:"exactInputStableSwap",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"}],internalType:"struct IV3SwapRouter.ExactOutputParams",name:"params",type:"tuple"}],name:"exactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IV3SwapRouter.ExactOutputSingleParams",name:"params",type:"tuple"}],name:"exactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"path",type:"address[]"},{internalType:"uint256[]",name:"flag",type:"uint256[]"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address",name:"to",type:"address"}],name:"exactOutputStableSwap",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factoryV2",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"getApprovalType",outputs:[{internalType:"enum IApproveAndCall.ApprovalType",name:"",type:"uint8"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"token0",type:"address"},{internalType:"address",name:"token1",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"amount0Min",type:"uint256"},{internalType:"uint256",name:"amount1Min",type:"uint256"}],internalType:"struct IApproveAndCall.IncreaseLiquidityParams",name:"params",type:"tuple"}],name:"increaseLiquidity",outputs:[{internalType:"bytes",name:"result",type:"bytes"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"token0",type:"address"},{internalType:"address",name:"token1",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint256",name:"amount0Min",type:"uint256"},{internalType:"uint256",name:"amount1Min",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],internalType:"struct IApproveAndCall.MintParams",name:"params",type:"tuple"}],name:"mint",outputs:[{internalType:"bytes",name:"result",type:"bytes"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"previousBlockhash",type:"bytes32"},{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"_data",type:"bytes"}],name:"pancakeV3SwapCallback",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"positionManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"pull",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"refundETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowed",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowedIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_info",type:"address"}],name:"setStableSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stableSwapFactory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"stableSwapInfo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"}],name:"swapExactTokensForTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"}],name:"swapTokensForExactTokens",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"sweepToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"}],name:"sweepToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"sweepTokenWithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"sweepTokenWithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"unwrapWETH9",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"unwrapWETH9WithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"unwrapWETH9WithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"value",type:"uint256"}],name:"wrapETH",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[{internalType:"address",name:"_poolDeployer",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!0,internalType:"int24",name:"tickSpacing",type:"int24"}],name:"FeeAmountEnabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"bool",name:"whitelistRequested",type:"bool"},{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"FeeAmountExtraInfoUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"int24",name:"tickSpacing",type:"int24"},{indexed:!1,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"lmPoolDeployer",type:"address"}],name:"SetLmPoolDeployer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"bool",name:"verified",type:"bool"}],name:"WhiteListAdded",type:"event"},{inputs:[{internalType:"address",name:"pool",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"}],name:"createPool",outputs:[{internalType:"address",name:"pool",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],name:"enableFeeAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"",type:"uint24"}],name:"feeAmountTickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"",type:"uint24"}],name:"feeAmountTickSpacingExtraInfo",outputs:[{internalType:"bool",name:"whitelistRequested",type:"bool"},{internalType:"bool",name:"enabled",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint24",name:"",type:"uint24"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"lmPoolDeployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"poolDeployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"bool",name:"whitelistRequested",type:"bool"},{internalType:"bool",name:"enabled",type:"bool"}],name:"setFeeAmountExtraInfo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"},{internalType:"uint32",name:"feeProtocol0",type:"uint32"},{internalType:"uint32",name:"feeProtocol1",type:"uint32"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"},{internalType:"address",name:"lmPool",type:"address"}],name:"setLmPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_lmPoolDeployer",type:"address"}],name:"setLmPoolDeployer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_owner",type:"address"}],name:"setOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"bool",name:"verified",type:"bool"}],name:"setWhiteListAddress",outputs:[],stateMutability:"nonpayable",type:"function"}],POOL:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"feeProtocol0Old",type:"uint32"},{indexed:!1,internalType:"uint32",name:"feeProtocol1Old",type:"uint32"},{indexed:!1,internalType:"uint32",name:"feeProtocol0New",type:"uint32"},{indexed:!1,internalType:"uint32",name:"feeProtocol1New",type:"uint32"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"addr",type:"address"}],name:"SetLmPoolEvent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"},{indexed:!1,internalType:"uint128",name:"protocolFeesToken0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"protocolFeesToken1",type:"uint128"}],name:"Swap",type:"event"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"lmPool",outputs:[{internalType:"contract IPancakeV3LmPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"feeProtocol0",type:"uint32"},{internalType:"uint32",name:"feeProtocol1",type:"uint32"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_lmPool",type:"address"}],name:"setLmPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint32",name:"feeProtocol",type:"uint32"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int16",name:"",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],QUOTER:[{inputs:[{internalType:"address",name:"_deployer",type:"address"},{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"path",type:"bytes"}],name:"pancakeV3SwapCallback",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"quoteExactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactInputSingleParams",name:"params",type:"tuple"}],name:"quoteExactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"quoteExactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactOutputSingleParams",name:"params",type:"tuple"}],name:"quoteExactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"}]};const OS={name:"pancakeswap_v3",label:"PancakeSwap v3",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTk4IiBoZWlnaHQ9IjE5OSIgdmlld0JveD0iMCAwIDE5OCAxOTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguNTUyIDE5OC42MDdDNjkuMDYxMyAxOTguNTg1IDQ1LjMwNiAxOTEuNTggMjguNzA3OSAxNzguOTk4QzExLjkxMDggMTY2LjI2NSAzIDE0OC4xOTUgMyAxMjcuNzQ4QzMgMTA4LjA0NyAxMS44OTEzIDkzLjg0MTEgMjEuOTUxNyA4NC4yMzg1QzI5LjgzNTkgNzYuNzEzMiAzOC41MzYzIDcxLjg5MzYgNDQuNTk0NSA2OS4xMjEzQzQzLjIyNDUgNjQuOTU5NCA0MS41MTUzIDU5LjUxMDggMzkuOTg2MSA1My44ODMyQzM3LjkzOTkgNDYuMzUyNyAzNS45MzI1IDM3LjUxNzQgMzUuOTMyNSAzMS4wNDI5QzM1LjkzMjUgMjMuMzc5NSAzNy42MjA0IDE1LjY4MzMgNDIuMTcxNCA5LjcwMzA2QzQ2Ljk3OTcgMy4zODQ3NiA1NC4yMTgyIDAgNjIuOTI2NCAwQzY5LjczMjIgMCA3NS41MTAzIDIuNDk5MDMgODAuMDMzOSA2LjgxMDExQzg0LjM1NzkgMTAuOTMwOSA4Ny4yMzU3IDE2LjQwMzQgODkuMjIyNyAyMi4xMDgyQzkyLjcxNDMgMzIuMTMyNSA5NC4wNzM4IDQ0LjcyNjQgOTQuNDU1MSA1Ny4yOTQ1SDEwMi43OTZDMTAzLjE3OCA0NC43MjY0IDEwNC41MzcgMzIuMTMyNSAxMDguMDI5IDIyLjEwODJDMTEwLjAxNiAxNi40MDM0IDExMi44OTQgMTAuOTMwOSAxMTcuMjE4IDYuODEwMTFDMTIxLjc0MSAyLjQ5OTAzIDEyNy41MTkgMCAxMzQuMzI1IDBDMTQzLjAzMyAwIDE1MC4yNzIgMy4zODQ3NiAxNTUuMDggOS43MDMwNkMxNTkuNjMxIDE1LjY4MzMgMTYxLjMxOSAyMy4zNzk1IDE2MS4zMTkgMzEuMDQyOUMxNjEuMzE5IDM3LjUxNzQgMTU5LjMxMiA0Ni4zNTI3IDE1Ny4yNjUgNTMuODgzMkMxNTUuNzM2IDU5LjUxMDggMTU0LjAyNyA2NC45NTk0IDE1Mi42NTcgNjkuMTIxM0MxNTguNzE1IDcxLjg5MzYgMTY3LjQxNiA3Ni43MTMyIDE3NS4zIDg0LjIzODVDMTg1LjM2IDkzLjg0MTEgMTk0LjI1MiAxMDguMDQ3IDE5NC4yNTIgMTI3Ljc0OEMxOTQuMjUyIDE0OC4xOTUgMTg1LjM0MSAxNjYuMjY1IDE2OC41NDQgMTc4Ljk5OEMxNTEuOTQ1IDE5MS41OCAxMjguMTkgMTk4LjU4NSA5OC42OTk2IDE5OC42MDdIOTguNTUyWiIgZmlsbD0iIzYzMzAwMSIvPgo8cGF0aCBkPSJNNjIuOTI2MiA3LjI4ODMzQzUwLjE3MTYgNy4yODgzMyA0NC4zMDA0IDE2LjgwMzcgNDQuMzAwNCAyOS45NjMyQzQ0LjMwMDQgNDAuNDIzMSA1MS4xMjIyIDYxLjM3MTUgNTMuOTIxMiA2OS41MjYzQzU0LjU1MDggNzEuMzYwNSA1My41NjE2IDczLjM3MDEgNTEuNzU3NCA3NC4wODE0QzQxLjUzNTEgNzguMTEyMSAxMS4zNjc5IDkyLjg3IDExLjM2NzkgMTI2LjY2OUMxMS4zNjc5IDE2Mi4yNzIgNDIuMDI0NiAxODkuMTE3IDk4LjU1ODEgMTg5LjE2Qzk4LjU4MDYgMTg5LjE2IDk4LjYwMzEgMTg5LjE1OSA5OC42MjU2IDE4OS4xNTlDOTguNjQ4MSAxODkuMTU5IDk4LjY3MDYgMTg5LjE2IDk4LjY5MzEgMTg5LjE2QzE1NS4yMjcgMTg5LjExNyAxODUuODgzIDE2Mi4yNzIgMTg1Ljg4MyAxMjYuNjY5QzE4NS44ODMgOTIuODcgMTU1LjcxNiA3OC4xMTIxIDE0NS40OTQgNzQuMDgxNEMxNDMuNjkgNzMuMzcwMSAxNDIuNyA3MS4zNjA1IDE0My4zMyA2OS41MjYzQzE0Ni4xMjkgNjEuMzcxNSAxNTIuOTUxIDQwLjQyMzEgMTUyLjk1MSAyOS45NjMyQzE1Mi45NTEgMTYuODAzNyAxNDcuMDggNy4yODgzMyAxMzQuMzI1IDcuMjg4MzNDMTE1Ljk2NSA3LjI4ODMzIDExMS4zODkgMzMuMjk1NSAxMTEuMDYyIDYxLjIwNzVDMTExLjA0IDYzLjA3MDkgMTA5LjUzNCA2NC41ODI4IDEwNy42NyA2NC41ODI4SDg5LjU4MDdDODcuNzE3MiA2NC41ODI4IDg2LjIxMDggNjMuMDcwOSA4Ni4xODkgNjEuMjA3NUM4NS44NjI2IDMzLjI5NTUgODEuMjg2IDcuMjg4MzMgNjIuOTI2MiA3LjI4ODMzWiIgZmlsbD0iI0QxODg0RiIvPgo8cGF0aCBkPSJNOTguNjkzMSAxNzcuNzU1QzU3LjE1NTEgMTc3Ljc1NSAxMS40Mzk3IDE1NS41MiAxMS4zNjgxIDEyNi43MzdDMTEuMzY4IDEyNi43ODEgMTEuMzY3OSAxMjYuODI2IDExLjM2NzkgMTI2Ljg3MUMxMS4zNjc5IDE2Mi41MDMgNDIuMDczNCAxODkuMzYyIDk4LjY5MzEgMTg5LjM2MkMxNTUuMzEzIDE4OS4zNjIgMTg2LjAxOCAxNjIuNTAzIDE4Ni4wMTggMTI2Ljg3MUMxODYuMDE4IDEyNi44MjYgMTg2LjAxOCAxMjYuNzgxIDE4Ni4wMTggMTI2LjczN0MxODUuOTQ2IDE1NS41MiAxNDAuMjMxIDE3Ny43NTUgOTguNjkzMSAxNzcuNzU1WiIgZmlsbD0iI0ZFREM5MCIvPgo8cGF0aCBkPSJNNzUuNjEzNSAxMTcuODk2Qzc1LjYxMzUgMTI3LjYxNCA3MS4wMjEgMTMyLjY3NSA2NS4zNTU4IDEzMi42NzVDNTkuNjkwNyAxMzIuNjc1IDU1LjA5ODEgMTI3LjYxNCA1NS4wOTgxIDExNy44OTZDNTUuMDk4MSAxMDguMTc4IDU5LjY5MDcgMTAzLjExNyA2NS4zNTU4IDEwMy4xMTdDNzEuMDIxIDEwMy4xMTcgNzUuNjEzNSAxMDguMTc4IDc1LjYxMzUgMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPHBhdGggZD0iTTE0Mi4yODggMTE3Ljg5NkMxNDIuMjg4IDEyNy42MTQgMTM3LjY5NiAxMzIuNjc1IDEzMi4wMzEgMTMyLjY3NUMxMjYuMzY1IDEzMi42NzUgMTIxLjc3MyAxMjcuNjE0IDEyMS43NzMgMTE3Ljg5NkMxMjEuNzczIDEwOC4xNzggMTI2LjM2NSAxMDMuMTE3IDEzMi4wMzEgMTAzLjExN0MxMzcuNjk2IDEwMy4xMTcgMTQyLjI4OCAxMDguMTc4IDE0Mi4yODggMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPC9zdmc+Cg==",protocol:"pancakeswap_v3",slippage:!0,fees:[100,500,2500,1e4],blockchains:["bsc"],bsc:{router:{address:"0x1b81D678ffb9C0263b24A97847620C99d213eB14",api:DS.ROUTER},smartRouter:{address:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",api:DS.SMART_ROUTER},factory:{address:"0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865",api:DS.FACTORY},pair:{api:DS.POOL},quoter:{address:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",api:DS.QUOTER}}};var zS=t=>new bx(Object.assign(OS,{scope:t,findPath:t=>DS.findPath({...t,exchange:OS}),pathExists:t=>DS.pathExists({...t,exchange:OS}),getAmounts:t=>DS.getAmounts({...t,exchange:OS}),getPrep:t=>DS.getPrep({...t,exchange:OS}),getTransaction:t=>DS.getTransaction({...t,exchange:OS})}));const _S={name:"quickswap",label:"QuickSwap",logo:"data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNzAyLjQ1IDcwMi40NyI+PGRlZnM+PGNsaXBQYXRoIGlkPSJjbGlwLXBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIj48cmVjdCB3aWR0aD0iNzUwIiBoZWlnaHQ9Ijc1MCIgZmlsbD0ibm9uZSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwLXBhdGgpIj48cGF0aCBkPSJNMzU0Ljc0LDI0LjM3YTM1MS4yNywzNTEuMjcsMCwwLDEsMzYzLjc0LDI3NywzNTQsMzU0LDAsMCwxLDEuMjMsMTQxLjI2QTM1MS43NiwzNTEuNzYsMCwwLDEsNTEwLjEyLDY5OS4zYy03My43NywzMS0xNTguMjUsMzUuMzUtMjM0LjkxLDEyLjU0QTM1MiwzNTIsMCwwLDEsNDYuNTEsNDk5LjU2Yy0yOC03My40NS0zMC4xNi0xNTYuMzgtNi4yNC0yMzEuMjVBMzUwLjg4LDM1MC44OCwwLDAsMSwzNTQuNzQsMjQuMzciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTE1OC44MSwzNDkuNThjMS4zOSw2LjQxLDIuMjMsMTIuOTIsMy42MSwxOS4zNS44NSwzLjkzLDIuMTMsMyw0LjE1LDEuMjgsMy44Ny0zLjI1LDcuNTktNi42OSwxMS45NC05LjMxLDEuMjMuMjQsMS44NiwxLjIyLDIuNTMsMi4xLDExLjM5LDE0Ljg3LDI2LjUzLDI0LDQ0LjM3LDI4Ljk0YTE0Ny4yMywxNDcuMjMsMCwwLDAsMjUuMTcsNC42Nyw0Mi42OCw0Mi42OCwwLDAsMS02LjYxLTkuOTVjLTIuODUtNi40MS0xLjg1LTEyLjE1LDIuOTUtMTcuMjIsNS44Ny02LjE5LDEzLjYyLTguNzYsMjEuNDgtMTAuOCwxNi40OC00LjMsMzMuMjctNC43Myw1MC4xOC0zLjUzQTIwMi4xMSwyMDIuMTEsMCwwLDEsMzU4Ljc1LDM2MmMxMSwzLjA2LDIxLjcyLDYuNzMsMzEuNDQsMTIuODgsMS4zNiwxLjA5LDIuMywyLjYsMy42MSwzLjc0LDEyLjQ5LDEzLjQxLDE5Ljc4LDI5LjI1LDIwLjI4LDQ3LjU1LjM0LDEyLjY1LTMuMTYsMjQuNzItOS41LDM1LjgyLTExLjQyLDIwLTI4LjA5LDM0LjU2LTQ4LDQ1LjcxQTE3MC41LDE3MC41LDAsMCwxLDI5MSw1MjguNDJjLTQxLjI0LDQuNDctNzkuNDUtNC40Ny0xMTQuNTktMjYuMzYtMjkuMjEtMTguMTktNTEuNjUtNDMuMDgtNzAtNzEuOTJhMzM5LjU3LDMzOS41NywwLDAsMS0yMi41Mi00Mi43NWMtLjgxLTEuOC0xLTMuODEtMS44Mi01LjI5LjUyLDEuNzUsMS40OSwzLjczLS40Myw1LjYtLjU4LTcuNDUuMDgtMTQuOS40Ny0yMi4zMWEyODcuMTMsMjg3LjEzLDAsMCwxLDkuNDgtNjAuNTRBMjkyLjkxLDI5Mi45MSwwLDAsMSwyNjYuMDYsMTA5LjA5LDI4Ny4yLDI4Ny4yLDAsMCwxLDM0Ni41OSw4OS45YzQzLjU3LTQsODUuNzksMS43MywxMjcsMTYuMzQtNi4yNywxMS44OS00Miw0My43Mi02OS44LDYyLjE1YTk0LjExLDk0LjExLDAsMCwwLTUuNDQtMjMuNTFjLS4xNC0yLDEuNjYtMi42NSwyLjc4LTMuNjFxOC42Ny03LjQ2LDE3LjQzLTE0Ljc3YTE3LjE0LDE3LjE0LDAsMCwwLDEuNjktMS40OWMuNjYtLjcxLDEuNzctMS4zLDEuNTQtMi40cy0xLjU1LTEuMTUtMi40Ny0xLjNhNDYuODIsNDYuODIsMCwwLDAtOC4xNy0xYy0zLjgxLS40NS03LjU2LTEuMy0xMS40LTEuMzgtMi45NS0uMTgtNS44NS0uOTMtOC44My0uNjlhMjguMjIsMjguMjIsMCwwLDEtNC41LS4zMmMtMi41LS43OS01LjA3LS40NC03LjYxLS40My0xLjUyLDAtMy0uMTEtNC41NiwwLTQuMzUuMjUtOC43My0uNDgtMTMuMDcuMzRhMTIuODcsMTIuODcsMCwwLDEtMy4yMS4zMmMtMS4yNiwwLTIuNTEuMDYtMy43NywwYTEyLjM1LDEyLjM1LDAsMCwwLTQuODcuNDdjLTQuNTkuNDEtOS4xOS43OC0xMy43MywxLjYxLTUuNDgsMS4xNi0xMS4wOSwxLjQ0LTE2LjUzLDIuNzktNSwxLjMtMTAuMTMsMi0xNSwzLjc0LTYuNTEsMS43OS0xMi45NSwzLjg0LTE5LjM1LDYtOS4zNCwzLjcxLTE4LjgyLDcuMS0yNy43MSwxMS44NmEyNDguNzQsMjQ4Ljc0LDAsMCwwLTU1LjY2LDM2Ljk0QTI2Ni41NSwyNjYuNTUsMCwwLDAsMTU5LjY4LDIyN2EyNTQuODcsMjU0Ljg3LDAsMCwwLTE2LjU0LDI2LjE2Yy0zLjE3LDUuOS02LjIyLDExLjg1LTksMTgtMiw0LjcxLTQuNDIsOS4yNy02LDE0LjE4LTIsNC45LTMuNjQsOS45Mi01LjIyLDE1LTEuODgsNS4wNi0zLDEwLjM1LTQuNDUsMTUuNTMtLjYzLDItMSw0LjExLTEuNTMsNi4xOC0uNjMsMi40OS0xLDUtMS40Nyw3LjU1LS43Nyw0LjI1LTEuNDgsOC41LTIuMDksMTIuNzhhMTE4LjY0LDExOC42NCwwLDAsMC0xLjU3LDEzLjI5Yy0uNzQsMi45NC0uMiw2LS43NCw5LS44MiwzLjY5LS4yOCw3LjQ1LS41MiwxMS4xNi0uMTEsMi42MS0uMTYsNS4yMy0uMDksNy44NSwwLDEuMDctLjQ5LDIuNTcuNjQsMy4wOSwxLjI5LjYsMi4yMy0uNzcsMy4xNi0xLjUzLDMuMTgtMi42LDYuMjktNS4yOSw5LjQtOCwxMC40Ny05LDIxLjA3LTE3Ljg4LDMxLjU4LTI2Ljg1LjkxLS43NywxLjktMi43OSwzLjUyLS43MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0MTg5YzkiLz48cGF0aCBkPSJNMzkwLjExLDM3NS43OGMtMTIuMzctNy4zNS0yNS44OS0xMS42My0zOS43Ny0xNC45MmExOTcuMjUsMTk3LjI1LDAsMCwwLTU1LjY4LTUuMWMtMTMuMjEuNjYtMjYuMzEsMi41LTM4LjQ4LDguM2EzMi42MSwzMi42MSwwLDAsMC00LjIxLDIuNDNjLTkuODUsNi42LTExLjM1LDE1LjQtNC4yMywyNC45MSwxLjQ4LDIsMy4xMiwzLjgxLDUuMSw2LjIyLTYuMzksMC0xMi4wNS0xLjE5LTE3LjY5LTIuMzEtMTUuMTItMy0yOS4zMi04LjI0LTQxLjUtMTgtNS44Ni00LjY4LTExLjIyLTkuOTMtMTUuMTQtMTYuNDUsMS42LTIuNjEsNC4yOC0zLjgzLDYuNzgtNS4yNyw0LjgyLTIsOS4xOS00LjkxLDE0LTcuMDlhMjA3LjU1LDIwNy41NSwwLDAsMSw2Ny40LTE4YzkuMzItLjg3LDE4LjY1LTEuNzYsMjgtMS40MUEzMTEuMzgsMzExLjM4LDAsMCwxLDM3NiwzNDMuMjVjNi44LDIuMTIsMTMuNTIsNC40NSwyMC41OSw2Ljg0LDAtMi0xLjE0LTMuMTktMS45LTQuNDhBOTYuMTgsOTYuMTgsMCwwLDAsMzg1LDMzMS44OGMtMS4zMy0xLjU2LTMuMTgtMi45My0zLjE0LTUuMzMsMy43My44NSw3LjQ2LDEuNjgsMTEuMTgsMi41NiwxLC4yMywyLjE3LjgzLDIuODEsMCwuODUtMS4wOC0uNDMtMi0xLTIuODQtNS40OS04LjE5LTEyLjMzLTE1LjE3LTE5LjY3LTIxLjY4LDMuODktMi4yNiw3Ljg5LS40MiwxMS42OC4wNiwzOC44Nyw1LDc0LjI5LDE4LjgxLDEwNS4xOCw0Myw0MC45LDMyLjA5LDY3LjMzLDczLjU0LDc4LjQ3LDEyNC41MUExODAuNTQsMTgwLjU0LDAsMCwxLDU3My44Nyw1MjRjLTIuMTksMzAuMTEtMTEuNjUsNTcuOS0yOS40NSw4Mi41OC0xLjE3LDEuNjItMi43NSwyLjkxLTMuNjEsNC43Ni00LDYtMTAsMTAuMDgtMTUuNDQsMTQuNTItMjkuNTUsMjQtNjQsMzYuNDYtMTAxLjE0LDQyLjI4YTMxMC4zNCwzMTAuMzQsMCwwLDEtODcuMzEsMS41NCwyODguMTcsMjg4LjE3LDAsMCwxLTEyNy4zOS00OC4xNGMtOS4yNy02LjI5LTE4LjM2LTEyLjg1LTI2LjUxLTIwLjYyYS42NS42NSwwLDAsMSwwLTFjMS43NC0uNjksMi44NC41Nyw0LDEuNDNhMTg5LjA4LDE4OS4wOCwwLDAsMCw2NSwzMS41NiwyMjguNDYsMjI4LjQ2LDAsMCwwLDIzLjg3LDQuNzVjMS44Mi42NiwzLjc1LjM1LDUuNjIuNjZhNy41NSw3LjU1LDAsMCwxLDEuMTMuMjNjMTguMjQsMi4xNiwzNi4zNy44OSw1NC4zNi0yLjI4LDM5LjU0LTcsNzQuNjYtMjMuNTUsMTA0Ljc1LTUwLjE1LDIwLjUtMTguMTIsMzYuNjgtMzkuNTMsNDUuMjQtNjUuOTVzNy4zNS01Mi4xLTQuNjctNzcuNDhjLTIuNDcsMTEuMzgtOC40NCwyMC44LTE1LjkxLDI5LjM4YTEwNi4wOSwxMDYuMDksMCwwLDEtMjYuMDcsMjEuMTljLTEuMTQuNjYtMi40LDEuOTEtMy43MS45LTEuMTMtLjg2LS40NS0yLjM3LS4xLTMuNTFhMTM5LjY0LDEzOS42NCwwLDAsMCw0Ljk0LTI0LjJjMy41LTM0LjUxLTkuODItNjEuMzctMzcuMy04MS43NGExMTkuOCwxMTkuOCwwLDAsMC0xNC4wNi05IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzI2MmY3MSIvPjxwYXRoIGQ9Ik0yNzYuMDgsNjM4LjQxYTE1MS4xNiwxNTEuMTYsMCwwLDEtMjkuODYtNi4xQTE5OC41MywxOTguNTMsMCwwLDEsMTk0LjM1LDYwOGMtMy44My0yLjUxLTcuMDctNS44Ni0xMS4yNC03Ljg5LTIuMzktLjM0LTMuMzktMi42OC01LjMtMy43LTQwLjM4LTM1LjktNjgtODAtODMuODMtMTMxLjQ4QTI4MC41NCwyODAuNTQsMCwwLDEsODEuNjMsMzg3LjdjLjEtMiwuMi0zLjkzLjM2LTcsMiw0LjM2LDMuNDgsNy44Miw1LjA1LDExLjI2LDE0LjUzLDMxLjg2LDMzLjEzLDYwLjkzLDU4Ljc0LDg1LjEyQzE3Myw1MDIuODIsMjA0LjY4LDUyMCwyNDIsNTI2YzQzLjcxLDcuMTEsODQuNjEtLjUxLDEyMi4yMi0yNC4wNiwxOC43NS0xMS43NSwzNC4xNC0yNi45NCw0My00Ny42NSwxMC43Mi0yNS4xMSw2LjY4LTQ4LjQ0LTkuNjUtNjkuOTUtMS40My0xLjg4LTIuOTUtMy42OS00LjQzLTUuNTQsMS45NC0xLjY2LDMsLjI2LDQuMDcsMS4xOGE4My4yMiw4My4yMiwwLDAsMSwyMi42LDI5LjksODgsODgsMCwwLDEsNy44NSwzNS4xOSw3OS43NSw3OS43NSwwLDAsMS04LDM1Ljg3LDUuMzksNS4zOSwwLDAsMCwzLjI0LTEuMTcsOTguMzQsOTguMzQsMCwwLDAsMTQuNjUtMTAuMzVjMS40Mi0xLjIzLDIuNjctMy4wOCw1LTIuOGExNjUuMywxNjUuMywwLDAsMS02LjA5LDI3Ljc1LDEzMS43NCwxMzEuNzQsMCwwLDAsMTcuMjctMTEuNDhjNC4zMy0zLjM4LDcuODMtNy42MiwxMi4wOC0xMS4wNiwxLjgxLjc3LDEuODEsMi41NiwyLjIzLDQuMDgsNi45MiwyNSwxLjkxLDQ4LjI4LTEwLjQyLDcwLjMtMTUsMjYuNy0zNyw0Ni41Ny02Mi42Miw2Mi42NWEyMTMuMzMsMjEzLjMzLDAsMCwxLTY3LjI3LDI3LjU1LDE0Mi4yLDE0Mi4yLDAsMCwxLTQ1LjY3LDIuNjloMGMtMS45LTEtNC4wNy4xOS02LS43MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMxNjFmNDIiLz48cGF0aCBkPSJNNjU0LjE3LDQ1My4wN2EyMTIsMjEyLDAsMCwwLTIwLjc3LTgyLjM1QTIxOC45LDIxOC45LDAsMCwwLDYwMywzMjRjLTEwLjktMTIuOTEtMjMuNDItMjMuOTMtMzYuNTYtMzQuMzgsMS4yMy0xLjIxLDIuNzYtMSw0LjI0LS44YTIzNi4yOCwyMzYuMjgsMCwwLDEsNTMuNzksMTIuNzhBODAuMiw4MC4yLDAsMCwxLDYzNywzMDcuNDNhNDAuMzgsNDAuMzgsMCwwLDEsNC4xNiwyLjQ0Yy4zNC4xOS41My42OSwxLC41OGExLjI3LDEuMjcsMCwwLDEtLjIxLTEuMzdjLTExLjg0LTE1LjQyLTI2LjE1LTI4LjI4LTQxLjE3LTQwLjVhMzAyLDMwMiwwLDAsMC01OC4xOC0zNi45LDI4Ny42NCwyODcuNjQsMCwwLDAtOTEuNTctMjcuNDVjLTIuODMtLjM1LTUuNzUsMC04LjUxLTEtLjI0LTEuODksMS4zNS0yLjUyLDIuNDUtMy40NCwxOC42Ny0xNS41NSwzMy42OS0zNCw0NC4yOC01NS45NGExNTcuMSwxNTcuMSwwLDAsMCw4LjE0LTIwLjUzYy42NC0yLDEtNC4xNywzLTUuNDRhMjg4LjE2LDI4OC4xNiwwLDAsMSw4OC40Nyw2NiwyOTIuMSwyOTIuMSwwLDAsMSw2Ni42NCwyNzBjLS44NC40Ni0xLS4yNi0xLjM0LS43NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0MTg5YzkiLz48cGF0aCBkPSJNNTQwLjgxLDYxMS4zN2MwLTIuOTQsMi4zNC00LjYsMy43OS02LjY2LDEzLjY2LTE5LjUxLDIyLTQxLjEyLDI2LjMxLTY0LjQ4LDIuNjctMTQuNDcsMi45LTI5LjA4LDItNDMuNTctMS40Ny0yMi4zNC03LjE4LTQzLjgzLTE2LjE5LTY0LjQyYTIxMi4yNSwyMTIuMjUsMCwwLDAtMjQuNzMtNDIuNTcsMjIxLjI0LDIyMS4yNCwwLDAsMC0zNi4xNi0zNy42MkEyMDcuNTYsMjA3LjU2LDAsMCwwLDQyNS4xOSwzMTRhMTk4LjEsMTk4LjEsMCwwLDAtNDIuMjUtOC42OWMtMi41OS0uMjMtNS4xNS0uODUtNy43OC0uNjktOS4xMy02LjczLTE4LjM5LTEzLjI0LTI4Ljc5LTE3Ljk0LDAtLjMzLDAtLjY3LjA3LTEsMy43NCwwLDcuNDkuMDYsMTEuMjMsMCw1Mi40My0uOTQsMTAwLjc1LDExLjkxLDE0Myw0My44NEM1NDQuNCwzNjIuNTksNTcxLjc0LDQwNi4zMiw1ODIsNDYwLjNjOC43Myw0Ni4wNSwyLDg5LjU0LTIzLjU2LDEyOS40NC01LDcuODUtMTAuNTMsMTUuNDEtMTcuNjEsMjEuNjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjMTYxZjQyIi8+PHBhdGggZD0iTTUwMC40LDExNy45MWMtNS4yNSwxNi4wNS0xMS44NCwzMS40Ny0yMS4yNyw0NS41OWExNzIuNzgsMTcyLjc4LDAsMCwxLTM0LjQyLDM3LjczYy0uNzYuNjMtMS40NSwxLjM1LTIuMTcsMi00LjU4LDIuMzMtOC4zNSw1Ljg1LTEyLjU5LDguNjhhMjY3LjY4LDI2Ny42OCwwLDAsMS00OS4zOSwyNS41Myw4LjA5LDguMDksMCwwLDEtMS4yOS4zMmMtLjc2LTEuMTIuMTQtMS41My42LTIsOS44Mi05LjM1LDE1LjkxLTIwLjkyLDIwLTMzLjY2YTUsNSwwLDAsMSwzLjE3LTMuNjVjMzAuNTEtMTIuMDgsNTQuODYtMzIuMTUsNzQuOC01Ny45LDEuODEtMi4zNCwzLjU4LTQuNzEsNS44Mi03LjY2LTYuMTctLjEyLTEwLjksMy0xNi4xMiwzLjgyLTEsLjA2LTIuMjcuODgtMi41LTFhMjE1LjI3LDIxNS4yNywwLDAsMCw0MS44NC03NS42NWMuNTUtMS43OCwwLTQuMjMsMi40OC01LjEzYS40NC40NCwwLDAsMSwuMjUuNDVjMCwuMTgtLjA4LjI2LS4xMy4yNmEyMzAuNDksMjMwLjQ5LDAsMCwxLTguMzUsNTguNTYsMzYuODgsMzYuODgsMCwwLDAtLjY5LDMuNjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjMTYxZjQyIi8+PHBhdGggZD0iTTM4MS44MiwzMjYuNTRhMTIwLDEyMCwwLDAsMSwxNi4wNiwyMi40Yy40My43OSwxLjU0LDEuNjguNTUsMi42MS0uNzUuNy0xLjYyLS4xNi0yLjQxLS40NmEzNDksMzQ5LDAsMCwwLTYyLjU2LTE3Yy0xMC43NS0xLjg1LTIxLjY2LTIuNjYtMzIuNTgtMy40NWExOTQuMDksMTk0LjA5LDAsMCwwLTI5LjQ1LjQyYy0yMi40MiwxLjgtNDQuMjQsNi41OS02NSwxNS41Ni02LjQsMi43Ny0xMi45NCw1LjI1LTE4Ljg5LDktLjY4LjQzLTEuNDksMS4xMy0yLjI3LjA2YTE5OS41OSwxOTkuNTksMCwwLDEsNTkuMi0yOC40MWMyOS4xNS04LjcsNTguOTMtMTAuODQsODkuMTUtOC40NmEzMjguNDIsMzI4LjQyLDAsMCwxLDQ1Ljc0LDYuOTUsMjEuOTIsMjEuOTIsMCwwLDEsMi40NC44MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMxNjFmNDIiLz48cGF0aCBkPSJNMzc0LjMyLDExNi4zOGg0LjVjMi40MiwxLDUuMDctLjI4LDcuNS43NGg0LjQ5Yy4zOCwyLjE3LTEuNDEsMy4wOC0yLjY1LDQuMTMtMjAuNzgsMTcuNTYtNDEuNDEsMzUuMjktNjIuMiw1Mi44My02Ljg3LDUuNzktMTMuNjgsMTEuNjUtMjAuNTQsMTcuNDVhNi4xNCw2LjE0LDAsMCwwLTIuMzUsMi44M2MtOSwzLjM3LTE3LjM2LDcuNi0yNCwxNC45NC0zLjEzLDMuNDgtNS4xOCw3LjUtNy40NCwxMS40Ni02LjE3LDQtMTEuMzYsOS4yNi0xNywxNC0xNC43NywxMi40Mi0yOS4zNSwyNS4wNi00NC4xNiwzNy40My0xLjI1LDEtMi4wNywyLjUtMy41MiwzLjMxLTIuNTUtMy44LTItOC0xLjM5LTEyLjEyLDEuODYtMy4wNiw0LjgtNSw3LjQ0LTcuMjhxMjEuNTQtMTguMjcsNDMtMzYuNTljMTQtMTEuODUsMjcuOTItMjMuNzcsNDEuOS0zNS42M3EyNC4xMi0yMC40NSw0OC4xNy00MWM4LjkzLTcuNiwxNy44LTE1LjI2LDI2Ljg2LTIyLjcxLDEuMzctMS4xMywyLjMzLTIsMS4yOC0zLjgxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzVjOTRjZSIvPjxwYXRoIGQ9Ik02MzcuNTEsMzA4LjQxYy0xNy42My04LjU2LTM2LjI3LTEzLjc4LTU1LjU0LTE2LjktNS4xNS0uODQtMTAuMy0xLjg3LTE1LjU1LTEuOTEtNi43Mi00LjI1LTEzLjMxLTguNzMtMjAuMTktMTIuN2EyMDkuNzMsMjA5LjczLDAsMCwwLTcyLjE4LTI1Ljc1LDkuMDksOS4wOSwwLDAsMS0xLjY1LS42NGM3LjY1LTEuNCwzMy42OSwyLjUxLDUxLjcyLDcuNDdhMjQzLjA3LDI0My4wNywwLDAsMSw0OC40NywxOWMtMS42Mi00Ljg1LTQuNTgtOC4xMy02LjM5LTEyLS4xOC0xLTEuNjMtMS45NC0uNjYtM3MyLjA3LjA4LDMsLjQ5YzIuNiwxLjE4LDUuMDgsMi42MSw3LjY5LDMuNzdhMzQ3LjUyLDM0Ny41MiwwLDAsMSw2MS40LDQwLjQ5YzEuMDYsMS40LDEuMDYsMS40LS4xMSwxLjY5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzE2MWY0MiIvPjxwYXRoIGQ9Ik0zNzQuMzIsMTE2LjM4Yy40NiwxLjEsMS45Mi4zLDIuNjEsMS41My00LjE4LDMuNjItOC4zNiw3LjMtMTIuNjEsMTAuOTFxLTExLjUxLDkuNzgtMjMuMDcsMTkuNDhRMzI0Ljg3LDE2Mi4xMywzMDguNSwxNzZjLTcuNTgsNi40NC0xNS4wNSwxMy0yMi42MywxOS40Ni05LjE4LDcuOC0xOC40NSwxNS41MS0yNy42NSwyMy4zLTcuMyw2LjE5LTE0LjUzLDEyLjQ3LTIxLjgyLDE4LjY4LTcuNjcsNi41Mi0xNS4zNywxMy0yMy4wNiwxOS40OWwtNy43MSw2LjQ3LDIuMTktOS43NmMtMS4yNC0zLjE5LDEuMzUtNC42MywzLjEzLTYuMSw3LTUuODQsMTMuODgtMTEuODEsMjAuODMtMTcuNzFxMjQuMjUtMjAuNTgsNDguNDktNDEuMjIsMjAuODQtMTcuNyw0MS42Ni0zNS4zOWMxMi45Mi0xMSwyNS45My0yMS45MSwzOC43Mi0zMy4wNywxLS44NiwyLjg1LTEuODcuMTUtMyw0LjQzLTEuNjEsOS0uMzMsMTMuNTItLjczIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzY0OTdkMCIvPjxwYXRoIGQ9Ik0zNjAuOCwxMTcuMTFjMS4wNS4xOSwyLjItLjM3LDMuMy40OS0yLjY1LDMuOS02LjU1LDYuNDUtMTAsOS40NC05LjgyLDguNTYtMTkuNzksMTctMjkuNzQsMjUuMzctOS4xLDcuNjgtMTguMjksMTUuMjYtMjcuMzcsMjNzLTE4LjIzLDE1Ljc0LTI3LjQsMjMuNTQtMTguMjksMTUuMjctMjcuMzYsMjNTMjI0LDIzNy41OCwyMTQuODcsMjQ1LjQ1Yy0yLjc0LDIuMzctNi4zNyw0LTcuMDUsOC4xNS00Ljg0LjU1LTcuNCw0LjY0LTEwLjk0LDcuMTYtNS41OSw0LTkuODQsOS40Ny0xNSwxMy45NS01LjE5LDMuNjktOS43Nyw4LjEtMTQuNjEsMTIuMi0xNC4zOCwxMi4xOS0yOC43LDI0LjQ2LTQzLjEzLDM2LjU5LTIsMS42OC0zLjc3LDMuNjYtNiw1LjA2LTEsLjYyLTEuOTEsMS43OS0zLjMyLjgxYTE2LjksMTYuOSwwLDAsMSwxLjUxLTcuNTFjNy4xOS00LjU5LDEzLjE3LTEwLjY3LDE5LjY2LTE2LjEsMTcuODgtMTUsMzUuNjEtMzAuMTYsNTMuMzgtNDUuMjlzMzUuMy0zMC4xMyw1My00NS4xNXEyNi0yMiw1MS45NC00NC4wOGMxNy42OC0xNSwzNS40NC0zMCw1My00NS4xNSwzLjQ5LTMsNy4xNi01LjgzLDEwLjU2LTloMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2ODlhZDEiLz48cGF0aCBkPSJNMzk5LjgxLDExNy44N2M0LjA3LS4wNSw4LDEsMTIsMS41LDEuMDksMi4zOS0xLDMuMzItMi4yMyw0LjQzLTUsNC4zNy0xMC4yMyw4LjQ4LTE1LjEsMTMtLjUyLS42OS0xLjA4LTEuMzYtMS41Ni0yLjA5LTEuMTEtMS42NS0xLjg5LTEuMjEtMi42MS4zMy01LjksMTIuNjYtMTYuMDUsMjEuNDYtMjcuMSwyOS4zYTIwMi4xNCwyMDIuMTQsMCwwLDEtMzkuODcsMjEuNzljLS43Ni0xLjQ0LS44My0xLjUuNDctMi44NCwyLjY5LTIuNzgsNS43Ny01LjE0LDguNzItNy42NCwyMS4yOS0xOC4xLDQyLjY0LTM2LjEyLDYzLjgxLTU0LjM3LDEuMjMtMS4wNywyLjI5LTIuMywzLjQ3LTMuNDEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNGU4ZmNjIi8+PHBhdGggZD0iTTM5OS44MSwxMTcuODdhNC41NSw0LjU1LDAsMCwxLTEuNzUsMy4xNHEtMjAuNiwxNy40My00MS4xMywzNC45My0xNS43MiwxMy40LTMxLjM2LDI2Ljg5Yy0uOTQuODItMi43MSwxLjQtMi4yMywzLjNhMTg3LjQsMTg3LjQsMCwwLDEtMjAuMjcsOC4yNGMtMi4zMy0uNjQtLjQtMS40NywwLTEuODUsNC4wOS0zLjYyLDguMjMtNy4xOCwxMi4zOS0xMC43MnExMS40Ny05Ljc1LDIzLTE5LjQ3YzcuNTctNi40LDE1LjE4LTEyLjc3LDIyLjczLTE5LjE5czE1LjEyLTEyLjg3LDIyLjU3LTE5LjQyYzIuNDEtMi4xMiw1LjM2LTMuNjgsNy02LjU5LDMuMDYtLjQ0LDYsLjYsOSwuNzQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNTU5MWNkIi8+PHBhdGggZD0iTTM0Ni42MSwyMDhjNy45Mi0zLjkyLDE2LjE5LTcuMjEsMjMuMS0xMi45MywxLjQ0LS4wNiwxLjI4Ljc2Ljk0LDEuNjktNi4zOCwyNi40Mi0yNi40Miw0My43Ny01My41Miw0Ni4zLTUuMjIuNDktMTAuNDMsMS4wOS0xNS42OS41OS42OC0xLjkzLDIuNTEtMS43Niw0LTIuMTcsNS44OC0xLjYsMTEuNzEtMy4zMSwxNy4xNi02LjEzLDEwLjIyLTUuMjgsMTcuNzEtMTMuMDcsMjItMjMuODRhOC4yMiw4LjIyLDAsMCwxLDIuMDUtMy41MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMxNjFmNDIiLz48cGF0aCBkPSJNMzQ2LjYxLDIwOGMtMy4yNiwxMi42LTExLjI5LDIxLjMxLTIyLjM5LDI3LjU1LTcuMTMsNC0xNSw1Ljg2LTIyLjc3LDguMS0xLjkxLTUuNTkuMTYtMTAuMzIsMy41Mi0xNC41NywzLjk0LTUsOS4zLTguMDgsMTUtMTAuNjlBMjc3LjA4LDI3Ny4wOCwwLDAsMSwzNDYuNjEsMjA4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQxOGFjOSIvPjxwYXRoIGQ9Ik0xMTQuOCwzMjkuMzdjNC40NS0xLjY1LDcuMzEtNS40MSwxMC44MS04LjI4LDExLjI5LTkuMjcsMjIuMzgtMTguNzgsMzMuNTEtMjguMjQsNS44NS01LDExLjYxLTEwLjA1LDE3LjQxLTE1LjA4LDEuNTgtMS4zNywzLjA1LTIuOTQsNS4zNC0zLjA2LTYsNy41Mi0xMS43MywxNS4yNC0xNiwyMy45M3EtMTcuMjUsMTQuNi0zNC40NCwyOS4yN2MtNS4zLDQuNTMtMTAuNzEsOC45NC0xNS45MywxMy41Ny0uOC43MS0xLjcsMS42LTIuOTQuNjRhNTQuMTMsNTQuMTMsMCwwLDEsMi4yNC0xMi43NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2NDk3ZDAiLz48cGF0aCBkPSJNMTU4LjgxLDM0OS41OGMtMy41NC4yNy01LjE0LDMuNDQtNy40OCw1LjMzLTkuODUsNy45NS0xOS40NSwxNi4yMi0yOSwyNC40OS0zLjIsMi43Ni02LjMsNS42Mi05LjY5LDguMTYtMi4yMywxLjY4LTMuMDcsMS0zLTEuNTgsMC0zLjEyLDAtNi4yNCwwLTkuMzYsMy40Ni0zLjc1LDcuNjEtNi43MiwxMS40OC0xMCwxMS4xNy05LjQ4LDIyLjIzLTE5LjEsMzMuNTUtMjguNDIsMS0uOCwxLjc5LTIuMjYsMy40Ni0xLjMxbC43NSwxMi42OSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0NjhjY2EiLz48cGF0aCBkPSJNMjA3LDI3NS40OGE0LjE3LDQuMTcsMCwwLDEsMS45MS0zLjA4YzktNy42LDE4LTE1LjE1LDI3LTIyLjc2LDcuMzktNi4yNSwxNC43Mi0xMi41NiwyMi4wNy0xOC44NywzLjg2LTMuMzEsNy42OS02LjY2LDExLjUyLTEwLC43My0uNjQsMS40MS0xLjEyLDIuMTIsMC0uODMsMy40MS0xLjgyLDYuNzktMS43MiwxMC4zNS00LDQuNDMtOC44OSw3LjkzLTEzLjQyLDExLjgtMTQsMTItMjcuOTUsMjMuOTMtNDIsMzUuNzZhMTEuMzQsMTEuMzQsMCwwLDAtMS40OCwxLjY4LDcuOTMsNy45MywwLDAsMS02LTQuODgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNTU5MWNkIi8+PHBhdGggZD0iTTExMi41NiwzNDIuMTJjMy4yNC0xLDUuMTMtMy44MSw3LjU2LTUuODIsMTMuMTctMTAuODksMjYuMTMtMjIsMzkuMTctMzMuMDgsMi4wNS0xLjczLDMuNDktNC4zMyw2LjU4LTQuNThhMTUwLjg5LDE1MC44OSwwLDAsMC02LDE4Yy0yLjM0LS4yMy0zLjUzLDEuNjQtNSwyLjg4LTEzLjU4LDExLjY3LTI3LjI4LDIzLjItNDAuOTIsMzQuOC0uODIuNjktMS41NSwxLjcxLTIuODksMS4yNmE0NC44OCw0NC44OCwwLDAsMSwxLjUtMTMuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM1Yzk0Y2UiLz48cGF0aCBkPSJNMjEzLDI4MC4zNmMtLjkzLTEuNjguNjUtMi4yMywxLjQ3LTIuOTNxMTcuMi0xNC43MSwzNC40OS0yOS4zNCw5Ljc3LTguMjgsMTkuNTktMTYuNDlhNC4xNiw0LjE2LDAsMCwxLDEuMzgtLjQ3LDI5LjkyLDI5LjkyLDAsMCwwLDEuMzgsOWMtMy45Myw0LjU2LTguODcsOC0xMy4zOSwxMS44NnEtMTUuMTMsMTMtMzAuNDUsMjUuOTNhMy41LDMuNSwwLDAsMC0xLjU0LDJjLTQuMjYsMS41OC04LjU2LDIuMjEtMTIuOTMuNDEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNGU4ZmNjIi8+PHBhdGggZD0iTTE1OC4wNiwzMzYuODljLTQuMjEsMi40MS03LjU3LDUuOTEtMTEuMjcsOS05Ljc2LDgtMTkuMzcsMTYuMjUtMjguOTQsMjQuNS0yLjY0LDIuMjgtNSw0LjgyLTguMjgsNi4yNy4zOS00LS44NC04LjA4Ljc0LTEycTIyLjE3LTE4Ljk0LDQ0LjQ2LTM3Ljc2YzEtLjg2LDIuMDYtMS45MSwzLjY0LTEuMjMtLjEyLDMuNzUtLjIzLDcuNS0uMzUsMTEuMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNGU4ZmNjIi8+PHBhdGggZD0iTTE1OC40MSwzMjUuNjNjLTQuNzUsMi41NS04LjQyLDYuNS0xMi41Miw5Ljg4LTkuNjgsNy45NS0xOS4xNCwxNi4xNi0yOC43MywyNC4yMi0yLjE0LDEuODEtMy42NCw0LjU2LTYuODUsNC44OS4zOC0zLS44LTYuMTEuNzUtOXExNC0xMiwyOC4wNi0yMy45MmM2LjM0LTUuMzksMTIuNzQtMTAuNzEsMTkuMDctMTYuMSwyLTEuNzIsMS40Ny4xNywxLjY1LDEuMDhaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzU1OTFjZCIvPjxwYXRoIGQ9Ik0yMjYsMjgwYy0xLjM4LTEtLjQxLTEuNzQuMzItMi4zNSw4LjgyLTcuNCwxNy42OC0xNC43NSwyNi40OS0yMi4xNiw1LjUtNC42MywxMC45My05LjM0LDE2LjM3LTE0YTMuNjYsMy42NiwwLDAsMSwyLjItMS4yOGwyLjI1LDQuNDljLTEuNzMsMi42Ny00LjUsNC4zMy02LjQ1LDYuNzktMTAuODMsMTItMjIuOTUsMjIuMTQtMzguMjksMjcuOTFBMTkuNTMsMTkuNTMsMCwwLDEsMjI2LDI4MCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0ODhkY2EiLz48cGF0aCBkPSJNMzk0LjQ4LDEzNi44YzEuMzYtNC4yNSw1Ljc3LTUuNDcsOC4zOC04LjQ3LDIuNzgtMy4xOSw3LjMzLTQuNjEsOC45NS05LDMuMjYsMCw2LjM4Ljg2LDkuNTUsMS40NSwyLjc0LjUxLDIuODYsMS43LDEsMy4zOS00LjA4LDMuNjQtOC4yLDcuMjYtMTIuMzQsMTAuODItMy44NiwzLjMyLTcuNzgsNi41Ny0xMS42OCw5Ljg1WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0NjhjY2EiLz48cGF0aCBkPSJNMjA5LjM3LDMwNy44MWMuNjYsMS42Ni0xLjMzLDIuNDktMS4xLDQtMS00LjU2LTMuNTEtNi4zMy04LjA4LTUuNDJhMjMuNjUsMjMuNjUsMCwwLDAtMTIuNjQsNy4zNWMtLjk0LDEtMiwxLjg5LTMsMi44NC0uODItMSwwLTEuODcuMzMtMi43NiwyLTYuNTEsNi4zOS0xMS4xNCwxMS45My0xNC44M2ExMi41NywxMi41NywwLDAsMSw0LjA2LTEuODVjNi40Mi0xLjUzLDkuOTQsMS42MSw5LjA2LDguMTJhOC4yOCw4LjI4LDAsMCwxLS42MSwyLjUzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQyOGFjOSIvPjxwYXRoIGQ9Ik0yMDkuMzcsMzA3LjgxYzAtMSwuMDYtMiwuMDctMywuMTEtNi41NC0zLjYtOS05LjY3LTYuMjUtNywzLjItMTEuNDIsOC45Mi0xNC40OSwxNS43OS0uNzEuMTMtMS4wOC0uMDctLjg2LS44NiwyLjIxLTguMTYsNi40Ny0xNC45MiwxMy41Ni0xOS43M2ExNC44MiwxNC44MiwwLDAsMSw1Ljg1LTIuMjgsNi4yNSw2LjI1LDAsMCwxLDcuNDEsNC42MSwxNC44OCwxNC44OCwwLDAsMS0xLjg3LDExLjciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjMTgyMTQ0Ii8+PHBhdGggZD0iTTI2Ny4xMywyNTEuNDFjLTEuMjYtMS0uMTUtMS40LjUyLTEuODcsMi4xMS0xLjQ3LDMuMjctNC4xLDUuOTMtNC45MiwzLjQsNS4zOCw4LjgzLDcuNzUsMTQuNDksOS43NywxLjE0LjQxLDIuMzMuNjcsNC4xOSwxLjE5LTguNzIsMi4yNy0xNi4yNCwxLjM5LTIzLjE1LTMuMzNhMywzLDAsMCwwLTItLjg0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQ1OGNjYSIvPjxwYXRoIGQ9Ik01NzYuMjIsMjY2LjIzYy0yLjc1LS4zMi00Ljg0LTIuMi03LjM0LTMuMTMtMS0uMzYtMS44OS0xLjY0LTIuOTItLjgtLjg1LjcuNTQsMS43NC4yNCwyLjcxLTEuNTMtMS4zNC0yLjA2LTMuMjYtMi44Ni01LjIxLDQuNDYsMS44NSw4LjkxLDMuNjQsMTIuODgsNi40MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2MzY1N2QiLz48cGF0aCBkPSJNNjM3LjUxLDMwOC40MWMuODEtLjUxLDAtMS4xMy4xMS0xLjY5bDQuMzUsMi4zNiwyLjM0LDNjLTIuODUtLjc2LTQuNzgtMi4zMS02LjgtMy42NyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMyNjMxNTQiLz48cGF0aCBkPSJNNDY1LjE5LDI0OS4yNmExNC4yNiwxNC4yNiwwLDAsMSw2LC40NWMtMi4zMiwxLjI2LTMuOTIsMS4wOS02LS40NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiNhMDlhYTkiLz48cGF0aCBkPSJNMTc3LjgxLDU5Ni4zNmMyLjMzLjQyLDMuMzksMi42Nyw1LjMsMy43TDE4Myw2MDFhMTQuMjIsMTQuMjIsMCwwLDEtNS4yMS00LjU5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQyNGE3ZiIvPjxwYXRoIGQ9Ik02NTQuMTcsNDUzLjA3bDEuMzQuNzVjLjE5LDEuNTEtLjQ1LDIuNzUtMS4zNCw0LjZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzhjYjdkZSIvPjxwYXRoIGQ9Ik00NjUsMTM1Ljc5Yy41MSwxLjE1LDEuNjYuNjgsMi41LDFsLTQsMS41NWMtLjMxLTEuNTkuNzctMS45NSwxLjUxLTIuNTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNWE1ZDc2Ii8+PHBhdGggZD0iTTE4NC40MiwzMTMuNTFsLjg2Ljg2Yy0uMjMuNzQtLjQ1LDEuNDktLjY4LDIuMjNMMTgzLDMxOC42N2MuNDgtMi40Mi41MS0zLjksMS40My01LjE2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzRmNjY4YSIvPjxwYXRoIGQ9Ik0zNzAuNjUsMTk2LjczYy0uMjItLjYyLS4xMy0xLjQtLjk0LTEuNjkuMjQtLjU4Ljg5LTEuMzksMS4xOS0xLjEuOS44Ny41MiwxLjkxLS4yNSwyLjc5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzU1NWE3MyIvPjxwYXRoIGQ9Ik0xMTcuOCwzMTUuODZhNjEuNDQsNjEuNDQsMCwwLDEsNC41LTE1Ljc3YzguODItNi4xNSwxNi41OC0xMy42LDI0Ljc5LTIwLjVxMjEuMzUtMTgsNDIuNTMtMzYuMTQsMTkuMzUtMTYuNTUsMzguNzktMzMsMjEtMTcuOCw0Mi0zNS42NmMxMi43NC0xMC44MywyNS41Mi0yMS42MywzOC4yMS0zMi41Myw4LjktNy42NSwxOC0xNS4wNywyNi43NC0yMi44OGE1Myw1MywwLDAsMSwxNC4yNC0xLjUyLDEuNDQsMS40NCwwLDAsMSwxLjU0LS4xOGMxLjA2LDEuODEtLjI5LDIuODQtMS4zOSwzLjc2cS0xOC4xMywxNS4zNi0zNi4xOSwzMC44MVEyOTQuMjgsMTY4LjYzLDI3NSwxODVxLTE3Ljc5LDE1LjE4LTM1LjY0LDMwLjI5UTIxNy43LDIzMy42NywxOTYsMjUyLjFjLTE4LDE1LjI1LTM1Ljg4LDMwLjU5LTUzLjksNDUuNzktNyw1Ljg3LTEzLjgxLDExLjg4LTIwLjg3LDE3LjYzLS44OC43MS0yLjA3LDMtMy40Ny4zNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2ZDljZDIiLz48cGF0aCBkPSJNMzM1LjMxLDExOS4zOGMtMS4yNiw0LjIxLTUuMzMsNS43OS04LjIyLDguMzYtOS40Nyw4LjQyLTE5LjI2LDE2LjQ5LTI4Ljk0LDI0LjY3LTEwLjgzLDkuMTMtMjEuNzIsMTguMi0zMi41MSwyNy4zOC05LjM4LDgtMTguNjIsMTYuMTEtMjgsMjQuMS05LjA5LDcuNzQtMTguMjksMTUuMzQtMjcuMzgsMjMuMDZzLTE4LjExLDE1LjU1LTI3LjIxLDIzLjI4LTE4LjI1LDE1LjM3LTI3LjM1LDIzLjA5Yy03LjQ5LDYuMzYtMTQuOTIsMTIuNzktMjIuMzksMTkuMTYtMywyLjU4LTYuMTEsNS4xLTkuMTYsNy42NS0uNjYuNTUtMS4yNi44Mi0xLjg2LDBhNjAsNjAsMCwwLDEsNS4yNS0xNWM2LjktNC4zNSwxMi42Ny0xMC4xLDE4Ljg2LTE1LjMycTIxLjMzLTE4LDQyLjUxLTM2LjEzLDIxLjkyLTE4Ljc1LDQzLjkyLTM3LjM5LDE4LjEtMTUuNDIsMzYuMjUtMzAuNzljMTUuNzMtMTMuMywzMS4zMy0yNi43Niw0Ny4xMy00MGE2Ljk0LDYuOTQsMCwwLDAsMi41OC0zLjEzYzUuMzEtMi4wNiwxMS0xLjkzLDE2LjUxLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNzI5ZmQ0Ii8+PHBhdGggZD0iTTMxOC44LDEyMi4zNmMyLjMzLjYxLjQzLDEuNDYsMCwxLjg1LTQuMjUsMy44Mi04LjU0LDcuNjEtMTIuODksMTEuMzEtNy41Nyw2LjQzLTE1LjIsMTIuNzktMjIuNzksMTkuMnEtMTYuNjcsMTQtMzMuMjksMjguMTNjLTkuMDksNy43My0xOC4wOCwxNS41Ni0yNy4xNiwyMy4yOS05LjM2LDgtMTguNzksMTUuODUtMjguMTYsMjMuODItOS4wOCw3LjczLTE4LjA5LDE1LjU0LTI3LjE3LDIzLjI3UzE0OS4xLDI2OC42MSwxNDAsMjc2LjI5Yy0zLjMzLDIuOC02LjY0LDUuNjItMTAsOC4zNy0uNjYuNTQtMS4zNywxLjc2LTIuNDQuNDQsMS01LjE2LDMuNzItOS42MSw2LTE0LjI0LDEyLjMzLTEwLjU0LDI0LjcyLTIxLDM3LjA2LTMxLjU2cTE5LjA4LTE2LjI5LDM4LjIxLTMyLjUyLDE4LjI1LTE1LjUzLDM2LjUzLTMxUTI2NC42LDE1OS4zOSwyODMuODYsMTQzYzYuNjUtNS42NCwxMy4wOS0xMS41NCwxOS45NS0xNyw0Ljc1LTIuMjEsOS45LTIuODMsMTUtMy43MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM3OGEyZDUiLz48cGF0aCBkPSJNMzAzLjgxLDEyNi4wN2MtNC43Niw2LjE5LTExLjIyLDEwLjU1LTE3LDE1LjYzLTcuNTcsNi42NC0xNS4zMiwxMy4wNS0yMywxOS41NS03LjQ5LDYuMzQtMTUsMTIuNjUtMjIuNDksMTlTMjI2LjM5LDE5MywyMTguOSwxOTkuNHMtMTUuMjEsMTIuOC0yMi43OSwxOS4yM2MtNy4zOSw2LjI4LTE0LjcxLDEyLjYzLTIyLjEsMTguOTFxLTE0LjA2LDEyLTI4LjE3LDIzLjg1Yy0zLjMyLDIuODEtNi42Niw1LjYtMTAsOC40YTMuNDMsMy40MywwLDAsMS0yLjMyLDEuMDcsOTkuOTMsOTkuOTMsMCwwLDEsOS0xOGMxNy4xMi0xMy45MSwzMy43Ny0yOC40LDUwLjU3LTQyLjcsMTkuNDUtMTYuNTcsMzktMzMsNTguMzQtNDkuNzMsMTAuOTQtOS40NSwyMi4zLTE4LjQxLDMyLjg1LTI4LjMyYTExMy40MywxMTMuNDMsMCwwLDEsMTkuNS02IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzdkYTVkNiIvPjxwYXRoIGQ9Ik0yODQuMzEsMTMyLjExYy43NSwxLjM0LS42LDEuNzQtMS4xOCwyLjI2cS0xMi40OCwxMC45NC0yNS4wNiwyMS43M2MtNy4zNSw2LjMxLTE0Ljc3LDEyLjU0LTIyLjE2LDE4LjhxLTEzLjc4LDExLjY3LTI3LjU4LDIzLjM0Yy03LjQ3LDYuMzUtMTQuOSwxMi43Ni0yMi4zOCwxOS4xMS05LjM3LDgtMTguNzgsMTUuODctMjguMTUsMjMuODJxLTUuODQsNS0xMS42MSwxMGE2LjQ1LDYuNDUsMCwwLDEtMy42NCwxLjc0LDE1OS4yNiwxNTkuMjYsMCwwLDEsMTYuNTItMjYuMjRjNS44LTQuMjcsMTEuMS05LjE2LDE2LjU5LTEzLjgxcTIxLjM5LTE4LjEyLDQyLjcyLTM2LjMyLDE2LjUtMTQuMDYsMzMtMjguMTRjMS43LTEuNDUsMy44My0yLjM4LDUuMTMtNC4yOSw4LjcyLTUuMjgsMTguMy04LjUzLDI3LjgyLTExLjk1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzgxYTdkOCIvPjxwYXRoIGQ9Ik00NDIuNTUsNDY2LjY0Yy03LjU1LDYuMTYtMTQuOTUsMTIuNTQtMjUsMTYuODFhODguODYsODguODYsMCwwLDAsNi42My0xOC4yNGM1LjkyLTI2LC40My00OS42Ni0xNC44Ny03MS4yNC0zLjc4LTUuMzItOC44Ni05LjQ0LTEzLjM2LTE0LjA5LS43My0uNzUtMS41Mi0xLjY5LTIuODMtMS4wNi0xLjM1LS42Ni0yLTItMy0zLC42NS0uODMsMS4zMi0uMzcsMiwwLDE4LjEzLDEwLjI4LDMzLjI0LDIzLjYyLDQyLjQ3LDQyLjY5YTg1LjIzLDg1LjIzLDAsMCwxLDguMTgsMzAsODYuODYsODYuODYsMCwwLDEtLjE3LDE4LjE3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzBlMWY2NiIvPjxwYXRoIGQ9Ik0xMTcuOCwzMTUuODZjMywxLjA4LDQtMS45MSw1LjU0LTMuMTQsMTUuMjEtMTIuNTksMzAuMjEtMjUuNDQsNDUuMjMtMzguMjYsMTQuMTctMTIuMSwyOC4yNS0yNC4zMSw0Mi40NS0zNi4zOCwxNS44MS0xMy40MywzMS43NC0yNi43LDQ3LjU1LTQwLjEzLDE0LjItMTIuMDcsMjguMjgtMjQuMjcsNDIuNDQtMzYuMzhRMzI0LDE0MiwzNDcsMTIyLjRjMS41Ny0xLjM0LDMuODMtMiw0LjExLTQuNTMuODYtLjgyLDIuMTMuMDgsMy0uNzNsMy43NiwwYy0xLjE1LDQtNSw1LjM5LTcuNyw3LjgxLTcuNzYsNy0xNS44NSwxMy41OS0yMy44MiwyMC4zMy05LjExLDcuNy0xOC4yNiwxNS4zNi0yNy4zNiwyMy4wOC03LjM5LDYuMjctMTQuNzIsMTIuNjItMjIuMTIsMTguOS0xMC45LDkuMjQtMjEuODUsMTguNDItMzIuNzQsMjcuNjctNy40LDYuMjgtMTQuNzIsMTIuNjQtMjIuMSwxOC45Mi05LjM4LDgtMTguOCwxNS44OC0yOC4xOCwyMy44NS03LjM5LDYuMjgtMTQuNzEsMTIuNjQtMjIuMSwxOC45Mi03LjU3LDYuNDQtMTUuMjEsMTIuODEtMjIuNzgsMTkuMjVzLTE1LjA4LDEzLTIyLjY1LDE5LjQzYy0yLjY0LDIuMjUtNS4zOCw0LjQtOC4wOCw2LjYtLjY0LjUyLTEuMjUuODUtMS44NywwYTExLjc1LDExLjc1LDAsMCwxLDEuNDktNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2OTlhZDEiLz48cGF0aCBkPSJNMjU2LjQ5LDE0NC4wNmMtLjYzLDMuNTUtNC4wOSw0LjQ4LTYuMjksNi40Ni03LjY2LDYuODktMTUuNjMsMTMuNDMtMjMuNDksMjAuMDgtOS4yLDcuNzctMTguNDIsMTUuNS0yNy42LDIzLjI5LTcuMzksNi4yNi0xNC43MywxMi41OS0yMi4wOCwxOC44OXEtOC4wNiw2LjktMTYuMSwxMy44M2MtLjYzLjU0LTEuMjQuODctMS44NiwwYTE0MS43MiwxNDEuNzIsMCwwLDEsMTMuMTQtMTcuMTFjMTcuNjUtMjAuNSwzNy43LTM4LjMsNjAuNzMtNTIuNiw3LjYtNC43MSwxNS4xNC05LjYsMjMuNTUtMTIuODUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjODhhYmQ5Ii8+PHBhdGggZD0iTTM4Ni4zMiwxMTcuMTJjLTIuNDktLjMzLTUuMTMuNzctNy41LS43NCwyLjQ5LjMyLDUuMTItLjc4LDcuNS43NCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM1NTkxY2QiLz48cGF0aCBkPSJNMzU0LjA1LDExNy4xNGMtLjc5LDEuMDctMiwuNjItMywuNzNoLTEuNTFjMS4zMy0xLjMsMy0uNTIsNC41LS43MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2ODlhZDEiLz48cGF0aCBkPSJNMjgyLjA2LDYzOS4xMmExODIuMywxODIuMywwLDAsMCw3MS44MS0xMS4zMSwyMTQsMjE0LDAsMCwwLDYxLjYxLTM0LjY3YzE4LjA5LTE0LjY4LDMzLjY2LTMxLjUzLDQ0LjA2LTUyLjYxYTEwMS4zNiwxMDEuMzYsMCwwLDAsMTAuMjItMzZjMS0xMS4zMS0uODgtMjItMy45NS0zMi42NC4zNC0yLjYxLDIuNzItMy44LDQuMTEtNS42Myw1LjM4LTcuMDcsOS4zNS0xNC42OSwxMS0yMy40NmEyNy40MywyNy40MywwLDAsMSwxLjIxLTMuNDMsMTExLDExMSwwLDAsMSw4LDIxLjE2YzIuNjMsMTAuMzEsNC4xMSwyMC44LDMuMzMsMzEuNGExMjMuMzEsMTIzLjMxLDAsMCwxLTE2LjA2LDUyLjMyYy05LjE2LDE2LjE1LTIxLDMwLTM0LjYsNDIuMzdhMTk5Ljg5LDE5OS44OSwwLDAsMS0zOS4zNywyNy41NCwyMTkuNSwyMTkuNSwwLDAsMS01NC4yNiwyMC43MSwyMDkuMjcsMjA5LjI3LDAsMCwxLTM2LjA1LDUuMmMtNS44NS4zMy0xMS43MS44My0xNy41Mi40Ni00LjUxLS4yOS05LjE0LDAtMTMuNTYtMS4zNyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMwZTFmNjYiLz48L2c+PC9zdmc+",protocol:"uniswap_v2",slippage:!0,blockchains:["polygon"],polygon:{router:{address:"0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff",api:kx.ROUTER},factory:{address:"0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32",api:kx.FACTORY},pair:{api:kx.PAIR}}};var PS=t=>new bx(Object.assign(_S,{scope:t,findPath:t=>kx.findPath({...t,exchange:_S}),pathExists:t=>kx.pathExists({...t,exchange:_S}),getAmounts:t=>kx.getAmounts({...t,exchange:_S}),getPrep:t=>kx.getPrep({...t,exchange:_S}),getTransaction:t=>kx.getTransaction({...t,exchange:_S})}));const BS={name:"spookyswap",label:"SpookySwap",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNjQxIDY0MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQxIDY0MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGZpbGw9IiMxMjExMjIiIGQ9Ik0zNC4yLDMyMGMwLDE1OC41LDEyOC41LDI4Ni4zLDI4Ni4zLDI4Ni4zYzE1OC41LDAsMjg2LjMtMTI4LjUsMjg2LjMtMjg2LjNjMC0xNTguNS0xMjguNS0yODYuMy0yODYuMy0yODYuMwoJCUMxNjIuNywzMy43LDM0LjIsMTYyLjIsMzQuMiwzMjBMMzQuMiwzMjB6Ii8+Cgk8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI0YyRjRGOCIgZD0iTTEyMC45LDI0Ny42Yy0zLjMsMjIuMiwwLjcsNDUuNyw0LjYsNjcuOGMyLDMuMyw1LjIsNS45LDkuOCw3LjJjLTkuMSwxOS42LTE0LjMsNDAuNC0xNC4zLDYyLjYKCQljMCw5My4zLDkwLDE2OC45LDIwMS41LDE2OC45UzUyNCw0NzguNSw1MjQsMzg1LjJjMC0yMS41LTUuMi00My0xNC4zLTYyLjZjMy45LTEuMyw2LjUtMy45LDcuOC03LjJjNC42LTIyLjIsOC41LTQ1LjcsNS4yLTY3LjgKCQljLTMuMy0zMC0xMy43LTM5LjgtNDUtMzJjLTE1LjcsMy45LTM2LjUsMTMtNTIuOCwyNC4xYy0zMC0xNS02NS4yLTIzLjUtMTAyLjQtMjMuNWMtMzcuOCwwLTczLjcsOS4xLTEwMy43LDI0LjEKCQljLTE2LjMtMTEuMS0zNy4yLTIwLjktNTMuNS0yNC44QzEzNCwyMDcuOCwxMjQuMiwyMTcuNiwxMjAuOSwyNDcuNkwxMjAuOSwyNDcuNnogTTIzOC4zLDM4MC43Yy0yMy41LTEwLjQtNjMuOS03LjgtNjMuOS03LjgKCQlzMiwzNy44LDI0LjgsNTAuOWMyNy40LDE1LDc4LjksNy44LDc4LjksNy44UzI3My41LDM5Ni4zLDIzOC4zLDM4MC43TDIzOC4zLDM4MC43eiBNMzY5LjQsNDMyLjJjMCwwLDUwLjksNy44LDc4LjktNy44CgkJYzIzLjUtMTMsMjQuOC01MC45LDI0LjgtNTAuOXMtNDAuNC0yLjYtNjMuOSw3LjhDMzc0LDM5Ni4zLDM2OS40LDQzMS41LDM2OS40LDQzMi4yTDM2OS40LDQzMi4yeiBNMzEyLjcsNDU4LjkKCQljMCwyLjYsNS4yLDUuMiwxMS43LDUuMnMxMS43LTIsMTEuNy01LjJjMC0yLjYtNS4yLTUuMi0xMS43LTUuMkMzMTcuOSw0NTMuNywzMTIuNyw0NTUuNywzMTIuNyw0NTguOUwzMTIuNyw0NTguOXoiLz4KCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRjJGNEY4IiBkPSJNNTUyLjcsNDM1LjRjLTE4LjktNy4yLTM5LjEtMTEuMS01OS4zLTExLjFjLTUuMiwwLTUuMi03LjgsMC03LjhjMjAuOSwwLDQxLjcsMy45LDYxLjMsMTEuNwoJCWMyLDAuNywzLjMsMi42LDIuNiw0LjZDNTU2LjYsNDM0LjgsNTU0LjYsNDM2LjEsNTUyLjcsNDM1LjRMNTUyLjcsNDM1LjR6IE05Mi4yLDQyNy42YzE5LjYtNy44LDQwLjQtMTEuMSw2MS4zLTExLjcKCQljNS4yLDAsNS4yLDcuOCwwLDcuOGMtMjAuMiwwLTQwLjQsMy45LTU5LjMsMTEuMWMtMiwwLjctNC42LTAuNy01LjItMi42Qzg5LDQzMC45LDkwLjMsNDI4LjMsOTIuMiw0MjcuNkw5Mi4yLDQyNy42eiBNMTMyLjcsNDUwLjQKCQljOS44LTMuMywyMC4yLTQuNiwzMC01LjJjNS4yLDAsNS4yLDcuOCwwLDcuOGMtOS4xLDAtMTguOSwyLTI3LjQsNC42Yy04LjUsMi42LTE3LjYsNS45LTI0LjEsMTEuN2MtMy45LDMuMy05LjEtMi01LjktNS45CgkJQzExMy4xLDQ1NywxMjMuNSw0NTMuNywxMzIuNyw0NTAuNEwxMzIuNyw0NTAuNHogTTE3MS44LDQ2NS40Yy03LjgsMy4zLTE1LjcsNy44LTIyLjgsMTIuNGMtNy4yLDQuNi0xMy43LDEwLjQtMTguOSwxNwoJCWMtMS4zLDItMC43LDQuNiwxLjMsNS4yYzIsMS4zLDQuNiwwLjcsNS4yLTEuM2M0LjYtNS45LDExLjEtMTEuMSwxNy0xNWM3LjItNC42LDE0LjMtOC41LDIxLjUtMTEuN2MyLTEuMywyLjYtMy4zLDEuMy01LjIKCQlDMTc2LjQsNDY0LjgsMTczLjgsNDY0LjEsMTcxLjgsNDY1LjRMMTcxLjgsNDY1LjR6IE00ODMuNSw0NTMuN2M5LjEsMCwxOC45LDIsMjcuNCw0LjZjNC42LDEuMyw5LjEsMy4zLDEzLjcsNS4yCgkJYzMuOSwxLjMsNy4yLDMuOSwxMC40LDYuNWMzLjksMy4zLDkuMS0yLDUuOS01LjljLTcuMi02LjUtMTcuNi0xMC40LTI2LjctMTNjLTkuOC0zLjMtMjAuMi00LjYtMzAtNS4yCgkJQzQ3OSw0NDUuMiw0NzksNDUzLjcsNDgzLjUsNDUzLjdMNDgzLjUsNDUzLjd6IE00OTIuNyw0ODMuN2MtNy4yLTQuNi0xNC4zLTcuOC0yMS41LTExLjFsMCwwYy0yLTEuMy0yLjYtMy4zLTEuMy01LjIKCQljMS4zLTIsMy4zLTIuNiw1LjItMS4zYzE1LjcsNi41LDMyLDE1LjcsNDEuNywyOS4zYzEuMywyLDAuNyw0LjYtMS4zLDUuMmMtMiwxLjMtNC42LDAuNy01LjItMS4zCgkJQzUwNS43LDQ5Mi44LDQ5OS4yLDQ4Ny42LDQ5Mi43LDQ4My43TDQ5Mi43LDQ4My43eiIvPgoJPHBhdGggZmlsbD0iIzY2NjVERCIgZD0iTTYyLjIsMzM1LjdjMy45LTUuOSwzNS45LTIyLjgsNzUuNy0zMy4zYzguNS0yNC44LDE5LjYtNDguMywzMi03MS4xbDMyLTU4Yy05LjEtMy45LTE4LjMtOS4xLTI2LjctMTUKCQljLTEuMy0xLjMtMi42LTIuNi0zLjktMy45Yy0wLjctMS4zLTEuMy0zLjMtMS4zLTQuNnMyLTMuOSwyLjYtNC42YzItMi42LDQuNi00LjYsNy4yLTcuMmM1LjktNS4yLDEyLjQtOS44LDE5LjYtMTMuNwoJCWMzLjMtMiw2LjUtMy45LDkuOC02LjVjMjIuOC0xNC4zLDM1LjktMjUuNCw1Ni43LTM3LjhjMjAuMi0xMS43LDMwLTE4LjMsNTIuOC0xNy42YzI5LjMsMCwxMDEuNyw5Mi42LDEzNC4zLDE0MC4yCgkJYzE5LjYsMjguNyw0Ni4zLDgwLjIsNTYuMSw5OS44YzIsMC43LDQuNiwxLjMsNi41LDJjMzAsOS4xLDU4LjcsMjIuMiw2NS45LDMwLjdjNi41LDcuMi0yMS41LDEwLjQtNDguOSwxNS43CgkJYy0yNy40LDQuNi0xMjAuNyw3LjItMjEwLDcuOGMtODkuMywwLjctMTkzLjctMi42LTIxNi41LTUuOUM4My4xLDM0OS4zLDU3LjcsMzQyLjgsNjIuMiwzMzUuN0w2Mi4yLDMzNS43eiIvPgoJPHBhdGggZmlsbD0iI0ZGOTlBNSIgZD0iTTQ4My41LDI1Ni4xYzAsMC01OC43LTE1LTE2Mi40LTE1Yy0xMTEuNSwwLTE2NSwxNy0xNjUsMTdzLTYuNSwxMi40LTkuMSwxOC45Yy0yLjYsNy4yLTkuMSwyNS40LTkuMSwyNS40CgkJUzIxOC44LDI4OCwzMjIuNSwyODhjNjIuNiwwLDEyNC42LDUuMiwxODYuNSwxNS43YzAsMC05LjEtMjIuMi0xNS0zMS4zQzQ5MC43LDI2Ny4yLDQ4Ny41LDI2MS4zLDQ4My41LDI1Ni4xTDQ4My41LDI1Ni4xeiIvPgoJPHBhdGggZmlsbD0iI0ZGRTYwMCIgZD0iTTEzMy4zLDEzMS41YzYuNS0wLjcsMTUuNywxOS42LDE1LjcsMTkuNnMyMC45LTUuOSwyNC44LDBjMy4zLDUuOS0xNSwxOS42LTE1LDE5LjZzMTEuMSwxOS42LDcuMiwyMy41CgkJYy0zLjMsMy45LTIyLjgtOC41LTIyLjgtOC41cy0xNSwxNy0xOS42LDE0LjNjLTUuMi0yLjYsMC43LTI0LjgsMC43LTI0LjhzLTIxLjUtOS4xLTE5LjYtMTQuM2MxLjMtNS4yLDIzLjUtNy4yLDIzLjUtNy4yCgkJUzEyNi44LDEzMi44LDEzMy4zLDEzMS41TDEzMy4zLDEzMS41eiIvPgo8L2c+Cjwvc3ZnPgo=",protocol:"uniswap_v2",slippage:!0,blockchains:["fantom"],fantom:{router:{address:"0xF491e7B69E4244ad4002BC14e878a34207E38c29",api:kx.ROUTER},factory:{address:"0x152eE697f2E276fA89E96742e9bB9aB1F2E61bE3",api:kx.FACTORY},pair:{api:kx.PAIR}}};var RS=t=>new bx(Object.assign(BS,{scope:t,findPath:t=>kx.findPath({...t,exchange:BS}),pathExists:t=>kx.pathExists({...t,exchange:BS}),getAmounts:t=>kx.getAmounts({...t,exchange:BS}),getPrep:t=>kx.getPrep({...t,exchange:BS}),getTransaction:t=>kx.getTransaction({...t,exchange:BS})}));function US(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const WS=({blockchain:t,path:e})=>{if(!e)return;let n=e.map(((n,r)=>n===Vp[t].currency.address&&e[r+1]!=Vp[t].wrapped.address&&e[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:n));return n[0]==Vp[t].currency.address&&n[1]==Vp[t].wrapped.address?n.splice(0,1):n[n.length-1]==Vp[t].currency.address&&n[n.length-2]==Vp[t].wrapped.address&&n.splice(n.length-1,1),n},QS=async({exchange:t,blockchain:e,path:n,amountIn:r,amountOut:i,block:o})=>{let a;if(n=WS({blockchain:e,path:n}),a=r?await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountIn",api:t[e].quoter.api,cache:5,block:o,params:{route:n,amountIn:r}}).catch((()=>{})):await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountOut",api:t[e].quoter.api,cache:5,block:o,params:{route:n,amountOut:i}}).catch((()=>{})),a&&!a.virtualAmountsWithoutSlippage.some((t=>"0"===t.toString())))return a};let YS=async({exchange:t,blockchain:e,path:n,pools:r,amountIn:i})=>{let o=await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountIn",api:t[e].quoter.api,cache:5,params:{route:WS({blockchain:e,path:n}),amountIn:i}}).catch((()=>{}));if(o)return o.virtualAmountsWithoutSlippage[o.virtualAmountsWithoutSlippage.length-1]},FS=async({exchange:t,blockchain:e,path:n,pools:r,amountOut:i,block:o})=>{let a=await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountOut",api:t[e].quoter.api,cache:5,block:o,params:{route:WS({blockchain:e,path:n}),amountOut:i}}).catch((()=>{}));if(a)return a.virtualAmountsWithoutSlippage[0]};var VS={findPath:async({exchange:t,blockchain:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if([n,r].includes(Vp[e].currency.address)&&[n,r].includes(Vp[e].wrapped.address))return{path:void 0,exchangePath:void 0};let u,c=[];if(c=[await QS({exchange:t,blockchain:e,path:[n,r],amountIn:i||a,amountOut:o||s})],c.filter(Boolean).length&&(u=[n,r]),u||n==Vp[e].wrapped.address||r==Vp[e].wrapped.address||(c=[],o||s?(c.push(await QS({exchange:t,blockchain:e,path:[Vp[e].wrapped.address,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await QS({exchange:t,blockchain:e,path:[n,Vp[e].wrapped.address],amountOut:c[0].virtualAmountsWithoutSlippage[0]}))):(c.push(await QS({exchange:t,blockchain:e,path:[n,Vp[e].wrapped.address],amountIn:i||a})),c.filter(Boolean).length&&c.push(await QS({exchange:t,blockchain:e,path:[Vp[e].wrapped.address,r],amountIn:c[0].virtualAmountsWithoutSlippage[1]}))),2===c.filter(Boolean).length&&(u=[n,Vp[e].wrapped.address,r])),!u){c=[];let l=(await Promise.all(Vp[e].stables.usd.map((async u=>{let c=[];if(o||s?(c.push(await QS({exchange:t,blockchain:e,path:[u,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await QS({exchange:t,blockchain:e,path:[n,u],amountOut:c[0].virtualAmountsWithoutSlippage[0]}))):(c.push(await QS({exchange:t,blockchain:e,path:[n,u],amountIn:i||a})),c.filter(Boolean).length&&c.push(await QS({exchange:t,blockchain:e,path:[u,r],amountIn:c[0].virtualAmountsWithoutSlippage[1]}))),2===c.filter(Boolean).length)return[u,c]})))).filter(Boolean)[0];l&&(u=[n,l[0],r],c=l[1])}return US([u,"optionalAccess",t=>t.length])&&u[0]==Vp[e].currency.address?u.splice(1,0,Vp[e].wrapped.address):US([u,"optionalAccess",t=>t.length])&&u[u.length-1]==Vp[e].currency.address&&u.splice(u.length-1,0,Vp[e].wrapped.address),u||(c=[]),{path:u,pools:c,exchangePath:WS({blockchain:e,path:u})}},pathExists:async({exchange:t,blockchain:e,path:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>!!await QS({exchange:t,blockchain:e,path:n,amountIn:r||o,amountOut:i||a}),getAmounts:async({exchange:t,blockchain:e,path:n,pools:r,block:i,tokenIn:o,tokenOut:a,amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l})=>{if(s){if(null==(u=await FS({exchange:t,blockchain:e,block:i,path:n,pools:r,amountOut:s,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(u){if(null==(s=await YS({exchange:t,blockchain:e,path:n,pools:r,amountIn:u,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}else if(l){if(null==(u=await FS({exchange:t,blockchain:e,block:i,path:n,pools:r,amountOut:l,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(c){if(null==(s=await YS({exchange:t,blockchain:e,path:n,pools:r,amountIn:c,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}return{amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l}},getTransaction:async({exchange:t,blockchain:e,pools:n,path:r,amountIn:i,amountInMax:o,amountOut:a,amountOutMin:s,amountInInput:u,amountOutInput:c,amountInMaxInput:l,amountOutMinInput:h,account:d})=>{const p={blockchain:e,from:d,to:t[e].router.address,api:t[e].router.api},f=Math.round(Date.now()/1e3)+86400,m=[n.map((t=>t.binSteps[0])),n.map((t=>t.versions[0])),WS({blockchain:e,path:r})];return r[0]===Vp[e].currency.address?l?(p.method="swapNATIVEForExactTokens",p.params={amountOut:a,path:m,to:d,deadline:f},p.value=o):(p.method="swapExactNATIVEForTokens",p.params={amountOutMin:s||a,path:m,to:d,deadline:f},p.value=i):r[r.length-1]===Vp[e].currency.address?l?(p.method="swapTokensForExactNATIVE",p.params={amountNATIVEOut:a,amountInMax:o,path:m,to:d,deadline:f}):(p.method="swapExactTokensForNATIVE",p.params={amountIn:i,amountOutMinNATIVE:s||a,path:m,to:d,deadline:f}):l?(p.method="swapTokensForExactTokens",p.params={amountOut:a,amountInMax:o,path:m,to:d,deadline:f}):(p.method="swapExactTokensForTokens",p.params={amountIn:i,amountOutMin:s||a,path:m,to:d,deadline:f}),p},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i})=>{if(n===Vp[e].currency.address)return;const o=await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,t[e].router.address]});if(o.gte(r))return;return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[t[e].router.address,r.sub(o)]}}},ROUTER:[{inputs:[{internalType:"contract ILBFactory",name:"factory",type:"address"},{internalType:"contract IJoeFactory",name:"factoryV1",type:"address"},{internalType:"contract ILBLegacyFactory",name:"legacyFactory",type:"address"},{internalType:"contract ILBLegacyRouter",name:"legacyRouter",type:"address"},{internalType:"contract IWNATIVE",name:"wnative",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AddressHelper__CallFailed",type:"error"},{inputs:[],name:"AddressHelper__NonContract",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientAmount",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientLiquidity",type:"error"},{inputs:[{internalType:"uint256",name:"amountSlippage",type:"uint256"}],name:"LBRouter__AmountSlippageBPTooBig",type:"error"},{inputs:[{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"}],name:"LBRouter__AmountSlippageCaught",type:"error"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"LBRouter__BinReserveOverflows",type:"error"},{inputs:[],name:"LBRouter__BrokenSwapSafetyCheck",type:"error"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"currentTimestamp",type:"uint256"}],name:"LBRouter__DeadlineExceeded",type:"error"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"LBRouter__FailedToSendNATIVE",type:"error"},{inputs:[{internalType:"uint256",name:"idDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"}],name:"LBRouter__IdDesiredOverflows",type:"error"},{inputs:[{internalType:"int256",name:"id",type:"int256"}],name:"LBRouter__IdOverflows",type:"error"},{inputs:[{internalType:"uint256",name:"activeIdDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"},{internalType:"uint256",name:"activeId",type:"uint256"}],name:"LBRouter__IdSlippageCaught",type:"error"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"LBRouter__InsufficientAmountOut",type:"error"},{inputs:[{internalType:"address",name:"wrongToken",type:"address"}],name:"LBRouter__InvalidTokenPath",type:"error"},{inputs:[{internalType:"uint256",name:"version",type:"uint256"}],name:"LBRouter__InvalidVersion",type:"error"},{inputs:[],name:"LBRouter__LengthsMismatch",type:"error"},{inputs:[{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"LBRouter__MaxAmountInExceeded",type:"error"},{inputs:[],name:"LBRouter__NotFactoryOwner",type:"error"},{inputs:[{internalType:"address",name:"tokenX",type:"address"},{internalType:"address",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBRouter__PairNotCreated",type:"error"},{inputs:[],name:"LBRouter__SenderIsNotWNATIVE",type:"error"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"LBRouter__SwapOverflows",type:"error"},{inputs:[{internalType:"uint256",name:"excess",type:"uint256"}],name:"LBRouter__TooMuchTokensIn",type:"error"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"reserve",type:"uint256"}],name:"LBRouter__WrongAmounts",type:"error"},{inputs:[{internalType:"address",name:"tokenX",type:"address"},{internalType:"address",name:"tokenY",type:"address"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"},{internalType:"uint256",name:"msgValue",type:"uint256"}],name:"LBRouter__WrongNativeLiquidityParameters",type:"error"},{inputs:[],name:"LBRouter__WrongTokenOrder",type:"error"},{inputs:[],name:"TokenHelper__TransferFailed",type:"error"},{inputs:[{components:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"},{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256",name:"activeIdDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"},{internalType:"int256[]",name:"deltaIds",type:"int256[]"},{internalType:"uint256[]",name:"distributionX",type:"uint256[]"},{internalType:"uint256[]",name:"distributionY",type:"uint256[]"},{internalType:"address",name:"to",type:"address"},{internalType:"address",name:"refundTo",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ILBRouter.LiquidityParameters",name:"liquidityParameters",type:"tuple"}],name:"addLiquidity",outputs:[{internalType:"uint256",name:"amountXAdded",type:"uint256"},{internalType:"uint256",name:"amountYAdded",type:"uint256"},{internalType:"uint256",name:"amountXLeft",type:"uint256"},{internalType:"uint256",name:"amountYLeft",type:"uint256"},{internalType:"uint256[]",name:"depositIds",type:"uint256[]"},{internalType:"uint256[]",name:"liquidityMinted",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"},{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256",name:"activeIdDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"},{internalType:"int256[]",name:"deltaIds",type:"int256[]"},{internalType:"uint256[]",name:"distributionX",type:"uint256[]"},{internalType:"uint256[]",name:"distributionY",type:"uint256[]"},{internalType:"address",name:"to",type:"address"},{internalType:"address",name:"refundTo",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ILBRouter.LiquidityParameters",name:"liquidityParameters",type:"tuple"}],name:"addLiquidityNATIVE",outputs:[{internalType:"uint256",name:"amountXAdded",type:"uint256"},{internalType:"uint256",name:"amountYAdded",type:"uint256"},{internalType:"uint256",name:"amountXLeft",type:"uint256"},{internalType:"uint256",name:"amountYLeft",type:"uint256"},{internalType:"uint256[]",name:"depositIds",type:"uint256[]"},{internalType:"uint256[]",name:"liquidityMinted",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint24",name:"activeId",type:"uint24"},{internalType:"uint16",name:"binStep",type:"uint16"}],name:"createLBPair",outputs:[{internalType:"contract ILBPair",name:"pair",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getFactory",outputs:[{internalType:"contract ILBFactory",name:"lbFactory",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint256",name:"price",type:"uint256"}],name:"getIdFromPrice",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyFactory",outputs:[{internalType:"contract ILBLegacyFactory",name:"legacyLBfactory",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyRouter",outputs:[{internalType:"contract ILBLegacyRouter",name:"legacyRouter",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint24",name:"id",type:"uint24"}],name:"getPriceFromId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapIn",outputs:[{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"uint128",name:"amountOutLeft",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapOut",outputs:[{internalType:"uint128",name:"amountInLeft",type:"uint128"},{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getV1Factory",outputs:[{internalType:"contract IJoeFactory",name:"factoryV1",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWNATIVE",outputs:[{internalType:"contract IWNATIVE",name:"wnative",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidity",outputs:[{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountNATIVEMin",type:"uint256"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidityNATIVE",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountNATIVE",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactNATIVEForTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactNATIVEForTokensSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinNATIVE",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForNATIVE",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinNATIVE",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForNATIVESupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokensSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapNATIVEForExactTokens",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountNATIVEOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactNATIVE",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactTokens",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"sweep",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ILBToken",name:"lbToken",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"sweepLBToken",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[{internalType:"address",name:"feeRecipient",type:"address"},{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"LBFactory__AddressZero",type:"error"},{inputs:[{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__BinStepHasNoPreset",type:"error"},{inputs:[{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__BinStepTooLow",type:"error"},{inputs:[{internalType:"uint256",name:"fees",type:"uint256"},{internalType:"uint256",name:"maxFees",type:"uint256"}],name:"LBFactory__FlashLoanFeeAboveMax",type:"error"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"LBFactory__IdenticalAddresses",type:"error"},{inputs:[],name:"LBFactory__ImplementationNotSet",type:"error"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"_binStep",type:"uint256"}],name:"LBFactory__LBPairAlreadyExists",type:"error"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__LBPairDoesNotExist",type:"error"},{inputs:[],name:"LBFactory__LBPairIgnoredIsAlreadyInTheSameState",type:"error"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__LBPairNotCreated",type:"error"},{inputs:[{internalType:"address",name:"LBPairImplementation",type:"address"}],name:"LBFactory__LBPairSafetyCheckFailed",type:"error"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__PresetIsLockedForUsers",type:"error"},{inputs:[],name:"LBFactory__PresetOpenStateIsAlreadyInTheSameState",type:"error"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"LBFactory__QuoteAssetAlreadyWhitelisted",type:"error"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"LBFactory__QuoteAssetNotWhitelisted",type:"error"},{inputs:[{internalType:"address",name:"feeRecipient",type:"address"}],name:"LBFactory__SameFeeRecipient",type:"error"},{inputs:[{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],name:"LBFactory__SameFlashLoanFee",type:"error"},{inputs:[{internalType:"address",name:"LBPairImplementation",type:"address"}],name:"LBFactory__SameImplementation",type:"error"},{inputs:[],name:"PairParametersHelper__InvalidParameter",type:"error"},{inputs:[],name:"PendingOwnable__AddressZero",type:"error"},{inputs:[],name:"PendingOwnable__NoPendingOwner",type:"error"},{inputs:[],name:"PendingOwnable__NotOwner",type:"error"},{inputs:[],name:"PendingOwnable__NotPendingOwner",type:"error"},{inputs:[],name:"PendingOwnable__PendingOwnerAlreadySet",type:"error"},{inputs:[],name:"SafeCast__Exceeds16Bits",type:"error"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"int256",name:"y",type:"int256"}],name:"Uint128x128Math__PowUnderflow",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldRecipient",type:"address"},{indexed:!1,internalType:"address",name:"newRecipient",type:"address"}],name:"FeeRecipientSet",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldFlashLoanFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newFlashLoanFee",type:"uint256"}],name:"FlashLoanFeeSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"tokenX",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"tokenY",type:"address"},{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"},{indexed:!1,internalType:"contract ILBPair",name:"LBPair",type:"address"},{indexed:!1,internalType:"uint256",name:"pid",type:"uint256"}],name:"LBPairCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract ILBPair",name:"LBPair",type:"address"},{indexed:!1,internalType:"bool",name:"ignored",type:"bool"}],name:"LBPairIgnoredStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldLBPairImplementation",type:"address"},{indexed:!1,internalType:"address",name:"LBPairImplementation",type:"address"}],name:"LBPairImplementationSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pendingOwner",type:"address"}],name:"PendingOwnerSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"},{indexed:!0,internalType:"bool",name:"isOpen",type:"bool"}],name:"PresetOpenStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"}],name:"PresetRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"},{indexed:!1,internalType:"uint256",name:"baseFactor",type:"uint256"},{indexed:!1,internalType:"uint256",name:"filterPeriod",type:"uint256"},{indexed:!1,internalType:"uint256",name:"decayPeriod",type:"uint256"},{indexed:!1,internalType:"uint256",name:"reductionFactor",type:"uint256"},{indexed:!1,internalType:"uint256",name:"variableFeeControl",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolShare",type:"uint256"},{indexed:!1,internalType:"uint256",name:"maxVolatilityAccumulator",type:"uint256"}],name:"PresetSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"QuoteAssetAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"QuoteAssetRemoved",type:"event"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"addQuoteAsset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"becomeOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint24",name:"activeId",type:"uint24"},{internalType:"uint16",name:"binStep",type:"uint16"}],name:"createLBPair",outputs:[{internalType:"contract ILBPair",name:"pair",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"}],name:"forceDecay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getAllBinSteps",outputs:[{internalType:"uint256[]",name:"binStepWithPreset",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"}],name:"getAllLBPairs",outputs:[{components:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"contract ILBPair",name:"LBPair",type:"address"},{internalType:"bool",name:"createdByOwner",type:"bool"},{internalType:"bool",name:"ignoredForRouting",type:"bool"}],internalType:"struct ILBFactory.LBPairInformation[]",name:"lbPairsAvailable",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFeeRecipient",outputs:[{internalType:"address",name:"feeRecipient",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFlashLoanFee",outputs:[{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getLBPairAtIndex",outputs:[{internalType:"contract ILBPair",name:"lbPair",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLBPairImplementation",outputs:[{internalType:"address",name:"lbPairImplementation",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenA",type:"address"},{internalType:"contract IERC20",name:"tokenB",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"getLBPairInformation",outputs:[{components:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"contract ILBPair",name:"LBPair",type:"address"},{internalType:"bool",name:"createdByOwner",type:"bool"},{internalType:"bool",name:"ignoredForRouting",type:"bool"}],internalType:"struct ILBFactory.LBPairInformation",name:"lbPairInformation",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMaxFlashLoanFee",outputs:[{internalType:"uint256",name:"maxFee",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getMinBinStep",outputs:[{internalType:"uint256",name:"minBinStep",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getNumberOfLBPairs",outputs:[{internalType:"uint256",name:"lbPairNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNumberOfQuoteAssets",outputs:[{internalType:"uint256",name:"numberOfQuoteAssets",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOpenBinSteps",outputs:[{internalType:"uint256[]",name:"openBinStep",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"binStep",type:"uint256"}],name:"getPreset",outputs:[{internalType:"uint256",name:"baseFactor",type:"uint256"},{internalType:"uint256",name:"filterPeriod",type:"uint256"},{internalType:"uint256",name:"decayPeriod",type:"uint256"},{internalType:"uint256",name:"reductionFactor",type:"uint256"},{internalType:"uint256",name:"variableFeeControl",type:"uint256"},{internalType:"uint256",name:"protocolShare",type:"uint256"},{internalType:"uint256",name:"maxVolatilityAccumulator",type:"uint256"},{internalType:"bool",name:"isOpen",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getQuoteAssetAtIndex",outputs:[{internalType:"contract IERC20",name:"asset",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"isQuoteAsset",outputs:[{internalType:"bool",name:"isQuote",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint16",name:"binStep",type:"uint16"}],name:"removePreset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"removeQuoteAsset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"revokePendingOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeRecipient",type:"address"}],name:"setFeeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],name:"setFeesParametersOnPair",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],name:"setFlashLoanFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"bool",name:"ignored",type:"bool"}],name:"setLBPairIgnored",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newLBPairImplementation",type:"address"}],name:"setLBPairImplementation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"pendingOwner_",type:"address"}],name:"setPendingOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"},{internalType:"bool",name:"isOpen",type:"bool"}],name:"setPreset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"bool",name:"isOpen",type:"bool"}],name:"setPresetOpenState",outputs:[],stateMutability:"nonpayable",type:"function"}],PAIR:[{inputs:[{internalType:"contract ILBFactory",name:"factory_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AddressHelper__CallFailed",type:"error"},{inputs:[],name:"AddressHelper__NonContract",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"BinHelper__CompositionFactorFlawed",type:"error"},{inputs:[],name:"BinHelper__LiquidityOverflow",type:"error"},{inputs:[],name:"FeeHelper__FeeTooLarge",type:"error"},{inputs:[],name:"LBPair__AddressZero",type:"error"},{inputs:[],name:"LBPair__AlreadyInitialized",type:"error"},{inputs:[],name:"LBPair__EmptyMarketConfigs",type:"error"},{inputs:[],name:"LBPair__FlashLoanCallbackFailed",type:"error"},{inputs:[],name:"LBPair__FlashLoanInsufficientAmount",type:"error"},{inputs:[],name:"LBPair__InsufficientAmountIn",type:"error"},{inputs:[],name:"LBPair__InsufficientAmountOut",type:"error"},{inputs:[],name:"LBPair__InvalidInput",type:"error"},{inputs:[],name:"LBPair__InvalidStaticFeeParameters",type:"error"},{inputs:[],name:"LBPair__MaxTotalFeeExceeded",type:"error"},{inputs:[],name:"LBPair__OnlyFactory",type:"error"},{inputs:[],name:"LBPair__OnlyProtocolFeeRecipient",type:"error"},{inputs:[],name:"LBPair__OutOfLiquidity",type:"error"},{inputs:[],name:"LBPair__TokenNotSupported",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"LBPair__ZeroAmount",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"LBPair__ZeroAmountsOut",type:"error"},{inputs:[],name:"LBPair__ZeroBorrowAmount",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"LBPair__ZeroShares",type:"error"},{inputs:[],name:"LBToken__AddressThisOrZero",type:"error"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"LBToken__BurnExceedsBalance",type:"error"},{inputs:[],name:"LBToken__InvalidLength",type:"error"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"LBToken__SelfApproval",type:"error"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"LBToken__SpenderNotApproved",type:"error"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"LBToken__TransferExceedsBalance",type:"error"},{inputs:[],name:"LiquidityConfigurations__InvalidConfig",type:"error"},{inputs:[],name:"OracleHelper__InvalidOracleId",type:"error"},{inputs:[],name:"OracleHelper__LookUpTimestampTooOld",type:"error"},{inputs:[],name:"OracleHelper__NewLengthTooSmall",type:"error"},{inputs:[],name:"PackedUint128Math__AddOverflow",type:"error"},{inputs:[],name:"PackedUint128Math__MultiplierTooLarge",type:"error"},{inputs:[],name:"PackedUint128Math__SubUnderflow",type:"error"},{inputs:[],name:"PairParametersHelper__InvalidParameter",type:"error"},{inputs:[],name:"ReentrancyGuard__ReentrantCall",type:"error"},{inputs:[],name:"SafeCast__Exceeds128Bits",type:"error"},{inputs:[],name:"SafeCast__Exceeds24Bits",type:"error"},{inputs:[],name:"SafeCast__Exceeds40Bits",type:"error"},{inputs:[],name:"TokenHelper__TransferFailed",type:"error"},{inputs:[],name:"Uint128x128Math__LogUnderflow",type:"error"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"int256",name:"y",type:"int256"}],name:"Uint128x128Math__PowUnderflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulDivOverflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulShiftOverflow",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"feeRecipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"CollectedProtocolFees",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint24",name:"id",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"totalFees",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"CompositionFees",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"bytes32[]",name:"amounts",type:"bytes32[]"}],name:"DepositedToBins",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"contract ILBFlashLoanCallback",name:"receiver",type:"address"},{indexed:!1,internalType:"uint24",name:"activeId",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"amounts",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"totalFees",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"FlashLoan",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint24",name:"idReference",type:"uint24"},{indexed:!1,internalType:"uint24",name:"volatilityReference",type:"uint24"}],name:"ForcedDecay",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint16",name:"oracleLength",type:"uint16"}],name:"OracleLengthIncreased",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint16",name:"baseFactor",type:"uint16"},{indexed:!1,internalType:"uint16",name:"filterPeriod",type:"uint16"},{indexed:!1,internalType:"uint16",name:"decayPeriod",type:"uint16"},{indexed:!1,internalType:"uint16",name:"reductionFactor",type:"uint16"},{indexed:!1,internalType:"uint24",name:"variableFeeControl",type:"uint24"},{indexed:!1,internalType:"uint16",name:"protocolShare",type:"uint16"},{indexed:!1,internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],name:"StaticFeeParametersSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint24",name:"id",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"amountsIn",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"amountsOut",type:"bytes32"},{indexed:!1,internalType:"uint24",name:"volatilityAccumulator",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"totalFees",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"TransferBatch",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"bytes32[]",name:"amounts",type:"bytes32[]"}],name:"WithdrawnFromBins",type:"event"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"approveForAll",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"id",type:"uint256"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"accounts",type:"address[]"},{internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"balanceOfBatch",outputs:[{internalType:"uint256[]",name:"batchBalances",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"batchTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amountsToBurn",type:"uint256[]"}],name:"burn",outputs:[{internalType:"bytes32[]",name:"amounts",type:"bytes32[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"collectProtocolFees",outputs:[{internalType:"bytes32",name:"collectedProtocolFees",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ILBFlashLoanCallback",name:"receiver",type:"address"},{internalType:"bytes32",name:"amounts",type:"bytes32"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flashLoan",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"forceDecay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getActiveId",outputs:[{internalType:"uint24",name:"activeId",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"getBin",outputs:[{internalType:"uint128",name:"binReserveX",type:"uint128"},{internalType:"uint128",name:"binReserveY",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBinStep",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getFactory",outputs:[{internalType:"contract ILBFactory",name:"factory",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"price",type:"uint256"}],name:"getIdFromPrice",outputs:[{internalType:"uint24",name:"id",type:"uint24"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"bool",name:"swapForY",type:"bool"},{internalType:"uint24",name:"id",type:"uint24"}],name:"getNextNonEmptyBin",outputs:[{internalType:"uint24",name:"nextId",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOracleParameters",outputs:[{internalType:"uint8",name:"sampleLifetime",type:"uint8"},{internalType:"uint16",name:"size",type:"uint16"},{internalType:"uint16",name:"activeSize",type:"uint16"},{internalType:"uint40",name:"lastUpdated",type:"uint40"},{internalType:"uint40",name:"firstTimestamp",type:"uint40"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint40",name:"lookupTimestamp",type:"uint40"}],name:"getOracleSampleAt",outputs:[{internalType:"uint64",name:"cumulativeId",type:"uint64"},{internalType:"uint64",name:"cumulativeVolatility",type:"uint64"},{internalType:"uint64",name:"cumulativeBinCrossed",type:"uint64"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"getPriceFromId",outputs:[{internalType:"uint256",name:"price",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getProtocolFees",outputs:[{internalType:"uint128",name:"protocolFeeX",type:"uint128"},{internalType:"uint128",name:"protocolFeeY",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getReserves",outputs:[{internalType:"uint128",name:"reserveX",type:"uint128"},{internalType:"uint128",name:"reserveY",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getStaticFeeParameters",outputs:[{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapIn",outputs:[{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"uint128",name:"amountOutLeft",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapOut",outputs:[{internalType:"uint128",name:"amountInLeft",type:"uint128"},{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTokenX",outputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getTokenY",outputs:[{internalType:"contract IERC20",name:"tokenY",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getVariableFeeParameters",outputs:[{internalType:"uint24",name:"volatilityAccumulator",type:"uint24"},{internalType:"uint24",name:"volatilityReference",type:"uint24"},{internalType:"uint24",name:"idReference",type:"uint24"},{internalType:"uint40",name:"timeOfLastUpdate",type:"uint40"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint16",name:"newLength",type:"uint16"}],name:"increaseOracleLength",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"},{internalType:"uint24",name:"activeId",type:"uint24"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"bytes32[]",name:"liquidityConfigs",type:"bytes32[]"},{internalType:"address",name:"refundTo",type:"address"}],name:"mint",outputs:[{internalType:"bytes32",name:"amountsReceived",type:"bytes32"},{internalType:"bytes32",name:"amountsLeft",type:"bytes32"},{internalType:"uint256[]",name:"liquidityMinted",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],name:"setStaticFeeParameters",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"swapForY",type:"bool"},{internalType:"address",name:"to",type:"address"}],name:"swap",outputs:[{internalType:"bytes32",name:"amountsOut",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}],QUOTER:[{inputs:[{internalType:"address",name:"factoryV1",type:"address"},{internalType:"address",name:"legacyFactoryV2",type:"address"},{internalType:"address",name:"factoryV2",type:"address"},{internalType:"address",name:"legacyRouterV2",type:"address"},{internalType:"address",name:"routerV2",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"JoeLibrary__AddressZero",type:"error"},{inputs:[],name:"JoeLibrary__IdenticalAddresses",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientAmount",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientLiquidity",type:"error"},{inputs:[],name:"LBQuoter_InvalidLength",type:"error"},{inputs:[],name:"SafeCast__Exceeds128Bits",type:"error"},{inputs:[],name:"SafeCast__Exceeds24Bits",type:"error"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"int256",name:"y",type:"int256"}],name:"Uint128x128Math__PowUnderflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulDivOverflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulShiftOverflow",type:"error"},{inputs:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"uint128",name:"amountIn",type:"uint128"}],name:"findBestPathFromAmountIn",outputs:[{components:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"address[]",name:"pairs",type:"address[]"},{internalType:"uint256[]",name:"binSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"uint128[]",name:"amounts",type:"uint128[]"},{internalType:"uint128[]",name:"virtualAmountsWithoutSlippage",type:"uint128[]"},{internalType:"uint128[]",name:"fees",type:"uint128[]"}],internalType:"struct LBQuoter.Quote",name:"quote",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"uint128",name:"amountOut",type:"uint128"}],name:"findBestPathFromAmountOut",outputs:[{components:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"address[]",name:"pairs",type:"address[]"},{internalType:"uint256[]",name:"binSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"uint128[]",name:"amounts",type:"uint128[]"},{internalType:"uint128[]",name:"virtualAmountsWithoutSlippage",type:"uint128[]"},{internalType:"uint128[]",name:"fees",type:"uint128[]"}],internalType:"struct LBQuoter.Quote",name:"quote",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFactoryV1",outputs:[{internalType:"address",name:"factoryV1",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFactoryV2",outputs:[{internalType:"address",name:"factoryV2",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyFactoryV2",outputs:[{internalType:"address",name:"legacyFactoryV2",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyRouterV2",outputs:[{internalType:"address",name:"legacyRouterV2",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRouterV2",outputs:[{internalType:"address",name:"routerV2",type:"address"}],stateMutability:"view",type:"function"}]};const HS={name:"trader_joe_v2_1",label:"Trader Joe v2.1",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABvCAYAAAA0YEQFAAABAGlDQ1BpY2MAABiVY2BgPMEABCwGDAy5eSVFQe5OChGRUQrsDxgYgRAMEpOLCxhwA6Cqb9cgai/r4lGHC3CmpBYnA+kPQKxSBLQcaKQIkC2SDmFrgNhJELYNiF1eUlACZAeA2EUhQc5AdgqQrZGOxE5CYicXFIHU9wDZNrk5pckIdzPwpOaFBgNpDiCWYShmCGJwZ3AC+R+iJH8RA4PFVwYG5gkIsaSZDAzbWxkYJG4hxFQWMDDwtzAwbDuPEEOESUFiUSJYiAWImdLSGBg+LWdg4I1kYBC+wMDAFQ0LCBxuUwC7zZ0hHwjTGXIYUoEingx5DMkMekCWEYMBgyGDGQCm1j8/yRb+6wAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAABPXpUWHRSYXcgcHJvZmlsZSB0eXBlIGljYwAAKJGdU9mtxCAM/KeKLcH4JOUkJEiv/waeuaJslP3YHYkgOWbGHkz4yzm8Klg0QEXMCSaY2qa7HsaGgmyMCJJkkRUB7GgnxjoRNCoZGfyIRlZcNVyZd8L9V8bwZf6irGKkvX8oI4wc3IXWfS808qiY1a5xTGf8LZ/yjAcztxSsE0SB+cMF2I3uylGHACYXeIwH/XTAL8BwCqShTNl9zSaztRNxepRV9BCRmTBbcQLzmPi9e+HAeI7BBVpWbESUSu+JFnhMxGWp+2ZJeoH7es8L3fPuHZTUWtk0lyfCOi9wGxcDjYYar9c//AFURzuIa5/UXVpFkcaYrbLdPPLJ/mDe2G/ezQqrd9UzLWOZV6QeVOlJ7Mrqj6kS49Fj5J/KQ05OGv4BiF6+ZwMoFgoAADX7SURBVHja7b17mB1XdSf6W2vvqjrv02+13tZblmyDLFu2wYAdwiMQM4GJHJhkbgjMmHxwYZJw79xMEi7tzP0yk3wkMxnu5Bu45INkJpCRZpLwGJyEEAmMjTGW8Uuy9bDe6m71u8/7VNXe6/5RVefRaj1stS0leH9q9TmnT1Xt2r+91v6tx15FeK29Yk0AwsgIAft57EDeTSvlSqUix2dna7cdOBAsxTXoWt/kP8YWA6fOHjzouKWpzWpi6qdC07jLMvrY2mkY2RMUlv3l6u9/v36113oNwCVsAhB27+ZJTKbTyO8yfviAP3ruJ4Og3FdO+Wh6DThiUZjSZ90g9QunC0Pfv1pJ1Nf6pv+xNBkZYUwczJTm5U2psOdfmND8RFibL856ZYz3zqOe8sFOCMcJIZIa7htV963J158UICRAXu51XwPwKpuI0NwvvbdYOXnknWT5X7CYt4Shr2szozJuzsv5YpXENYAOCWxhlUijELCcC28cHDN0NeABrwH4spuMjHDthReGK//bz71HU+qfM8utAqTCRgXzEyfkrDsjc8UGWW2IlIBYABIIAcICYdixXNlcbT9eA/AlNhkZ4ZkXfrSyfOzZ97PLHyLwRlJKwxoElTlMT7woJ9w51LM+GWWJlAWzgEnADDAJVMiARWl5vScERq+qP3ytB2RJBlWEZGTkFb2XkZERLn/gvu2lI8/8oaedH7LS/46Us4W01oCgWZ7FxORRe8SZRzkVwichwwCIAAKICJpFFAOqQdaCzmL79h9PCRQB4UsjHmbH+88/8tyqI3fe+Lra2HT/D4sZMlZsaGQqNOGpQPhskMud+6mZmfLLWWsEoGMf/yl3YNLZ5hx75mOkvQ8QqwwRA8QROCIIqiWMT78oR3WZ6q6BkBAAaAEsACUQJgFYABHohmpSiOexd6+92rH4B2NGiIDw4AhhZW2LhX1fc2LqvtH/9cMbJg+e7KlXGo61lmwEkgjBCtA0QAWCow7Rn4XWfuVdQOnKriWEBx90KkeeeSOA3yLmNxCzB1YUjVgMHgTN6jzGzh+Vw5hF2QlB2hKxQCkLrS2UsvCUEVdZuNqCA8HwM/kzuZL7vhWnpw5c7bj8gwBQRka4OTyzQSvnQRK8q/rCyczzX/obXZ2tkhGJUANgAElet44FIARfQD8wIp94L/AsRYKx6HVqo8eW2Wr1fTDyy9DqRtaOiiQtHiqmGDzAL8/J6fPP4yCVUFUWpC0xCxQLtDbQSuBpK642SCkDrSwwS1j2bP7bGv0/u+H48fmrHZvrWoWKgLD3D1K2fO4Xteh/Q5Dh6vOn1HOf+19crTaoE6z4NdkFnxEgELgCuZuI/uqrIu8B8GzXdR54wKmcP7+p8sJT7yfgg+zolXA1g1Q8JaITgbjVsWZpFmcnj+IZKaPMFswWDBFAoFiIYyFlEjhsobQIhQI97ogXqIfWnjleXooxum4BFBHClx4sGnPuPxHRPyURR6p1PvqVfVytNlpAESJxSsDsFK0E1PgtschaQ/Q7nxN539jIiPnlRx8d0J68ozR59p+zp98Ix8mQ40ZSJtQGDzF4BIgImrMTcnr6OA5IBRVloZVACAIWsIqOsQJyCKLYgpUIQSDzhOy8cw7s/OXFtMA/CgBFhOpf/OQqV+iPCHgbRDRMiKnvH6S58dkuKUtoXOdnyfsLzguQZnrzW7du+mDPI3//OpXP/ox23eWkNZPWgNaIiLkk/QCBWkxSrEVt8qwcnT8tP7J1qkfgiSGBQ2IViRDAIJAiEa0MlGNFsQiaIG/UNZma+58fP33+9FKN1XUHoIgQ/vQ3+lxLf0xEbwJEQSzQDHD+B4fRueYt/AHaEhkD1l7kiVAs5mXV+rXZ/lXDn9XptEuOJlIxcMTxt+MzWQuiZL0jWBOgMnlKDlfG5QlTp5AtNAtEAMUSKiWiInuPmGGVEtZaxGERMkLuaW2KU+n/Wsgt/6P7MXvV5sN1CaCIED77CdfmUp8iojdBrANrAWvhj8+hND5zUXXZOkcHYAwgnUphcPmgDKwcpuLQAGnXUVBKgTkCTukWKWmfVABumwnGr2Fu8pQcrk/LM0GNfBLRLAQWYRLLJFYRDLMlxYBWolhbcZQRDi3SJ5xqcSz9X4fQ85u9hw5VlnLMrisAgQfJpJ2fI2s/DEBHnEAAK6iPTSMIDHUSlE7QWiqUCFopDAz1yfIbVlFhsB9OyiNSCmACsQKYIYohxCBIpCo7T8yR1EEEQb2MuelT8lR9Vg6HDfJhRUVLpAgAIhFmGKVsoBRIKSsOi0rrQNzAhvnT7rHi+fTv1qreX/SeP1ld6hG7bgCUkRHGl+bWkPC/BsOFMZE1BwuIoD4+E2GJtmokAEKRaaYVI1vIYXjNCgysHEaqkCPSDqhF+zniJUQtdUkxYJH8xWeMtaiIhV+ZlqmZs3jaL8nRoE4BIKQgloSYRYhElIJhFsMsVrF1XW2Up8IJrylP95xO/a0edb++8czciaUiLdclgLHhzKFPH2HCBhijYAUQC9hIAmuTc7Cx3BEi15TSCinPRbGvKD1DfSgMDUAXsmQVxJcAsCFIOLlGzCojMCmJA4iF2BCw8doqFiJG/EYJk80qPd6YlwkTUkiwIAhDLDEJE0JX29Bzw6arw5qnTNVR9qgi+9ew9jvDwNltP6jXCPVXBLjrCkDcfz/jHRtuYMsfgNi26jSxeFiLoFKHBYiY4TgK+WwGub4CUsP9cAYL5HsKY0oh1AEEBrBEEICtBVkLismPslaUWHLEgolFFEEIqJsm6n5DAmOoag2NBU2cqNelbgRakWFCQ5FUlcKsVjitIIc9x55xdHA+44bjFIYnzpVw+hMPwcdVhoj+QQEYR7FhZx//BTCWQYRaNCXWmdII4GbS8HIZ8Yp56GKG9Loh+JtWwgz3wikW4BT6kM0PQKdyYC9LVmdgVWwWWAMThPCrJfhnDhJLCOs4sLF7xRiDqdGz8p3vPSLVStU3Ydg0QIUI55n5HAHHteLnlQRnmflshpyzU33Fcnn7ofDTI5CrjeldTbvmrjQBaPI/fzTbr7zvAnIzxFLEPAUILaQZIqg0MXZ2FmPzFZZ8ivK33ACvNw92XeRXbUFh/Q5wKgd2PIiNSEl0cxILsMBai8bMJGae3QcFiRkmINZAjIFYi9FzZ0vfe/TR35ienn40DZ5oVoO50p2r/M99/sBVRc1fyXbtARwZYayo3mIl3Adr8jA2Up1BCEsa4YqNUh9eR/VsD00ffJQ8qhIxoLRCz5ZdyK69GazTiNCIjO2WCo7NALEC4/uYeO4R+NNn4LguEpYp1sTCLmj6FjZV/O/pFRv/z41veceZaz02V9KuuQoFAMtyN3ybgrFAaABokdXbxWy9DVi2ll3W3Dh7mNJeAFgGxCK3chNya28BlAsJmgiqVYR+AzYMQaygtAtSDGtChM065k8eQmP8OBzFIM8DENkBzBoWQGAI6bWb4Q2seK9yU2smz537pcGVKw9f67G5XLv2AC5friQ8ejuFohBCZGidNdvvgl22limdYwui2uQo1U/8EAQLEQs3V0B+zU2wfoDy2BGUzh6BX5mHNSEoZpoUx6rFhoBYkAkgfgDjKOhMvsMOAYyxcJZvhdO3AkLsWhPemVLqQRH5IBE1rvUQXapdcwBL6vF81i9shpOxdscbrVm7TSGVUeRlyJKioDpP9fPHgKAWGdzM8HqGUZuZwPyJv4NtRp870mEGJOtgbCbACkwQRhrVWMAaQDmIAhWCcsOAqyFmZg4j3z+IXP8gBc3m28rl8u0AHr7WY3Spdk0BFBGn+e2v7ILfGAxvuMXY3iEX2iNol0hpQhggbFRhSpPJEQAIlbETkPHTERACkBWIWFgbrXdhELYFTAB0rYuAiAFBgwAEocXh54/Af+IpMDPShV7csOMurLp5ZyHd378BrwG4aKOJg/uyZ7/2mQ8K86/q/MBwLpP1HJ0iaA2wIhsGZAI/kjrrR75N1pCYrMAaWCuo1nycODOJyal5lKs+XK3heimsHO5Bf28BygZw4mQiLQBIWk5qsYJSuQK/WoWKPTrwGxh97nEUe3spPzhcFBEiouuSgQLXAEARoZPf+PyW0nN//x8lqL0VJKpZGiOVGxCV7YNiJdYaMqGPsF5DOHcO8KPYp8TM0VqgVPVRV3l859HncOjwSRCAFcuGMTDUh3ve//PIFQpgsajPTmH80I+Q9meQcwQAQ4yNgnUCzM7MR+YGEZTWMGEIv1rD6DOPNdGsvbj53buvW/CAVxlAgdChvQ8uc4P6n8CGt4kVBgMgQVidjdxaImRNiMbkSTTOPgtTm4OYsBVbtRYwBpieq8NdNoyJuSqstchnc/j5X/0VkBX0L1uGZq2ObP9y9K/eACedxejDXwO5iEmOAMQQhGg0GrGqJYxNVTA+PYeefBaOdpWET15rfC7bXlUADx3c67hP1f4fmHCnWGGBAJbiCHi0TlljqDlzBrXj34cEPsTaOFEhdv/HDudlAznUK2exfW0fTL2Cas3HN7/85+AghOd6KBbyeM8nfi0iNY0SMi4iu48QrZ1xdkTghxAR/Oj4KM5Ol7B25RqsuflWpFIIxZSva+kDXkUARYQO/c9/ux1if8aISHlu3tarVeoZ7CcvlQIpN+Ijfg21k09CAh8ARYZ5zPeJFaxE8QhXKzjZNN5wy3psXT2Ic+fncOL0OOZKPtKeg51vej8IgkZpFvXTh+AqaRMb2w4fERFCIxifLWHj1u3YduM2OFrB68kGbtVfkryVV7K9agDu379frTT+T0MoX6tWaXpskppNn9K5LLx0GuzlCCDUzx+Dqc0iTkdCJCqRQ1+S6JKJzARrozWtr6eAnkIOm9Yuw8xcFexmsWwgg/njT6M6fgphaRrKUJSgGXtfKPaMKa3AADylMHX6FJ6emsJNu26D6nHnqF4vX+8kRr0aFxGAmu97c1Y1Jz8p1mwozc5TebbM1lgU+3uQyhWQW7MDKtuD+rmDsLV5RJ6S2KZDlLpgrYVYC2Ns9Dp2kwWBgTUCZoVs2kNaA9XzZ1AZPYGwNANXUxSjFYkyxZSCyuQgAtSqNZTmS8i6DsSEKHiEDBpQtbmU9YP1L/79Nw5s/Mn7Zvbv339dgviqpNYTgGUFVgCtEhHy6z5FKpHgpVNQqTx0ti/yWSbgWWn7NePX1liYWPpMaBH6IcIghLWC0Bj4fhCBC4okNDRIpzW8tAPHVVAcO7BDHzAhWCkUiwUAwFBvFttuGMTaFb3IKJF6reqVG413hDb403vDsQ24DvzG1wxAACKhL5bYEyEyYUgCIFfMQ7sunMIysJOCtSFgwlZEXCSWvvgk1ghMaBAGJgKKNESlAScL6BTCUNCoNeHXmzChgesxPE8j0gECUgQiwBoL22yCFCOXz0I7TjQYzGAioThUH4YB1Rr+rZUg+Ff7Rj7oyXUI4qu1BtIsAAiFzEAml5FqqUK5njyYNVL9NwDsgElAjgv41Ygxttxh0XonIoDScAt9yAytg1PohxAjDAL4jRrCWgWN+WmUzryIsFZCLptFEleM0gMZlgSwFqZeBWdycFIu+gZ6MTE2AREBE0EgZEFgiBhjOAjDfwqk/t/9Ix88uW//yfDe/fsNrpPw0quzBoqQf+yQajTmfxoSrFMOi4hQsb+X3OIQCjfcDnIzINYIqjMwlZnowGSdA8FagUrlUFj3euRvuAmZwRVwMnkoLw12XSjXg3LTcPI9cIr9qFercNGE56qOhKU439MKSAxUKgOlXWhmTJyfitdIQvQPoCQTm8jNpHM/DOs47t40lNq97S77Z48//oqmSlxXAI6MjNDcRE1J8/wG69fvZiKkMmkorSmz6iakhzbG6X0AkUY4Px7lsxCB4rCsk+9HYeMuZJfdAC9bADtuO5eTFUg5IMcBs4JyXKQLPfAbPhxpgCMrsiUzBIK1NjIrUmm4rotapYZqtRbBFduazATWGm6uIIPbbzf9m7efDUr+rE4L79iWtw89fuyag/jqALh9u2quXu2Sl3qjPz96l1hfEYN0ukiF9W+EThdBrKKUZu1AiCIpFAsQoNNF5DfsQrp3OZTrxV6UyLiIVCtAzGClQNqBdlwo7UKUi3qlCmWb4NgUiRaxOPgbBmDtgl0P6bSHqYkZWGNAABRrKa5cT2vuvJdW7XyTyq5Yu11l8z+XHlymBXPPEHL++x5YEe7de+iaqtJXBcAVP/mT+uZB7YXp4gMGzrBUJjJETKnVr0dm+RYopVvqiiDQ6SI4nYeYAMwKmbW3wusdBmsnckIDre1dEkf+IgcZgVmBlAY7LpTjwbJGrVyBY5tgktiRE8NoJGKjngfHdUDMmJudByuNFTffTuvvfjsyfQNQXgqsHWLtOOyldjipnoni7OgLwFDwJ1/dH15LAF9xFioi1NvbS75T6COd3ub0rw2ameVNLi6X9PBWsHJBlMwjArEGKRde7yrk1u9CduOd8HqXg5UTSx6BlAIzg4hBTLCxnQi0wWXtwM3lkVu2GunlG1GnbJRm2kqXB0ACG/gozc2iVJpHvpCB1hrDN+7A6h1vgHJcsONBOR5Yq8h+dNyUKvR9OCwMFcPzdS9Ou7lm7dVgobR9+3ZYqr+OQEUmcrMrtvqpTNFxsr3EHEseRbYbmEFQABEUMRw320p/FxBYRV221kJIEJoQvh9GPlNEnhXiiIWQ0nCzOeSWr8Fcs4bmxFGkbD1JLAVACECoVBstf2vv6g1YveMu6HQW2ktFqplV7EwQWGOJlV6dXrn+pjW12vSevbv5fuxdsr0O1xWAIkKf//zn1e6d69ON7LKfEoijWLvZ4rDnZAusHBeEFuWL4nRATCDibczxVi8hQMVSSBBYiWzCeqWKY0/9CC8eOojQWty483as374d2nUiEqQc6HQOhdUbUQ6bMJOHwbHj3IBQDiTKZATB6hzW7rgbXr4IlUqDdUyKlIoz2wIQkYhopbzU0Jhv3Nz4sEZ7k9Sr3l5pFUo7d+5EWQ+uEqI7CVaTYsVuSmk3BW7T9PhXtDpxvL5BqUhtEoE5GkzW0Z6GaHOC4Id/9y18879/BSeOHcWWHbdBaQcnX3gBzVpUxUoAkNZwMnnkbtgGWrYZwg4sMSqhwAhBhBDCxcC2O5AbGoZOZaC1A8UaSukIRK2glANWKt45yGEmM4C02uqMvMIFFi7VXjEJHBkZ4b1799KOHTtYB/V7mGhYrGhiR2vHI2YVSV+8kYQWlLwhVmjtWlDR+hNJlILYENYazJw/j7mZaazbsAkz83PYsuNWZLJ5BM0Gmn69bccxwI4HN98DXnsLgv6VCObGwbMzcAVgL4P8ys3ILFsR2ZPKAbMGJ2utUiBrAQ1IYCFCDZbwfE/amszAKvr0Rz+KkZGRf/gAtlxNIth7//20fvly9srlfqSd+8CcI2il3JRyXA+aNSgqnAISQCj2liQbTJKtehTvKCKK1zZupUQ06nXc8RNvw6nnD+Lct/8O506ewKbtt8DxPLDWEdASObqhFJgIOl+ESqfh9i5DZo2Jz6vBXgrK8aCUhtIaRAqsGMTJxNFgQGwYComMKsE5k81COQ7t3bv3mhGZpZXAyJMhIw8+yG/56Edpol7nIVe9BUQ3A6ydVE45jktJzmYERnJsLI0xzZfYREh2yCbrpCQJuyAMLF+OMLRYXq9jePkKPPY3D+GGzTfCcR0wMywUWBgQRH5WYijtQJQGu1GkA2IjG1RHxzArMOsIOKb4fdRXa0OIiHXSqbEQTrky06T6qgqtXz/LuEbr4JLp7iRuJiK0bds2AoCtfX09IPoZYu5hpUgpxUo54JiwRIBxS7oiKhgnxBODmBPXVntLWEJ4mJEtFJHN59G3ciVuueNO1GZn8Njf/Q3CIOwiRaw0WEVraJT0Gxn72nGh4p8EtOg7HIPH8V7QuFCFiCjtmFxP/42ZzZt3ecWiBXqvBW5LC2AMHoAocAtA5fN50hnvToLcBZBiZiZW0feS3a/olEC09qJHZVhiczvezxf9ojg7jePB1dCOi1Quh7U33Yxd99yLZx99GN/52l+gUasD4Jb0MKsYSI1ERxMrsHLi3wzF0d+JGIzomFafABARpbI5h1gtZ+X9X/ldt24Ig/Oyc+cD18yldtWeGBGhB4loPyAjIyO8rLxMF9cVbQ+VC6l0/tesyE6ttVbaYaUdYqUi9QmOLIRkh2xiYCeSQ21yQ7HEtdGmOEgRHSdWQEohW+hBb28vjj33LM4cfxF9Q4NIZ3Nd52ivodwiUUwKrHUshRzbfhxLHrXsxvZnUETcJ6L6OD/wN/39/Uu6bfqltKtdAykWvdbOyTPeGbvzCCh7xx1vsdbeA2KHmCMB5EStRYdY25IFtCQzBig6OUfSyAqt7bQxU2LFkS1nAeU40GKRLuSxZtt29C1fjtNHjuCRh76B/uEVWLt5C3oHh5BKp9tslggWUTKwCXxIU5DKZOAoHUstdXQldgwwAwKOpJe1Vs67e3I9nzpz8MynV29fPXMtALxa9sQjGMGn5dPy4IMP0raD22jwo4O0eWBguS/NLxhj36K1o9O5PLmux452I4bHSUWIeGBioNBhF9ICSWz1NA4JtbKwjYUNDYIgQBj4sGEIYy2sCRE0fcxNTWLi3Dk06jUoreG6HrxMBql0Gtrz4HkessUeFHr7oHWkPkkl3qEkpJQw4IRZRRPQhAa+36yKmD+cmpv591u3bn3Vk6CuRgKjIR0BvvGNb6R37eozlW0IV9XrKpTmL4VBuEus1eylwMzExLF3pT1nEkKCWDKFEtaJLpXaWf1jYQ+YI8ml5PxaRwu7uHBTaWSLRazcsDFmohbWGhAxtBOZCxzbmwlY1NGHqE5MV5e71HikUZAVwcf7i/3N8fHx3x8eHl7yQgavCIAjAI3E5xgcHNT1es5Pp0FOLrfN98OfD0I/S0qRjmJ0xCpmmy0CEa1BUeWI5G+dc6Nr1NoIxqZEp90vMcFhpUEsMeYdBQvi322JTrw98bkTppuo8uT7aHOrjo50dIuhWEFE8gL5pLZspqenP9vf339FRfWuFYCt0d2zZw8Vi0UnfzrfuAOn5dzNa3saDfvrzVp9bTNoqN6eQdHa4WjhbxvgXa8XSCVwwduLdiPqSJwWH18D6KiudMGoU1zysR2KotYXOulwAhy1NsjQwvkEgATQKsqnCYKgIIRfl2a4ZXR09LdWrFixZNWYLtVethmxbfduAuDm83l7EAfNQ7mcrlbsR/xG451zpVlXQHAzaWJW1Ar9tIBDh51GCwSuY6Q6KPwFIHPbf8rMYM1gFQd1YxdY9D5yhUHFXp/EdEnUJbftxU493dWdmEDJAjUukeMWSms4jgMIcgL6gAv3/xs7dWq7iFzRVHy1AaTdu3cT7trtFosNPnv2rD84OEgb+nveFfrNX5mcGMuVyyX09A6I43iUOIM7Z3oLSOYLgEtUWXvgusegu/5ch5kR+0ujH449PYkkdqxlnIDXnhPdsHWbL93qtd2d1jGxe09pB67rgmCVRfhW18t9fWps6gNy5kz6lQTwJc+Q3bt3q1/dvdttDg4qAI17ABzNujf5gf/lqanzm48cfV7tvP2NdvmqtXAcj13XhU6oecvTodrgJSDFeqptvNOiAEbZanH8EBJt2ERUE8gmCMeZbC1lKJ2HL8KGOr5CHRLfpV5b62o3o5J4coiJ3HJh4KNerwNM4nmpuTBofrEy3/jsDVtvOE1ES27wvyQJFIA++q53OcXBQXXkyJEmABxKq81BGHxubm5m09PPPqX6B5fZwWUroZXDWuuOtYlic4FbAdfu6DgtUFsLiUy7da1pMWOlyLqO3XRoGfotPNEpvR1iFFuw1MF82+67topvseP4aGmB3hFNAUFpB6lUCjYMqVqa7wXUv8r35L4xcWb8l1984oniUqvVKwZQRGj/F7/oDd1wg8bkpD82NiarHGeLCcPfn5me2PHMM0/qQqEoN998m6TSGXZcF1o7bWoeu6uYqRu4hai0Bo0Wwa/9txbFb4Wk4n6250PbHYf2KbskqEMDJKBRp1Zo4Ucdxyffb58m2sIRM2vFcBwX6XQWYgVz05PKBP52x3P+Q2HFqq9Onh7ffeqZU70isiRuzCueDXv27HG3Dw66GSD84eRksLk/PUza+6Pp6Yl3Pf/CIW0guPvNbw1XrdnIruOyVgqcOKSZo5CNUh21y9DSnC1Wl7xoObnRITaJ1EirLEjynpnjilxx2oMgSsfv+E5ymeijWHa6vC3o7EiyIrcBi7FvCXF8nfahSXGi6NrWGjTrdcxMT6E8P4/+wSFkiwUBcRnGfN8E9svloPrXTz755PT999//siMZVwTgvn37dJ/ve+MA3v72tzd++M1vDnLK/MH05OTPHn3xmNP0m9h5+xvCrdt3kOumlOc6bUcwYs9+zAzb7rIYwNbLLtG5iAQirnYnsRTadoZZ/HGSwS1dmd1t0LrvvgPARJV2I9hhU3ZMoNY8ko7jbHuSxH00JkSjVsPo2dOYPD+OoeEV6B0YRLSdTjVJ7DFr7TfYBP+zXi6/uGpiooR77jEdk+uyKYuXBXDPnj1qFVa52S1lDh476fONq3ua1cbnxsdH33Py9EllrcWWG7eFO3bejUw2rx3HgUqi6Uk4iNuUHZ2mxMLB7Mwa44t0rbWYLWSn0WDaZN2zFlY6ddzCk3RKW7ckJkSqzYgTe7BdybcNZrx7I9nGmKRHxlnlJvRRLpdx8sUjOHf6NIrFHvT2D6K3vx/pTBbKcYRBJQs5BsFThPDA+dFTj5899qOj7/qFT1zWIXBJQ35kZIQHBwedIprq4OF5f83qgWWV85N/cG7s7D+Znp6GcvTM2nUbajfdcsdAJpvzWuB1UvBWTC9ZsS4cw04ic4VW/ALrOmaCHWAkZSijXbkL3HdygcjFf0u8ROj6W+dm0Bbr7HTRmJjxCrUFlaJMA1YOMpks1qxdj/LcPMZHz2FifAyO5yKdySCTyZHneQVifr014abA92+sVmYrdGzm+SsZhouOlojQsYcecrNDQ+p7x4+HXrO0pl6b+y8TkxOvbwbBiUw6+/CGDVsqW7bd8v5CsW+DE697iaM6CYomALbSI7qYZ/JfO8oOoF1w9WK9W7TqawRIi3HGW9LiGDG6tmhSW4qoY52LLk0LVPuCF8n6K+1OWGu7TZFkmRABxf7XZqOBmZlJPP/0U6XRM6enQhMSWVtnpefZ4ZNk7DEmfrruV55wBteMfuQjH7mix9ItOkQjIyP89m3bPKwC/vZvDzW3YZuu9h9bf2b0zLLSrD/d01+YvfctP7F91ep1v5PLF16nHVfr2MaLNE4c8+N2xSQkOS/JzcXSIgl4CYDRptsrl8QFllWn1pQOwiMLV9suSWwPRedVW1vyF3YlVtOJCjVhxEEoyRoXtCMaSaEhE6Jeq6FSKZXOnTj+rw8+/fRD5cZkTSpUL5RK/tiKFWZkZOQl24kXjNLIyAh/+O1v90pnz5ptu3cH8fbils756h//bm54w86bVixf/rupdPYurR2ltSbVSkWI7L5u53Xb+I7WtwVTekEc8KIE5mKtRVTQkoT2285NLdH/CW4tUDsO6Lpspym60NvWsR4aYxD6fmw2UfteE3dfUvc78NGo11Apl06MnTn94eCxxx6+d2TkqlLzL4jI79+/H8XVq839H/tY+OCDD7ZuZffu3eoLXxjxVq+59fVDQ8O/l0ql79DaUcyKiJmilAUVbzJpkxVWsZSJtEyILnusa92jlw7ewlGnhW873G1E8TqJlgboOn6h5uaLXKNzOhBAxDAmSnWM9nm0swU6yRC319herd3b5z338fU33jh2Ndu3r2SoCAA98fWvp4Y3rn1dKlP4fVJqJzPrKMquIn9nC7wkVYFjdRLta0+iEF0ZZq0rXJ7EWGMjqb5U65Ak6ViTFosntr0ycgFJXbQHnYuhLBT3KMW/Uasim81F+xlNvMZyh9FvLawxaDbraDTqUpqd2Vebnf3QrW9966mXC+ClRoQA0J49u/mJr389Nbxty71etvinynFud7TjuNplR7vkOFGUnVWUvcwcVYc3YQDTqMGvVWGNaQ/wRQfr4nNJRNCoNyCXm6fU/XJRxnvBF+jys7jrCwvYUDwZFStAgEa9Cq1VpIUgceG9+ByxPew4HjwvRblC8e5sT8//sW/fvtTLBXAxM4KAaFMmAH7bpn+SM/29HyNWv+I4bp9izZFLLM5Y7jAVQNEDMkyzCeP7sGJhxMJTGox47etaS7op/kVBFKBULkEphpe+zL12WAidQdnOz4CFQtn97gK8F6WkbRYrcUzSdT2Mj56B0i5S6QxCCeLUD4BUYlYJtFYgeIBYV6z54Apjnn3ic5/74m1XyDwvCmDiaL3//vt5165dete2beutps+4TuodjuMoTthlkjeiEm+LRLko9TpCvwljwpj5xfZth1HeokQxtW+N6yXWvjAMETSbKJdKcD2v63wXBRAXas5FNGnH32KJudR5k5edWhRt9qldF6lMFmdOvoj1W7ZCOxphGMZ1bdpEO1pmFERSgCBnrfk3uO225wF87xJdXLR1kZhDhw6p3btBb33rJ7LrBvo+4LjeF7xUdqfjuqy0BmsNav2o1i5X22ggqFcRNJswxrTAS+7b9TJdUtqeyB3mwyUAbDaaKM3PAyJwXC8Knl5K7y1up18IxIL3nW8vdRwkYtcXMFYQtNI4d+o4IEChtxesuP1MvA7exorBxHHpE+qxYm68/773/MUf/7f/9pKeLa+BWPL27uWzd93lVsbp3VkPn+J88SZWipMQkCQMUgQ2CGADHyYIYMKwDZpE5TxaZUEg0EoLqST7MLnpTj2HFju8WKtVqwjCAI7rolqpQGsNx3MufWedIHZ61Bao0sUPuoQaRfcq0GK0Mb11XRfFnn6cOXUcmVwOvUND0E5UBVGsdPWLHQWIhuu5CG1m1/CqFf/+iSee+Nhtt912xapUiwhPHT6cLbz57vuGU96vkvZeT9rRrQcdxixSmkGkJk0Ia6JK7zb2SNgOoza6sWioxNiq9hwmUKYjA6U9DIk5cQnwjDEol0qo12rwXBehcVCtVlBweqLQ1KUAvAhgnTb8BfZ8vKpdeD5qr9vo2IjT4dAGIi9M38CgjJ49RedOn0Qqk0Emn4eChsQ1TpMZRQDYceBaiyAI2Hrpf9YXmG8B+B+4QlWqQSQDImE4O3sKjveX1oR+UKlvBWwOVrSIMBLHsACC2G3U4Y1vxb6jBc4KMGWNfViTPO54qV8HUYYW1VVdXHHR1mw0UK/X4Ad+tJ5YC9/30ajVkMlmr0yVom12LuYLX+ge7TYVkhbrvm60u126AMCMdDZHuXxeJsZHiUBYv/VGZPL5aPu4FUAMOk0R5blIWQMrNg3m337yu9/df+ub3zyJK2gLtQRhzx4+f+ut/Y5S66FoGxHfKNauBaMfQjnA9gAoEMiVyIvcFGBGrD1FpJ4ByRN+YA94E2bWW5P+kJsv/B4p7VAc30s8/clP4nRebLqJCKYmJjB67hyajQZ6enuQzxeh45IkhZ5eeCn30nfYaRsCXQLTiYUsduBCBpS8WBAHbIe0Yo0UGoyPnrNPPv49Tnkp9A8OYf2WregZGGz7hWMNFjnGLcQIGtUK/MA31XL5yyfOn//Qvffee1kvTRcLJUAQBRcn4p8fxE5fPnbsmM7n8zrVbLohcyYwxtVK+WZuLnQymcZYo1E/uG2b2Q1YIpIzBw/2Zdzi64kjiwhdaqdDfV6ihWGISqWKMAi6UyII0fOUymVoVYRyLhFU6VClCWgJE75AlS48kDpAXChqrc+pG1xEarSnt5dcx5NypUwgQRgEWLthE4ZWrgQrBWgFNtHyRGBAWXjpNKy1KpPL7d5I9Fci8lUiumSw93J5oRIHFk380wRQBTB7yYNEeG701FqlnR0Uh9a73FaL0b8LTgJUK1XUa9VWCSzT4RAQAIHvo1KpolAsXN60WABi559kkdeLfqFrYNoTocMyamkV10tR/9CwmX7hOSUCGCPwfR/z83NYs2490rkckGTOWQsIQzkOUpksUKumkM///qmjR58XkcOXSoZ6RfZ279+/30276TtYqXXdGdedA3NpAIMwxNzsLALfb41kFLaxLSQEQL1WRaNWXzzb7CJAXta06Hp3cZJ1UZuSIo/L8PKVZEXEbzZRrdYwNzeL08eO4bknD2BybCxipUyAVpFZphjac5HOZuFqvbaQzX154syZdZfKn1nyPfIiQtPTZ/uV9t4GVtmOaAba9h5d7hwol0qo1SpRSazYf2qtbWVUSEucBKXSHJRWcFPepcHr7kk79BN/sHjmxSJk5gpcyESEnr4+cl1PqpUyJSGtMDTwwwC1ShnLVq7GyjVrkSsU4tipAligyINrLQW+/zpi/vyZ5449ICInFpPEJZfAvXv3cl5n7iStdlGS49da+jqc1pdovh+gXJqHCaI1PAkS26R+aMxMRCwAhjEW83Oz0c7cl9AWavJ2lOKCb10cs0UtjmiSul6K+geWWd/34fs+/KYP32+iXq9jdn4eLx45jAPffwTPP/0UpsbGEfjN1sNN3EwaXiZNjuvemx8ofGn6xInbjh49esEMXXIAb9+0KU/a+WkwL2tTTbTtPb6M9FmL0vwcatUqjLVxDc9opKLdRUlwNhlpC2KC7/soz8/HZZgvhdiVgXjpTsol9Gf7t9Iaq9esMbV6E34QIAxDhIGB3wzQqDdQrdcxMzuLY0eP4MAPHsOPHvsBzhw/jmqpDGMslOvCSaXIS3l3O7n8n/dmMv/yzMGDfSKiRkZGWABa0lppMjLC2fe86yZm/UlSqh8JAQXa26ovKX2CarmKmakpNBp1JCqXEO3CtVaQTqehdLIBkzoIbQSiYobrehcHoYMIXwDaAmHripRcJMfiAqml5E6iNxqQhx99pNRs+g4ROLGbrbEw1sAag9DYSOuUS5gcP4+JsTFUKxWYMIzj3QyldK9ifqeTytw5Pz3FG9dsHf+LW29uLNkaKCI0M3Msl7f8z+DwKihFLe5PV7b21Wt1TE1OoF6vRZgTwYqNJI4JEprYdadiL26SYyOxcDPKpRKIGNlc9rLXW+j4BjrMig7m2nrcAeQCQ771nQTE+E9MBEsCL53VG9et/+tvfutbY4MD/XcN9PRsTmfSvZ7jstYOlFJQ3N7TwaxQqdYwNT0DrY8glUrBdT1RWhsAvmIayGayG4w46c1jm2UpSQwV3OHXk1LvgdKRo5I6wesesIUt8H3MTE2iVqu2iAti/KXDcDbGwJrIdkpyf5MAMXFEdCrleTAT0tnsFfS6u08LCU13OuhFXd0XOLYTraAdTZvWb+wZm/zyvztx7Mzn1qxbsXpoaOj2Qia71Us5y1zXHdJKDzJRXintaVaktAYAw8R1MNeJ6CRgDxhrH/N9/wdqNDv28f/0cZ/eSksDoIjQ3NxcIe86v0hKrYrqFndMy8sY7YEfYHJiAuVSGcaErXR8G9fNTiSNiBGayA1lrQGDIHHFpxbjJ4IxFuX5eRAzUqnUlUkiLgRyoTTKJda9VpbhAs8OEaHYU1y/7YZN+rtPfO3E//irx4/u3Lnzu/fddx/19fXR6dOndY4oz8z92nX7WCkjgWkyuTVrTN3J5SrMXC2VSkGc9CQA5BOf/QSApTMjVMZ17yFHvRsqLifYGQa4yAAKgGaziemJCZRK8whMgM4dQEmEgwQt8mNM2DqfjR9THpXlas96IkFoDebnZkE9vfDSV7jD6xLS2ML4Qu25SFip00wRZHO55W+849b0f/nTP64BkAMHDgQHDhygkZER+sxnPuMDqAEY7zqsY95cqstXzUKjtW9muVLqfwfxQPf9LGALHURARFCv1jA1Po5yaR5hGCIpTB5FOCKmR3FRO4CEiIIwDKcBCKsoHmmNgRXTZcgnmzhNaDA3O4tGrYbL52N0A3DBR/G8Wrih+HK+dAIhk82lV61YsR7dSZDSKVELRiiZN5ft9NWbEWNj6Z5c5hfBdFcc32nTs4sEG6yNDPXpqfOoVCux2mwhGyfmIp6GJCIwInaCCH8Eaz9ujDmWLK3RE1yiJ3vaJJBMreLlMMagNDeHZuMlPIhzkX53mhddm0M7v7dguKOtIQwvlVLZfH7dVY/1Iu2qzAjZs0c1b7rpzcrRv0PMPWiVB1zsy9EvYwzmpqdRmptFrVaN0i/aaERpGK11RACiQKx9WhR/cmJq6gt13z/U29f3rKPUu4k5I7G0tpfZ7lo0BIEYg6bfhOu4kYa/vCOlA7UFbxf4Ilq0ZlHThOInhlqqVSpHhlat+uZSPwHmZa+BIkLNUmm99tzfBPEgRPiSAyMCv+ljfm4WlWoZzUYjck4nMznO3kr2/QGwpNS8GNljQ/rDZ5576liSbi4i+04dP/6LrPjPWHExeYy4BSLTU9rqK0HWmBBzM9Po7euHk3oJSWCXWRcvRWwgaO3M0kqvQueDoJaovWwVOj8/38Pp1G8S0RsQBYYvEtQDbGhRq5QxPT2BUnkezUY9SjWkuLCddBcQIKBJpJ4Ua3+dmvVPPfPCM8ceeOCBVliFiOza9esfQmh+hUCTzBzvSIoM5KT8cmJMS5wJHgYhZmdn4DeaL+1mL7MuLprWmjiL4qw9VrRm2+Dgy04fXDIAI2f1dCGbzf6WIt4NUHdEtSP13IYhaqV5TJ4fxcTEeZRL82g267DWQJham0Raj7YV8Ql4HuD/W3z87PmpqT/Z8aY3TX3kIx8JFjpyiciu3rDhT3xr3w8r56JE4ujJZBI/JCvhAdRB6YJmEzNTkxGxeakgLqJSLyh8sNBfQVEVDddLLwM3i0sN4MtRoalsNvsAET0A4AJ+LtYibDbRqNdQb9TRaNTR9P0ol6YlaSxiheKNJyIC31o5CcifK+av3HLbrS8CMJd77Ftc3nLfcwcOfCiVyfxH7TpbrDEskOiZuDZOV2w9tTMa4TAMMDs9jaKxSOeyHWVGXl7rijEucLklTgblOG5K5XoAnHvVAWxtzB8bS9sgeEAr9RuwNicxYMYYmMBHs9FAs9lA0/cRhpHz1hjTofQj21CMNSKoCHDaWnmSrH0Y1n5XXPfU615CRlYC4p49e769YmDFeweGen7P89x3W2uVRdgqwdXygnXEi4wJMT83A7/ZQL6nB7H348rQag3MAhBxoUEPRBl3qVTK6evt7VtK8K4YQERsVXzXXduYn79XjJk1Yo01YSoMjWutUUEYUmgCBKGBtdZGoR4ARIZAgYg0IJiAkSMCeoyIfijMx2XMTNz607c3rqYER7zH/PBjjz32QNGmfttzvZ+3BhmxlpglrgbVMeiSgGhQrVYQhCEKPT1wU6krJqhdqHW8Bbpdf4kHyUunHLenZ3CpAbyi/naUxuCTJ0/mfX8+mwlNusmZorbBUGCp3yDIh0ZSzAoWxrfWhgQVWIsSEM6yqElOmYmJiercd77zHf/l7IW7kvbEE084Web3OKnUb4OwiQhOUoW344bapZtje1FrF4VC8eWr1MUSoBKRtBZBo25PPvP0L9/45jd/AVdgoF9puzrlH5+jwwuy2Pmitf1Vfozpi88/v1lgP0ZC7wZhLTHrVlmtJL3QJmsjRVnSSiFfjMo4dwF+JW2xQH0HoTNBgHOHX/jUuq997XdoCSfvUgB43bajR4961vdvVyT/kojeTsRDxO1K60kxBMRPjImCx4x0Nouevr7WjuOraolTwhjMnjv7h4Pr1//aUlZselUfQ/5qt02bNjUBfO+Jb33r2Z4Vy94AkV8Sxfcyc1+UyxcZ+mIjb401URjLzM8j8H0UenqQymSujqW2DHqGl8sNff7zn1dYQmP+H7UELmwn9u1LhQMDdxLTB4jonazUShFR8fN2244gAjFHRWFTqTTy+QK8qzU3BAgazUcPHn7+bbfddttLNEIv3n6sAEzavn379Oq+vq2i+YMs+BkAayGWbRiK5bjCAhERxZWGtUImm0UmGz8yXeuXC+YppdTtRHRFafNX0n4sAUzaiAh/+OnvL28a771Q/D4huYVEstZC2WiPC8fZGsSOhoqfNZHNZpDO5uCkvJdKduaNMW/wPO/QUt3DjzWAne3gwYMuyuWNjsN3MPE91srtRDRsjc1StLmOhcCsHSjtRLuKUilkslmkokfwXD7yD4QA3qe1/vpS9fs1ABdpIkIvfPvbfZxKbSPGHZbVbQTZAivLiFBkJo+Vw6QdUo4TPfbA9eClU/AyGSjPjYupX3hqa+0nXdf9D0vV19cAvEyLnRj6kUceSS3TQTFs8hqxwRom3iZMNzLzBlZ6kB2voBydUo6rteOSk/LIy+bgpqIHcVE71v1nDz/88AfvvYKdR1fSXgPwKlpUCBDuULGYb6bTA47COiu8iR21WbFew1qvIKX7tdY5N51yUpksa9edViZ8pzcwcEW10C7XXgNwaVvkldq/X50ENHp6Us1qNQMgT46TMlapdCbtmGZ1dOOuXWeW5ILX+o5/TFprnBMfLC2RP/T/B96QkmdPWpSQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA3LTA3VDA5OjE5OjA4KzAwOjAwC8IICQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNy0wN1QwOToxOTowOCswMDowMHqfsLUAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMtMDctMDdUMDk6MTk6MDgrMDA6MDAtipFqAAAAHnRFWHRpY2M6Y29weXJpZ2h0AEdvb2dsZSBJbmMuIDIwMTasCzM4AAAAFHRFWHRpY2M6ZGVzY3JpcHRpb24Ac1JHQrqQcwcAAAAASUVORK5CYII=",protocol:"trader_joe_v2_1",slippage:!0,blockchains:["avalanche"],avalanche:{router:{address:"0xb4315e873dBcf96Ffd0acd8EA43f689D8c20fB30",api:VS.ROUTER},factory:{address:"0x8e42f2F4101563bF679975178e880FD87d3eFd4e",api:VS.FACTORY},pair:{api:VS.PAIR},quoter:{address:"0x64b57F4249aA99a812212cee7DAEFEDC40B203cD",api:VS.QUOTER}}};var GS=t=>new bx(Object.assign(HS,{scope:t,findPath:t=>VS.findPath({...t,exchange:HS}),pathExists:t=>VS.pathExists({...t,exchange:HS}),getAmounts:t=>VS.getAmounts({...t,exchange:HS}),getPrep:t=>VS.getPrep({...t,exchange:HS}),getTransaction:t=>VS.getTransaction({...t,exchange:HS})}));const qS={name:"uniswap_v2",label:"Uniswap v2",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQxIiBoZWlnaHQ9IjY0MCIgdmlld0JveD0iMCAwIDY0MSA2NDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yMjQuNTM0IDEyMy4yMjZDMjE4LjY5MiAxMjIuMzIgMjE4LjQ0NSAxMjIuMjEzIDIyMS4xOTUgMTIxLjc5MUMyMjYuNDY0IDEyMC45OCAyMzguOTA1IDEyMi4wODUgMjQ3LjQ3OSAxMjQuMTIzQzI2Ny40OTQgMTI4Ljg4MSAyODUuNzA3IDE0MS4wNjkgMzA1LjE0OCAxNjIuNzE0TDMxMC4zMTMgMTY4LjQ2NUwzMTcuNzAxIDE2Ny4yNzdDMzQ4LjgyOCAxNjIuMjc1IDM4MC40OTMgMTY2LjI1IDQwNi45NzggMTc4LjQ4NUM0MTQuMjY0IDE4MS44NTEgNDI1Ljc1MiAxODguNTUyIDQyNy4xODcgMTkwLjI3NEM0MjcuNjQ1IDE5MC44MjIgNDI4LjQ4NSAxOTQuMzU1IDQyOS4wNTMgMTk4LjEyNEM0MzEuMDIgMjExLjE2NCA0MzAuMDM2IDIyMS4xNiA0MjYuMDQ3IDIyOC42MjVDNDIzLjg3NyAyMzIuNjg4IDQyMy43NTYgMjMzLjk3NSA0MjUuMjE1IDIzNy40NTJDNDI2LjM4IDI0MC4yMjcgNDI5LjYyNyAyNDIuMjggNDMyLjg0MyAyNDIuMjc2QzQzOS40MjUgMjQyLjI2NyA0NDYuNTA5IDIzMS42MjcgNDQ5Ljc5MSAyMTYuODIzTDQ1MS4wOTUgMjEwLjk0M0w0NTMuNjc4IDIxMy44NjhDNDY3Ljg0NiAyMjkuOTIgNDc4Ljk3NCAyNTEuODExIDQ4MC44ODUgMjY3LjM5M0w0ODEuMzgzIDI3MS40NTVMNDc5LjAwMiAyNjcuNzYyQzQ3NC45MDMgMjYxLjQwNyA0NzAuNzg1IDI1Ny4wOCA0NjUuNTEyIDI1My41OTFDNDU2LjAwNiAyNDcuMzAxIDQ0NS45NTUgMjQ1LjE2MSA0MTkuMzM3IDI0My43NThDMzk1LjI5NiAyNDIuNDkxIDM4MS42OSAyNDAuNDM4IDM2OC4xOTggMjM2LjAzOEMzNDUuMjQ0IDIyOC41NTQgMzMzLjY3MiAyMTguNTg3IDMwNi40MDUgMTgyLjgxMkMyOTQuMjk0IDE2Ni45MjMgMjg2LjgwOCAxNTguMTMxIDI3OS4zNjIgMTUxLjA1MUMyNjIuNDQyIDEzNC45NjQgMjQ1LjgxNiAxMjYuNTI3IDIyNC41MzQgMTIzLjIyNloiIGZpbGw9IiNGRjAwN0EiLz4KPHBhdGggZD0iTTQzMi42MSAxNTguNzA0QzQzMy4yMTUgMTQ4LjA1NyA0MzQuNjU5IDE0MS4wMzMgNDM3LjU2MiAxMzQuNjJDNDM4LjcxMSAxMzIuMDgxIDQzOS43ODggMTMwLjAwMyA0MzkuOTU0IDEzMC4wMDNDNDQwLjEyIDEzMC4wMDMgNDM5LjYyMSAxMzEuODc3IDQzOC44NDQgMTM0LjE2N0M0MzYuNzMzIDE0MC4zOTIgNDM2LjM4NyAxNDguOTA1IDQzNy44NCAxNTguODExQzQzOS42ODYgMTcxLjM3OSA0NDAuNzM1IDE3My4xOTIgNDU0LjAxOSAxODYuNzY5QzQ2MC4yNSAxOTMuMTM3IDQ2Ny40OTcgMjAxLjE2OCA0NzAuMTI0IDIwNC42MTZMNDc0LjkwMSAyMTAuODg2TDQ3MC4xMjQgMjA2LjQwNUM0NjQuMjgyIDIwMC45MjYgNDUwLjg0NyAxOTAuMjQgNDQ3Ljg3OSAxODguNzEyQzQ0NS44OSAxODcuNjg4IDQ0NS41OTQgMTg3LjcwNSA0NDQuMzY2IDE4OC45MjdDNDQzLjIzNSAxOTAuMDUzIDQ0Mi45OTcgMTkxLjc0NCA0NDIuODQgMTk5Ljc0MUM0NDIuNTk2IDIxMi4yMDQgNDQwLjg5NyAyMjAuMjA0IDQzNi43OTcgMjI4LjIwM0M0MzQuNTggMjMyLjUyOSA0MzQuMjMgMjMxLjYwNiA0MzYuMjM3IDIyNi43MjNDNDM3LjczNSAyMjMuMDc3IDQzNy44ODcgMjIxLjQ3NCA0MzcuODc2IDIwOS40MDhDNDM3Ljg1MyAxODUuMTY3IDQzNC45NzUgMTc5LjMzOSA0MTguMDk3IDE2OS4zNTVDNDEzLjgyMSAxNjYuODI2IDQwNi43NzYgMTYzLjE3OCA0MDIuNDQyIDE2MS4yNDlDMzk4LjEwNyAxNTkuMzIgMzk0LjY2NCAxNTcuNjM5IDM5NC43ODkgMTU3LjUxNEMzOTUuMjY3IDE1Ny4wMzggNDExLjcyNyAxNjEuODQyIDQxOC4zNTIgMTY0LjM5QzQyOC4yMDYgMTY4LjE4MSA0MjkuODMzIDE2OC42NzIgNDMxLjAzIDE2OC4yMTVDNDMxLjgzMiAxNjcuOTA5IDQzMi4yMiAxNjUuNTcyIDQzMi42MSAxNTguNzA0WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBkPSJNMjM1Ljg4MyAyMDAuMTc1QzIyNC4wMjIgMTgzLjg0NiAyMTYuNjg0IDE1OC44MDkgMjE4LjI3MiAxNDAuMDkzTDIxOC43NjQgMTM0LjMwMUwyMjEuNDYzIDEzNC43OTRDMjI2LjUzNCAxMzUuNzE5IDIzNS4yNzUgMTM4Ljk3MyAyMzkuMzY5IDE0MS40NTlDMjUwLjYwMiAxNDguMjgxIDI1NS40NjUgMTU3LjI2MyAyNjAuNDEzIDE4MC4zMjhDMjYxLjg2MiAxODcuMDgzIDI2My43NjMgMTk0LjcyOCAyNjQuNjM4IDE5Ny4zMTdDMjY2LjA0NyAyMDEuNDgzIDI3MS4zNjkgMjExLjIxNCAyNzUuNjk2IDIxNy41MzRDMjc4LjgxMyAyMjIuMDg1IDI3Ni43NDMgMjI0LjI0MiAyNjkuODUzIDIyMy42MkMyNTkuMzMxIDIyMi42NyAyNDUuMDc4IDIxMi44MzQgMjM1Ljg4MyAyMDAuMTc1WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBkPSJNNDE4LjIyMyAzMjEuNzA3QzM2Mi43OTMgMjk5LjM4OSAzNDMuMjcxIDI4MC4wMTcgMzQzLjI3MSAyNDcuMzMxQzM0My4yNzEgMjQyLjUyMSAzNDMuNDM3IDIzOC41ODUgMzQzLjYzOCAyMzguNTg1QzM0My44NCAyMzguNTg1IDM0NS45ODUgMjQwLjE3MyAzNDguNDA0IDI0Mi4xMTNDMzU5LjY0NCAyNTEuMTI4IDM3Mi4yMzEgMjU0Ljk3OSA0MDcuMDc2IDI2MC4wNjJDNDI3LjU4IDI2My4wNTQgNDM5LjExOSAyNjUuNDcgNDQ5Ljc2MyAyNjlDNDgzLjU5NSAyODAuMjIgNTA0LjUyNyAzMDIuOTkgNTA5LjUxOCAzMzQuMDA0QzUxMC45NjkgMzQzLjAxNiA1MTAuMTE4IDM1OS45MTUgNTA3Ljc2NiAzNjguODIyQzUwNS45MSAzNzUuODU3IDUwMC4yNDUgMzg4LjUzNyA0OTguNzQyIDM4OS4wMjNDNDk4LjMyNSAzODkuMTU4IDQ5Ny45MTcgMzg3LjU2MiA0OTcuODEgMzg1LjM4OUM0OTcuMjQgMzczLjc0NCA0OTEuMzU1IDM2Mi40MDYgNDgxLjQ3MiAzNTMuOTEzQzQ3MC4yMzUgMzQ0LjI1NyA0NTUuMTM3IDMzNi41NjkgNDE4LjIyMyAzMjEuNzA3WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBkPSJNMzc5LjMxIDMzMC45NzhDMzc4LjYxNSAzMjYuODQ2IDM3Ny40MTEgMzIxLjU2OCAzNzYuNjMzIDMxOS4yNUwzNzUuMjE5IDMxNS4wMzZMMzc3Ljg0NiAzMTcuOTg1QzM4MS40ODEgMzIyLjA2NSAzODQuMzU0IDMyNy4yODcgMzg2Ljc4OSAzMzQuMjQxQzM4OC42NDcgMzM5LjU0OSAzODguODU2IDM0MS4xMjcgMzg4Ljg0MiAzNDkuNzUzQzM4OC44MjggMzU4LjIyMSAzODguNTk2IDM1OS45OTYgMzg2Ljg4IDM2NC43NzNDMzg0LjE3NCAzNzIuMzA3IDM4MC44MTYgMzc3LjY0OSAzNzUuMTgxIDM4My4zODNDMzY1LjA1NiAzOTMuNjg4IDM1Mi4wMzggMzk5LjM5MyAzMzMuMjUzIDQwMS43NkMzMjkuOTg3IDQwMi4xNzEgMzIwLjQ3IDQwMi44NjQgMzEyLjEwMyA0MDMuMjk5QzI5MS4wMTYgNDA0LjM5NSAyNzcuMTM4IDQwNi42NjEgMjY0LjY2OCA0MTEuMDRDMjYyLjg3NSA0MTEuNjcgMjYxLjI3NCA0MTIuMDUyIDI2MS4xMTIgNDExLjg5QzI2MC42MDcgNDExLjM4OCAyNjkuMDk4IDQwNi4zMjYgMjc2LjExMSA0MDIuOTQ4QzI4NS45OTkgMzk4LjE4NSAyOTUuODQyIDM5NS41ODYgMzE3Ljg5NyAzOTEuOTEzQzMyOC43OTIgMzkwLjA5OCAzNDAuMDQzIDM4Ny44OTcgMzQyLjkgMzg3LjAyMUMzNjkuODggMzc4Ljc0OSAzODMuNzQ4IDM1Ny40MDIgMzc5LjMxIDMzMC45NzhaIiBmaWxsPSIjRkYwMDdBIi8+CjxwYXRoIGQ9Ik00MDQuNzE5IDM3Ni4xMDVDMzk3LjM1NSAzNjAuMjczIDM5NS42NjQgMzQ0Ljk4OCAzOTkuNjk4IDMzMC43MzJDNDAwLjEzIDMyOS4yMDkgNDAwLjgyNCAzMjcuOTYyIDQwMS4yNDIgMzI3Ljk2MkM0MDEuNjU5IDMyNy45NjIgNDAzLjM5NyAzMjguOTAyIDQwNS4xMDMgMzMwLjA1QzQwOC40OTcgMzMyLjMzNSA0MTUuMzAzIDMzNi4xODIgNDMzLjQzNyAzNDYuMDY5QzQ1Ni4wNjUgMzU4LjQwNiA0NjguOTY2IDM2Ny45NTkgNDc3Ljc0IDM3OC44NzNDNDg1LjQyMyAzODguNDMyIDQ5MC4xNzggMzk5LjMxOCA0OTIuNDY3IDQxMi41OTNDNDkzLjc2MiA0MjAuMTEzIDQ5My4wMDMgNDM4LjIwNiA0OTEuMDc0IDQ0NS43NzhDNDg0Ljk5IDQ2OS42NTMgNDcwLjg1IDQ4OC40MDYgNDUwLjY4MiA0OTkuMzQ5QzQ0Ny43MjcgNTAwLjk1MiA0NDUuMDc1IDUwMi4yNjkgNDQ0Ljc4OCA1MDIuMjc1QzQ0NC41MDEgNTAyLjI4IDQ0NS41NzcgNDk5LjU0MyA0NDcuMTggNDk2LjE5MUM0NTMuOTY1IDQ4Mi4wMDkgNDU0LjczNyA0NjguMjE0IDQ0OS42MDggNDUyLjg1OUM0NDYuNDY3IDQ0My40NTcgNDQwLjA2NCA0MzEuOTg1IDQyNy4xMzUgNDEyLjU5NkM0MTIuMTAzIDM5MC4wNTQgNDA4LjQxNyAzODQuMDU0IDQwNC43MTkgMzc2LjEwNVoiIGZpbGw9IiNGRjAwN0EiLz4KPHBhdGggZD0iTTE5Ni41MTkgNDYxLjUyNUMyMTcuMDg5IDQ0NC4xNTcgMjQyLjY4MiA0MzEuODE5IDI2NS45OTYgNDI4LjAzMkMyNzYuMDQzIDQyNi4zOTkgMjkyLjc4IDQyNy4wNDcgMzAyLjA4NCA0MjkuNDI4QzMxNi45OTggNDMzLjI0NSAzMzAuMzM4IDQ0MS43OTMgMzM3LjI3NiA0NTEuOTc4QzM0NC4wNTcgNDYxLjkzMiAzNDYuOTY2IDQ3MC42MDYgMzQ5Ljk5NSA0ODkuOTA2QzM1MS4xODkgNDk3LjUxOSAzNTIuNDg5IDUwNS4xNjQgMzUyLjg4MiA1MDYuODk1QzM1NS4xNTYgNTE2Ljg5NyAzNTkuNTgzIDUyNC44OTIgMzY1LjA2NyA1MjguOTA3QzM3My43NzkgNTM1LjI4MyAzODguNzggNTM1LjY4IDQwMy41MzYgNTI5LjkyNEM0MDYuMDQxIDUyOC45NDcgNDA4LjIxNSA1MjguMjcxIDQwOC4zNjggNTI4LjQyNEM0MDguOTAzIDUyOC45NTUgNDAxLjQ3MyA1MzMuOTMgMzk2LjIzIDUzNi41NDhDMzg5LjE3NyA1NDAuMDcxIDM4My41NjggNTQxLjQzNCAzNzYuMTE1IDU0MS40MzRDMzYyLjYgNTQxLjQzNCAzNTEuMzc5IDUzNC41NTggMzQyLjAxNiA1MjAuNTM5QzM0MC4xNzQgNTE3Ljc4IDMzNi4wMzIgNTA5LjUxNiAzMzIuODEzIDUwMi4xNzZDMzIyLjkyOCA0NzkuNjI4IDMxOC4wNDYgNDcyLjc1OSAzMDYuNTY4IDQ2NS4yNDJDMjk2LjU3OSA0NTguNzAxIDI4My42OTcgNDU3LjUzIDI3NC4wMDYgNDYyLjI4MkMyNjEuMjc2IDQ2OC41MjMgMjU3LjcyNCA0ODQuNzkxIDI2Ni44NDIgNDk1LjEwMUMyNzAuNDY1IDQ5OS4xOTggMjc3LjIyMyA1MDIuNzMyIDI4Mi43NDkgNTAzLjQxOUMyOTMuMDg2IDUwNC43MDUgMzAxLjk3IDQ5Ni44NDEgMzAxLjk3IDQ4Ni40MDRDMzAxLjk3IDQ3OS42MjcgMjk5LjM2NSA0NzUuNzYgMjkyLjgwOCA0NzIuODAxQzI4My44NTIgNDY4Ljc2IDI3NC4yMjYgNDczLjQ4MyAyNzQuMjcyIDQ4MS44OTdDMjc0LjI5MiA0ODUuNDg0IDI3NS44NTQgNDg3LjczNyAyNzkuNDUgNDg5LjM2NEMyODEuNzU3IDQ5MC40MDggMjgxLjgxMSA0OTAuNDkxIDI3OS45MjkgNDkwLjFDMjcxLjcxMiA0ODguMzk2IDI2OS43ODcgNDc4LjQ5IDI3Ni4zOTQgNDcxLjkxM0MyODQuMzI2IDQ2NC4wMTggMzAwLjcyOSA0NjcuNTAyIDMwNi4zNjIgNDc4LjI3OUMzMDguNzI4IDQ4Mi44MDUgMzA5LjAwMyA0OTEuODIgMzA2Ljk0IDQ5Ny4yNjRDMzAyLjMyMiA1MDkuNDQ4IDI4OC44NTkgNTE1Ljg1NSAyNzUuMjAxIDUxMi4zNjhDMjY1LjkwMyA1MDkuOTk0IDI2Mi4xMTcgNTA3LjQyNCAyNTAuOTA2IDQ5NS44NzZDMjMxLjQyNSA0NzUuODA5IDIyMy44NjIgNDcxLjkyIDE5NS43NzcgNDY3LjUzNkwxOTAuMzk1IDQ2Ni42OTZMMTk2LjUxOSA0NjEuNTI1WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ5LjYyMDIgMTIuMDAzMUMxMTQuNjc4IDkwLjk2MzggMjE0Ljk3NyAyMTMuOTAxIDIxOS45NTcgMjIwLjc4NEMyMjQuMDY4IDIyNi40NjcgMjIyLjUyMSAyMzEuNTc2IDIxNS40NzggMjM1LjU4QzIxMS41NjEgMjM3LjgwNyAyMDMuNTA4IDI0MC4wNjMgMTk5LjQ3NiAyNDAuMDYzQzE5NC45MTYgMjQwLjA2MyAxODkuNzc5IDIzNy44NjcgMTg2LjAzOCAyMzQuMzE4QzE4My4zOTMgMjMxLjgxIDE3Mi43MjEgMjE1Ljg3NCAxNDguMDg0IDE3Ny42NDZDMTI5LjIzMyAxNDguMzk2IDExMy40NTcgMTI0LjEzMSAxMTMuMDI3IDEyMy43MjVDMTEyLjAzMiAxMjIuNzg1IDExMi4wNDkgMTIyLjgxNyAxNDYuMTYyIDE4My44NTRDMTY3LjU4MiAyMjIuMTgxIDE3NC44MTMgMjM1LjczMSAxNzQuODEzIDIzNy41NDNDMTc0LjgxMyAyNDEuMjI5IDE3My44MDggMjQzLjE2NiAxNjkuMjYxIDI0OC4yMzhDMTYxLjY4MSAyNTYuNjk0IDE1OC4yOTMgMjY2LjE5NSAxNTUuODQ3IDI4NS44NTlDMTUzLjEwNCAzMDcuOTAyIDE0NS4zOTQgMzIzLjQ3MyAxMjQuMDI2IDM1MC4xMjJDMTExLjUxOCAzNjUuNzIyIDEwOS40NzEgMzY4LjU4MSAxMDYuMzE1IDM3NC44NjlDMTAyLjMzOSAzODIuNzg2IDEwMS4yNDYgMzg3LjIyMSAxMDAuODAzIDM5Ny4yMTlDMTAwLjMzNSA0MDcuNzkgMTAxLjI0NyA0MTQuNjE5IDEwNC40NzcgNDI0LjcyNkMxMDcuMzA0IDQzMy41NzUgMTEwLjI1NSA0MzkuNDE3IDExNy44IDQ1MS4xMDRDMTI0LjMxMSA0NjEuMTg4IDEyOC4wNjEgNDY4LjY4MyAxMjguMDYxIDQ3MS42MTRDMTI4LjA2MSA0NzMuOTQ3IDEyOC41MDYgNDczLjk1IDEzOC41OTYgNDcxLjY3MkMxNjIuNzQxIDQ2Ni4yMTkgMTgyLjM0OCA0NTYuNjI5IDE5My4zNzUgNDQ0Ljg3N0MyMDAuMTk5IDQzNy42MDMgMjAxLjgwMSA0MzMuNTg2IDIwMS44NTMgNDIzLjYxOEMyMDEuODg3IDQxNy4wOTggMjAxLjY1OCA0MTUuNzMzIDE5OS44OTYgNDExLjk4MkMxOTcuMDI3IDQwNS44NzcgMTkxLjgwNCA0MDAuODAxIDE4MC4yOTIgMzkyLjkzMkMxNjUuMjA5IDM4Mi42MjEgMTU4Ljc2NyAzNzQuMzIgMTU2Ljk4NyAzNjIuOTA0QzE1NS41MjcgMzUzLjUzNyAxNTcuMjIxIDM0Ni45MjggMTY1LjU2NSAzMjkuNDRDMTc0LjIwMiAzMTEuMzM4IDE3Ni4zNDIgMzAzLjYyNCAxNzcuNzkgMjg1LjM3OEMxNzguNzI1IDI3My41ODkgMTgwLjAyIDI2OC45NCAxODMuNDA3IDI2NS4yMDlDMTg2LjkzOSAyNjEuMzE3IDE5MC4xMTkgMjYwIDE5OC44NjEgMjU4LjgwNUMyMTMuMTEzIDI1Ni44NTggMjIyLjE4OCAyNTMuMTcxIDIyOS42NDggMjQ2LjI5N0MyMzYuMTE5IDI0MC4zMzQgMjM4LjgyNyAyMzQuNTg4IDIzOS4yNDMgMjI1LjkzOEwyMzkuNTU4IDIxOS4zODJMMjM1Ljk0MiAyMTUuMTY2QzIyMi44NDYgMTk5Ljg5NiA0MC44NSAwIDQwLjA0NCAwQzM5Ljg3MTkgMCA0NC4xODEzIDUuNDAxNzggNDkuNjIwMiAxMi4wMDMxWk0xMzUuNDEyIDQwOS4xOEMxMzguMzczIDQwMy45MzcgMTM2LjggMzk3LjE5NSAxMzEuODQ3IDM5My45MDJDMTI3LjE2NyAzOTAuNzkgMTE5Ljg5NyAzOTIuMjU2IDExOS44OTcgMzk2LjMxMUMxMTkuODk3IDM5Ny41NDggMTIwLjU4MiAzOTguNDQ5IDEyMi4xMjQgMzk5LjI0M0MxMjQuNzIgNDAwLjU3OSAxMjQuOTA5IDQwMi4wODEgMTIyLjg2NiA0MDUuMTUyQzEyMC43OTcgNDA4LjI2MiAxMjAuOTY0IDQxMC45OTYgMTIzLjMzNyA0MTIuODU0QzEyNy4xNjIgNDE1Ljg0OSAxMzIuNTc2IDQxNC4yMDIgMTM1LjQxMiA0MDkuMThaIiBmaWxsPSIjRkYwMDdBIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjQ4LjU1MiAyNjIuMjQ0QzI0MS44NjIgMjY0LjI5OSAyMzUuMzU4IDI3MS4zOSAyMzMuMzQ0IDI3OC44MjZDMjMyLjExNiAyODMuMzYyIDIzMi44MTMgMjkxLjMxOSAyMzQuNjUzIDI5My43NzZDMjM3LjYyNSAyOTcuNzQ1IDI0MC40OTkgMjk4Ljc5MSAyNDguMjgyIDI5OC43MzZDMjYzLjUxOCAyOTguNjMgMjc2Ljc2NCAyOTIuMDk1IDI3OC4zMDQgMjgzLjkyNUMyNzkuNTY3IDI3Ny4yMjkgMjczLjc0OSAyNjcuOTQ4IDI2NS43MzYgMjYzLjg3NEMyNjEuNjAxIDI2MS43NzIgMjUyLjgwNyAyNjAuOTM4IDI0OC41NTIgMjYyLjI0NFpNMjY2LjM2NCAyNzYuMTcyQzI2OC43MTQgMjcyLjgzNCAyNjcuNjg2IDI2OS4yMjUgMjYzLjY5IDI2Ni43ODVDMjU2LjA4IDI2Mi4xMzggMjQ0LjU3MSAyNjUuOTgzIDI0NC41NzEgMjczLjE3M0MyNDQuNTcxIDI3Ni43NTIgMjUwLjU3MiAyODAuNjU2IDI1Ni4wNzQgMjgwLjY1NkMyNTkuNzM1IDI4MC42NTYgMjY0Ljc0NiAyNzguNDczIDI2Ni4zNjQgMjc2LjE3MloiIGZpbGw9IiNGRjAwN0EiLz4KPC9zdmc+Cg==",protocol:"uniswap_v2",slippage:!0,blockchains:["ethereum"],ethereum:{router:{address:"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",api:kx.ROUTER},factory:{address:"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",api:kx.FACTORY},pair:{api:kx.PAIR}}};var ZS=t=>new bx(Object.assign(qS,{scope:t,findPath:t=>kx.findPath({...t,exchange:qS}),pathExists:t=>kx.pathExists({...t,exchange:qS}),getAmounts:t=>kx.getAmounts({...t,exchange:qS}),getPrep:t=>kx.getPrep({...t,exchange:qS}),getTransaction:t=>kx.getTransaction({...t,exchange:qS})}));function JS(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const XS="0x0000000000000000000000000000000000000001",KS="0x0000000000000000000000000000000000000002",$S=({blockchain:t,exchange:e,path:n})=>{if(!n)return;let r=n.map(((e,r)=>e===Vp[t].currency.address&&n[r+1]!=Vp[t].wrapped.address&&n[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:e));return r[0]==Vp[t].currency.address&&r[1]==Vp[t].wrapped.address?r.splice(0,1):r[r.length-1]==Vp[t].currency.address&&r[r.length-2]==Vp[t].wrapped.address&&r.splice(r.length-1,1),r},tj=async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,block:o})=>{if((n=$S({blockchain:t,exchange:e,path:n})).length>2)throw"Uniswap V3 can only check paths for up to 2 tokens!";try{let o=(await Promise.all(e.fees.map((r=>_E({blockchain:Vp[t].name,address:e[t].factory.address,method:"getPool",api:e[t].factory.api,cache:3600,params:[n[0],n[1],r]}).then((e=>({blockchain:t,address:e,path:n,fee:r,token0:[...n].sort()[0],token1:[...n].sort()[1]}))).catch((()=>{})))))).filter(Boolean);return o=o.filter((e=>e.address!=Vp[t].zero)),o=(await Promise.all(o.map((async t=>{try{let n;return n=r?await(async({exchange:t,pool:e,inputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactInput",params:{path:oE(["address","uint24","address"],[e.path[0],e.fee,e.path[1]]),amountIn:n},cache:5})).amountOut)({exchange:e,pool:t,inputAmount:r}):await(async({exchange:t,pool:e,outputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactOutput",params:{path:oE(["address","uint24","address"],[e.path[1],e.fee,e.path[0]]),amountOut:n},cache:5})).amountIn)({exchange:e,pool:t,outputAmount:i}),{...t,amountIn:r||n,amountOut:i||n}}catch(t){}})))).filter(Boolean),r?o.sort(((t,e)=>e.amountOut.gt(t.amountOut)?1:-1))[0]:o.sort(((t,e)=>e.amountIn.lt(t.amountIn)?1:-1))[0]}catch(t){return}};let ej=({blockchain:t,exchange:e,path:n,pools:r,amountIn:i})=>r[r.length-1].amountOut,nj=async({blockchain:t,exchange:e,path:n,pools:r,amountOut:i,block:o})=>{if(void 0===o)return r[0].amountIn;{let n;2==r.length?n=oE(["address","uint24","address","uint24","address"],[r[1].path[1],r[1].fee,r[0].path[1],r[0].fee,r[0].path[0]]):1==r.length&&(n=oE(["address","uint24","address"],[r[0].path[1],r[0].fee,r[0].path[0]]));return(await _E({block:o,blockchain:t,address:e[t].quoter.address,api:e[t].quoter.api,method:"quoteExactOutput",params:{path:n,amountOut:i}})).amountIn}};var rj={findPath:async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if([n,r].includes(Vp[t].currency.address)&&[n,r].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let u,c=[];if(c=[await tj({exchange:e,blockchain:t,path:[n,r],amountIn:i||a,amountOut:o||s})],c.filter(Boolean).length&&(u=[n,r]),u||n==Vp[t].wrapped.address||r==Vp[t].wrapped.address||(c=[],o||s?(c.push(await tj({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await tj({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountOut:c[0].amountIn}))):(c.push(await tj({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountIn:i||a})),c.filter(Boolean).length&&c.push(await tj({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length&&(u=[n,Vp[t].wrapped.address,r])),!u){c=[];let l=(await Promise.all(Vp[t].stables.usd.map((async u=>{let c=[];if(o||s?(c.push(await tj({exchange:e,blockchain:t,path:[u,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await tj({exchange:e,blockchain:t,path:[n,u],amountOut:c[0].amountIn}))):(c.push(await tj({exchange:e,blockchain:t,path:[n,u],amountIn:i||a})),c.filter(Boolean).length&&c.push(await tj({exchange:e,blockchain:t,path:[u,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length)return[u,c]})))).filter(Boolean)[0];l&&(u=[n,l[0],r],c=l[1])}return JS([u,"optionalAccess",t=>t.length])&&u[0]==Vp[t].currency.address?u.splice(1,0,Vp[t].wrapped.address):JS([u,"optionalAccess",t=>t.length])&&u[u.length-1]==Vp[t].currency.address&&u.splice(u.length-1,0,Vp[t].wrapped.address),u||(c=[]),{path:u,pools:c,exchangePath:$S({blockchain:t,exchange:e,path:u})}},pathExists:async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>{try{return!!await tj({blockchain:t,exchange:e,path:n,amountIn:r||o,amountOut:i||a})}catch(t){return!1}},getAmounts:async({blockchain:t,exchange:e,path:n,pools:r,block:i,tokenIn:o,tokenOut:a,amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l})=>{if(s){if(null==(u=await nj({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:s,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(u){if(null==(s=await ej({blockchain:t,exchange:e,path:n,pools:r,amountIn:u,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}else if(l){if(null==(u=await nj({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:l,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(c){if(null==(s=await ej({blockchain:t,exchange:e,path:n,pools:r,amountIn:c,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}return{amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l}},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i})=>{if(n===Vp[e].currency.address)return;if((await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,t[e].permit.address]})).lt(r)){return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[t[e].permit.address,Vp[e].maxInt]}}}{const o=await _E({blockchain:e,address:t[e].permit.address,method:"allowance",api:t[e].permit.api,params:[i,n,t[e].router.address]});if(o.amount.lt(r)||o.expiration-1800{let m,y=[],g=[],v="0";if(p){const t=Lf(p.signature).length;let e;65!==t&&64!==t||(e=function(t){return Df(xf([(t=Rf(t)).r,t.s,t.recoveryParam?"0x1c":"0x1b"]))}(Rf(p.signature))),y.push("0a"),g.push(Py.encode(["((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)","bytes"],[p,e]))}r[0]===Vp[t].currency.address&&(y.push("0b"),g.push(Py.encode(["address","uint256"],[KS,(i||o).toString()])),v=(i||o).toString()),1===n.length?m=oE(["address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1]]):2===n.length&&(m=oE(["address","uint24","address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1],n[1].fee,n[1].path[1]])),h||u?(y.push("00"),g.push(Py.encode(["address","uint256","uint256","bytes","bool"],[r[r.length-1]===Vp[t].currency.address?KS:XS,(i||o).toString(),(a||s).toString(),m,r[0]!==Vp[t].currency.address&&!f]))):(y.push("01"),g.push(Py.encode(["address","uint256","uint256","bytes","bool"],[r[r.length-1]===Vp[t].currency.address?KS:XS,(a||s).toString(),(i||o).toString(),m,r[0]!==Vp[t].currency.address&&!f]))),r[r.length-1]===Vp[t].currency.address&&(y.push("0c"),g.push(Py.encode(["address","uint256"],[XS,(a||s).toString()])));return{blockchain:t,from:d,to:e[t].router.address,api:e[t].router.api,method:"execute",params:{commands:`0x${y.join("")}`,inputs:g},value:v}},ROUTER:[{inputs:[{components:[{internalType:"address",name:"permit2",type:"address"},{internalType:"address",name:"weth9",type:"address"},{internalType:"address",name:"seaportV1_5",type:"address"},{internalType:"address",name:"seaportV1_4",type:"address"},{internalType:"address",name:"openseaConduit",type:"address"},{internalType:"address",name:"nftxZap",type:"address"},{internalType:"address",name:"x2y2",type:"address"},{internalType:"address",name:"foundation",type:"address"},{internalType:"address",name:"sudoswap",type:"address"},{internalType:"address",name:"elementMarket",type:"address"},{internalType:"address",name:"nft20Zap",type:"address"},{internalType:"address",name:"cryptopunks",type:"address"},{internalType:"address",name:"looksRareV2",type:"address"},{internalType:"address",name:"routerRewardsDistributor",type:"address"},{internalType:"address",name:"looksRareRewardsDistributor",type:"address"},{internalType:"address",name:"looksRareToken",type:"address"},{internalType:"address",name:"v2Factory",type:"address"},{internalType:"address",name:"v3Factory",type:"address"},{internalType:"bytes32",name:"pairInitCodeHash",type:"bytes32"},{internalType:"bytes32",name:"poolInitCodeHash",type:"bytes32"}],internalType:"struct RouterParameters",name:"params",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"BalanceTooLow",type:"error"},{inputs:[],name:"BuyPunkFailed",type:"error"},{inputs:[],name:"ContractLocked",type:"error"},{inputs:[],name:"ETHNotAccepted",type:"error"},{inputs:[{internalType:"uint256",name:"commandIndex",type:"uint256"},{internalType:"bytes",name:"message",type:"bytes"}],name:"ExecutionFailed",type:"error"},{inputs:[],name:"FromAddressIsNotOwner",type:"error"},{inputs:[],name:"InsufficientETH",type:"error"},{inputs:[],name:"InsufficientToken",type:"error"},{inputs:[],name:"InvalidBips",type:"error"},{inputs:[{internalType:"uint256",name:"commandType",type:"uint256"}],name:"InvalidCommandType",type:"error"},{inputs:[],name:"InvalidOwnerERC1155",type:"error"},{inputs:[],name:"InvalidOwnerERC721",type:"error"},{inputs:[],name:"InvalidPath",type:"error"},{inputs:[],name:"InvalidReserves",type:"error"},{inputs:[],name:"InvalidSpender",type:"error"},{inputs:[],name:"LengthMismatch",type:"error"},{inputs:[],name:"SliceOutOfBounds",type:"error"},{inputs:[],name:"TransactionDeadlinePassed",type:"error"},{inputs:[],name:"UnableToClaim",type:"error"},{inputs:[],name:"UnsafeCast",type:"error"},{inputs:[],name:"V2InvalidPath",type:"error"},{inputs:[],name:"V2TooLittleReceived",type:"error"},{inputs:[],name:"V2TooMuchRequested",type:"error"},{inputs:[],name:"V3InvalidAmountOut",type:"error"},{inputs:[],name:"V3InvalidCaller",type:"error"},{inputs:[],name:"V3InvalidSwap",type:"error"},{inputs:[],name:"V3TooLittleReceived",type:"error"},{inputs:[],name:"V3TooMuchRequested",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsSent",type:"event"},{inputs:[{internalType:"bytes",name:"looksRareClaim",type:"bytes"}],name:"collectRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"commands",type:"bytes"},{internalType:"bytes[]",name:"inputs",type:"bytes[]"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes",name:"commands",type:"bytes"},{internalType:"bytes[]",name:"inputs",type:"bytes[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155BatchReceived",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC721Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"uniswapV3SwapCallback",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!0,internalType:"int24",name:"tickSpacing",type:"int24"}],name:"FeeAmountEnabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"int24",name:"tickSpacing",type:"int24"},{indexed:!1,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"}],name:"createPool",outputs:[{internalType:"address",name:"pool",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],name:"enableFeeAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"",type:"uint24"}],name:"feeAmountTickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint24",name:"",type:"uint24"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"parameters",outputs:[{internalType:"address",name:"factory",type:"address"},{internalType:"address",name:"token0",type:"address"},{internalType:"address",name:"token1",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_owner",type:"address"}],name:"setOwner",outputs:[],stateMutability:"nonpayable",type:"function"}],POOL:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"feeProtocol0Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol0New",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1New",type:"uint8"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Swap",type:"event"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8",name:"feeProtocol0",type:"uint8"},{internalType:"uint8",name:"feeProtocol1",type:"uint8"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint8",name:"feeProtocol",type:"uint8"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int16",name:"",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],QUOTER:[{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"quoteExactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactInputSingleParams",name:"params",type:"tuple"}],name:"quoteExactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"quoteExactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactOutputSingleParams",name:"params",type:"tuple"}],name:"quoteExactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"path",type:"bytes"}],name:"uniswapV3SwapCallback",outputs:[],stateMutability:"view",type:"function"}],PERMIT2:[{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"}],name:"AllowanceExpired",type:"error"},{inputs:[],name:"ExcessiveInvalidation",type:"error"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"InsufficientAllowance",type:"error"},{inputs:[{internalType:"uint256",name:"maxAmount",type:"uint256"}],name:"InvalidAmount",type:"error"},{inputs:[],name:"InvalidContractSignature",type:"error"},{inputs:[],name:"InvalidNonce",type:"error"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"InvalidSignatureLength",type:"error"},{inputs:[],name:"InvalidSigner",type:"error"},{inputs:[],name:"LengthMismatch",type:"error"},{inputs:[{internalType:"uint256",name:"signatureDeadline",type:"uint256"}],name:"SignatureExpired",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint160",name:"amount",type:"uint160"},{indexed:!1,internalType:"uint48",name:"expiration",type:"uint48"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"address",name:"spender",type:"address"}],name:"Lockdown",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint48",name:"newNonce",type:"uint48"},{indexed:!1,internalType:"uint48",name:"oldNonce",type:"uint48"}],name:"NonceInvalidation",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint160",name:"amount",type:"uint160"},{indexed:!1,internalType:"uint48",name:"expiration",type:"uint48"},{indexed:!1,internalType:"uint48",name:"nonce",type:"uint48"}],name:"Permit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"uint256",name:"word",type:"uint256"},{indexed:!1,internalType:"uint256",name:"mask",type:"uint256"}],name:"UnorderedNonceInvalidation",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"}],name:"approve",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint48",name:"newNonce",type:"uint48"}],name:"invalidateNonces",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"wordPos",type:"uint256"},{internalType:"uint256",name:"mask",type:"uint256"}],name:"invalidateUnorderedNonces",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"spender",type:"address"}],internalType:"struct IAllowanceTransfer.TokenSpenderPair[]",name:"approvals",type:"tuple[]"}],name:"lockdown",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"}],name:"nonceBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],internalType:"struct IAllowanceTransfer.PermitDetails[]",name:"details",type:"tuple[]"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"sigDeadline",type:"uint256"}],internalType:"struct IAllowanceTransfer.PermitBatch",name:"permitBatch",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],internalType:"struct IAllowanceTransfer.PermitDetails",name:"details",type:"tuple"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"sigDeadline",type:"uint256"}],internalType:"struct IAllowanceTransfer.PermitSingle",name:"permitSingle",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions",name:"permitted",type:"tuple"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails",name:"transferDetails",type:"tuple"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions[]",name:"permitted",type:"tuple[]"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitBatchTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails[]",name:"transferDetails",type:"tuple[]"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions",name:"permitted",type:"tuple"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails",name:"transferDetails",type:"tuple"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"witness",type:"bytes32"},{internalType:"string",name:"witnessTypeString",type:"string"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitWitnessTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions[]",name:"permitted",type:"tuple[]"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitBatchTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails[]",name:"transferDetails",type:"tuple[]"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"witness",type:"bytes32"},{internalType:"string",name:"witnessTypeString",type:"string"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitWitnessTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"address",name:"token",type:"address"}],internalType:"struct IAllowanceTransfer.AllowanceTransferDetails[]",name:"transferDetails",type:"tuple[]"}],name:"transferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"address",name:"token",type:"address"}],name:"transferFrom",outputs:[],stateMutability:"nonpayable",type:"function"}]};const ij={name:"uniswap_v3",label:"Uniswap v3",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIGRhdGEtdGVzdGlkPSJ1bmlzd2FwLWxvZ28iIGNsYXNzPSJyZ3c2ZXo0NHAgcmd3NmV6NGVqIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMzUyNiAxOS45MjQyQzIwLjI5MjggMjAuMTU0OSAyMC4xODg1IDIwLjM3MTUgMjAuMDQ1NSAyMC41NjE4QzE5Ljc3OTMgMjAuOTA4OCAxOS40MjcgMjEuMTc5NCAxOS4wMjM5IDIxLjM0NjZDMTguNjYxNCAyMS41MDM1IDE4LjI3NzQgMjEuNjA1IDE3Ljg4NDkgMjEuNjQ3NUMxNy44MDQyIDIxLjY1NzggMTcuNzIwNiAyMS42NjQxIDE3LjYzOTUgMjEuNjcwM0wxNy42MjYzIDIxLjY3MTNDMTcuMzc3NyAyMS42ODA4IDE3LjEzODcgMjEuNzcgMTYuOTQ0MiAyMS45MjU4QzE2Ljc0OTcgMjIuMDgxNyAxNi42MSAyMi4yOTYgMTYuNTQ1NSAyMi41MzczQzE2LjUxNiAyMi42NTc0IDE2LjQ5NCAyMi43NzkyIDE2LjQ3OTggMjIuOTAyMUMxNi40NTcyIDIzLjA4NzQgMTYuNDQ1NiAyMy4yNzcxIDE2LjQzMyAyMy40ODIzQzE2LjQyNCAyMy42Mjk1IDE2LjQxNDQgMjMuNzg0OCAxNi40IDIzLjk1MjFDMTYuMzE1NiAyNC42MzM3IDE2LjExOTMgMjUuMjk2NSAxNS44MTkyIDI1LjkxMzZDMTUuNzU3OSAyNi4wNDMzIDE1LjY5NTQgMjYuMTY5MSAxNS42MzM5IDI2LjI5MjZDMTUuMzA0OSAyNi45NTQ2IDE1LjAwNzYgMjcuNTUyNiAxNS4wOTI5IDI4LjM1MzVDMTUuMTU5NyAyOC45NzA2IDE1LjQ3NDQgMjkuMzg0MSAxNS44OTI1IDI5LjgxMDZDMTYuMDkxMSAzMC4wMTQ2IDE2LjM1NDQgMzAuMTg4OSAxNi42Mjc3IDMwLjM2OTlDMTcuMzkyNyAzMC44NzYzIDE4LjIzNjEgMzEuNDM0NyAxNy45NTgyIDMyLjg0MTVDMTcuNzMwOCAzMy45ODE0IDE1Ljg0OTQgMzUuMTc3NiAxMy4yMDUgMzUuNTk1NEMxMy40NjE1IDM1LjU1NjMgMTIuODk2NSAzNC41ODc5IDEyLjgzMzggMzQuNDgwNEwxMi44MyAzNC40NzM5QzEyLjc1NzEgMzQuMzU5MiAxMi42ODI0IDM0LjI0NjIgMTIuNjA3OSAzNC4xMzM0TDEyLjYwNzkgMzQuMTMzNEwxMi42MDc4IDM0LjEzMzRDMTIuMzkyNiAzMy44MDc2IDEyLjE3ODMgMzMuNDgzNSAxMi4wMTExIDMzLjEyNDFDMTEuNTY5MyAzMi4xODU2IDExLjM2NDUgMzEuMDk5OCAxMS41NDU1IDMwLjA3MTRDMTEuNzA5NSAyOS4xNDA3IDEyLjMyMjEgMjguMzk3MiAxMi45MTE4IDI3LjY4MTNMMTIuOTExOCAyNy42ODEzQzEzLjAwOCAyNy41NjQ2IDEzLjEwMzUgMjcuNDQ4NyAxMy4xOTY0IDI3LjMzMjhDMTMuOTg1MiAyNi4zNDg4IDE0LjgxMjggMjUuMDU5NSAxNC45OTU5IDIzLjc4MjJDMTUuMDExNCAyMy42NzEyIDE1LjAyNTIgMjMuNTUwMiAxNS4wMzk3IDIzLjQyMjlMMTUuMDM5NyAyMy40MjI5TDE1LjAzOTcgMjMuNDIyOUMxNS4wNjU3IDIzLjE5NSAxNS4wOTM5IDIyLjk0NjkgMTUuMTM4MiAyMi42OTk3QzE1LjIwMzkgMjIuMjcyOCAxNS4zMzcxIDIxLjg1OTEgMTUuNTMyNiAyMS40NzQzQzE1LjY2NiAyMS4yMjIgMTUuODQxNyAyMC45OTQ2IDE2LjA1MiAyMC44MDIxQzE2LjE2MTYgMjAuNjk5OSAxNi4yMzM5IDIwLjU2MzcgMTYuMjU3NCAyMC40MTUzQzE2LjI4MDggMjAuMjY3IDE2LjI1NCAyMC4xMTUgMTYuMTgxMyAxOS45ODM3TDExLjk2NTggMTIuMzY3M0wxOC4wMjA3IDE5Ljg3MzNDMTguMDg5NyAxOS45NjAzIDE4LjE3NjggMjAuMDMxIDE4LjI3NiAyMC4wODAzQzE4LjM3NTIgMjAuMTI5NiAxOC40ODQgMjAuMTU2NCAxOC41OTQ2IDIwLjE1ODhDMTguNzA1MyAyMC4xNjEyIDE4LjgxNTEgMjAuMTM5MSAxOC45MTYzIDIwLjA5NEMxOS4wMTc1IDIwLjA0OSAxOS4xMDc2IDE5Ljk4MjEgMTkuMTgwMiAxOS44OTgyQzE5LjI1NjkgMTkuODA4NCAxOS4zMDA0IDE5LjY5NDcgMTkuMzAzMyAxOS41NzYzQzE5LjMwNjMgMTkuNDU4IDE5LjI2ODUgMTkuMzQyMyAxOS4xOTYzIDE5LjI0ODdDMTguOTE0OCAxOC44ODczIDE4LjYyMTggMTguNTIxIDE4LjMzMDIgMTguMTU2M0wxOC4zMyAxOC4xNTZDMTguMjEyIDE4LjAwODUgMTguMDk0MyAxNy44NjEzIDE3Ljk3NzYgMTcuNzE0OEwxNi40NTM5IDE1LjgyMDVMMTMuMzk1NyAxMi4wMzgyTDEwIDhMMTMuNzg4IDExLjY5OTRMMTcuMDQzMyAxNS4zMTQ5TDE4LjY2NzMgMTcuMTI3QzE4LjgxNjUgMTcuMjk1OCAxOC45NjU3IDE3LjQ2MzEgMTkuMTE0OCAxNy42MzAzQzE5LjUwNDQgMTguMDY3MSAxOS44OTQgMTguNTAzOSAyMC4yODM2IDE4Ljk2NzNMMjAuMzcyIDE5LjA3NTVMMjAuMzkxNCAxOS4yNDMzQzIwLjQxNzYgMTkuNDcwOCAyMC40MDQ1IDE5LjcwMTIgMjAuMzUyNiAxOS45MjQyWk0zNS45MjQ3IDIyLjQ2OTdMMzUuOTMxMSAyMi40Nzk1QzM1LjkzIDIxLjY3MTkgMzUuNDMyMiAyMC4zMzk0IDM0LjQyNDcgMTkuMDU3N0wzNC40MDEgMTkuMDI2M0MzNC4wOTA2IDE4LjY0MSAzMy43NTI0IDE4LjI3OTIgMzMuMzg5MSAxNy45NDM4QzMzLjMyMTIgMTcuODc3OCAzMy4yNDggMTcuODEyOCAzMy4xNzM2IDE3Ljc0NzlDMzIuNzA4MSAxNy4zNDAxIDMyLjE5OTMgMTYuOTg1IDMxLjY1NjQgMTYuNjg5MkwzMS42MTc2IDE2LjY2OTdDMjkuOTExOCAxNS43MzY2IDI3LjY5MiAxNS4yNTYgMjQuOTU0OSAxNS43OTcyQzI0LjU4NzMgMTUuMzQ4OSAyNC4xOTE0IDE0LjkyNDggMjMuNzY5NiAxNC41Mjc1QzIzLjEyMzYgMTMuOTA5MSAyMi4zNjMyIDEzLjQyNDEgMjEuNTMxNSAxMy4wOTk3QzIwLjcwNzIgMTIuNzk2NiAxOS44MjQ0IDEyLjY4ODQgMTguOTUxNyAxMi43ODM2QzE5Ljc5MjkgMTIuODU5NyAyMC42MTIzIDEzLjA5NDcgMjEuMzY2NiAxMy40NzY0QzIyLjA5NTEgMTMuODY4NSAyMi43NTEyIDE0LjM4MzMgMjMuMzA2MiAxNC45OTg0QzIzLjg2ODggMTUuNjI2MyAyNC4zOTc2IDE2LjI4MzkgMjQuODkwMyAxNi45Njg1TDI1LjAxMzkgMTcuMTMwMkMyNS40OTYgMTcuNzYwOSAyNS45ODY4IDE4LjQwMyAyNi41OTgyIDE4Ljk3NDRDMjYuOTM0OCAxOS4yOTI1IDI3LjMxMDMgMTkuNTY2NCAyNy43MTU3IDE5Ljc4OTVDMjcuODIzNCAxOS44NDQ3IDI3LjkzMjMgMTkuODk2NiAyOC4wMzkgMTkuOTQyMUMyOC4xNDU2IDE5Ljk4NzYgMjguMjQ1OCAyMC4wMjk4IDI4LjM1MzYgMjAuMDY4OEMyOC41NjE2IDIwLjE0OTkgMjguNzc3MSAyMC4yMTcxIDI4Ljk5MjYgMjAuMjc4OEMyOS44NTQ3IDIwLjUyNTYgMzAuNzM3MiAyMC42MTQzIDMxLjU5OTMgMjAuNjYyQzMxLjcxOTIgMjAuNjY4MyAzMS44Mzg5IDIwLjY3NDIgMzEuOTU4MSAyMC42ODAxTDMxLjk1ODMgMjAuNjgwMUMzMi4yNjYyIDIwLjY5NTQgMzIuNTcxMyAyMC43MTA1IDMyLjg3MTkgMjAuNzMyM0MzMy4yODM3IDIwLjc1NjkgMzMuNjkyMiAyMC44MjE0IDM0LjA5MTcgMjAuOTI1QzM0LjY5MTggMjEuMDgyMiAzNS4yMjAxIDIxLjQ0MTMgMzUuNTg4NSAyMS45NDI1QzM1LjcxMzcgMjIuMTA5NSAzNS44MjYxIDIyLjI4NTcgMzUuOTI0NyAyMi40Njk3Wk0zMy40MDEzIDE3Ljk0NTFDMzMuMzU4IDE3LjkwNDkgMzMuMzEzOSAxNy44NjUxIDMzLjI3IDE3LjgyNTRMMzMuMjcgMTcuODI1NEMzMy4yNDE4IDE3Ljc5OTkgMzMuMjEzNiAxNy43NzQ1IDMzLjE4NTggMTcuNzQ5MUMzMy4yMDczIDE3Ljc2ODggMzMuMjI4OCAxNy43ODg3IDMzLjI1MDMgMTcuODA4N0MzMy4zMDA5IDE3Ljg1NTYgMzMuMzUxNCAxNy45MDI1IDMzLjQwMTMgMTcuOTQ1MVpNMzIuMzIzOCAyNS45MTcyQzI5LjU1MTYgMjQuNzg3MiAyNi42NTE4IDIzLjYwNTEgMjcuMDgzNSAyMC4yODc1QzI4LjAwOTEgMjEuMjgwMiAyOS40NjIgMjEuNDg4NCAzMS4wNDIyIDIxLjcxNDlDMzIuNDc1NyAyMS45MjAzIDM0LjAxMzkgMjIuMTQwNyAzNS4zNTgzIDIyLjk3NTNDMzguNTMwNiAyNC45NDMzIDM4LjA2NzMgMjguNzY2NiAzNi45ODk3IDMwLjE3MzlDMzcuMDg2OSAyNy44NTg3IDM0Ljc1NDQgMjYuOTA4IDMyLjMyMzggMjUuOTE3MlpNMjEuMTU1MSAyNC4yNTY3QzIxLjg4NjggMjQuMTg2MyAyMy40NDYxIDIzLjgwNDIgMjIuNzQ4OSAyMi41NzEyQzIyLjU5ODkgMjIuMzIwNCAyMi4zODE1IDIyLjExNzIgMjIuMTIxNyAyMS45ODQ4QzIxLjg2MTkgMjEuODUyNSAyMS41NzAyIDIxLjc5NjUgMjEuMjgwMSAyMS44MjMyQzIwLjk4NTggMjEuODU1IDIwLjcwODIgMjEuOTc2OSAyMC40ODUyIDIyLjE3MjVDMjAuMjYyMiAyMi4zNjgxIDIwLjEwNDQgMjIuNjI3OCAyMC4wMzM0IDIyLjkxNjVDMTkuODE2OCAyMy43MjMgMjAuMDQ2MyAyNC4zNjQ5IDIxLjE1NTEgMjQuMjU2N1pNMjAuOTQ0OCAxNC41MDE0QzIwLjQ4NTggMTMuOTY4OCAxOS43NzM1IDEzLjY4OTUgMTkuMDc1MiAxMy41ODc4QzE5LjA0OTEgMTMuNzYyNSAxOS4wMzI2IDEzLjkzODUgMTkuMDI1NyAxNC4xMTVDMTguOTk0NCAxNS41Njg3IDE5LjUwODQgMTcuMTY1NCAyMC41MDMgMTguMjc1QzIwLjgyMTIgMTguNjMzNyAyMS4yMDQ5IDE4LjkyNzYgMjEuNjMzNCAxOS4xNDFDMjEuODgxMiAxOS4yNjIyIDIyLjUzODYgMTkuNTYzMSAyMi43ODIxIDE5LjI5MjVDMjIuODAwNiAxOS4yNjc3IDIyLjgxMjMgMTkuMjM4NCAyMi44MTU5IDE5LjIwNzZDMjIuODE5NSAxOS4xNzY4IDIyLjgxNDkgMTkuMTQ1NiAyMi44MDI2IDE5LjExNzJDMjIuNzYyMiAxOS4wMDEzIDIyLjY4NDMgMTguODk2MSAyMi42MDY5IDE4Ljc5MTdDMjIuNTUyIDE4LjcxNzcgMjIuNDk3NCAxOC42NDQxIDIyLjQ1NjcgMTguNTY3MkMyMi40MTU1IDE4LjQ4OTggMjIuMzcxNCAxOC40MTQyIDIyLjMyNzQgMTguMzM4OEwyMi4zMjc0IDE4LjMzODhDMjIuMjQ0NyAxOC4xOTcgMjIuMTYyMiAxOC4wNTU1IDIyLjA5ODkgMTcuOTAxNUMyMS45MzE5IDE3LjQ5ODQgMjEuODQ1IDE3LjA2OTggMjEuNzU4MyAxNi42NDI1TDIxLjc1ODMgMTYuNjQyNEwyMS43NTgzIDE2LjY0MjRMMjEuNzU4MyAxNi42NDIzTDIxLjc1ODIgMTYuNjQyMkwyMS43NTgyIDE2LjY0MjFMMjEuNzU4MiAxNi42NDJDMjEuNzQwOSAxNi41NTY2IDIxLjcyMzYgMTYuNDcxMiAyMS43MDU2IDE2LjM4NkMyMS41NzMxIDE1LjcyNjggMjEuNDAzOSAxNS4wMzQgMjAuOTQ0OCAxNC41MDE0Wk0zMC43NTI0IDI2LjA5OEMzMC4wNDAzIDI4LjA5NDMgMzEuMTg4OCAyOS43ODA0IDMyLjMzMDYgMzEuNDU2NkMzMy42MDc3IDMzLjMzMTUgMzQuODc2NCAzNS4xOTQgMzMuNTIyOCAzNy40NjQyQzM2LjE1MzIgMzYuMzczMSAzNy40MDIxIDMzLjA3NjkgMzYuMzEwNSAzMC40NjE2QzM1LjYyMjcgMjguODA3NCAzMy45NjQ5IDI3LjkxMDYgMzIuNDI2MSAyNy4wNzgzTDMyLjQyNjEgMjcuMDc4M0wzMi40MjYgMjcuMDc4MkMzMS44MjkgMjYuNzU1MyAzMS4yNDk5IDI2LjQ0MjEgMzAuNzUyNCAyNi4wOThaTTIzLjA1NTIgMzAuODYzM0MyMi41Nzg1IDMxLjA1ODcgMjIuMTI5IDMxLjMxNTIgMjEuNzE3OSAzMS42MjY1QzIyLjY1MjcgMzEuMjg1OSAyMy42MzM5IDMxLjA5MTQgMjQuNjI3NCAzMS4wNDk1QzI0LjgwNzQgMzEuMDM4OCAyNC45ODg3IDMxLjAzMDQgMjUuMTcxNSAzMS4wMjE5TDI1LjE3MTcgMzEuMDIxOUwyNS4xNzIgMzEuMDIxOUMyNS40ODc4IDMxLjAwNzMgMjUuODA4NSAzMC45OTI1IDI2LjEzNiAzMC45NjUxQzI2LjY3MjkgMzAuOTI4NSAyNy4yMDI1IDMwLjgxOTIgMjcuNzEwMyAzMC42NDAzQzI4LjI0MjUgMzAuNDUzMyAyOC43MjY4IDMwLjE1MDEgMjkuMTI4NCAyOS43NTI3QzI5LjUzNDIgMjkuMzQyNCAyOS44MTg4IDI4LjgyNzIgMjkuOTUwNiAyOC4yNjQyQzMwLjA2NjYgMjcuNzMyNCAzMC4wNTAzIDI3LjE4MDEgMjkuOTAzMiAyNi42NTYyQzI5Ljc1NiAyNi4xMzIyIDI5LjQ4MjUgMjUuNjUyOCAyOS4xMDY5IDI1LjI2MDNDMjkuMjg4MSAyNS43MjIxIDI5LjM5OTYgMjYuMjA4NCAyOS40Mzc3IDI2LjcwMzNDMjkuNDcwNSAyNy4xNjQgMjkuNDA4MSAyNy42MjY1IDI5LjI1NDUgMjguMDYxOEMyOS4xMDQ1IDI4LjQ3NDQgMjguODU5MyAyOC44NDU0IDI4LjUzOSAyOS4xNDQzQzI4LjIwODEgMjkuNDQ2MiAyNy44MjUgMjkuNjg0NiAyNy40MDg2IDI5Ljg0NzlDMjYuODI5OSAzMC4wODIxIDI2LjE3NTUgMzAuMTc3OSAyNS40OTM5IDMwLjI3NzdDMjUuMTgzIDMwLjMyMzIgMjQuODY2NCAzMC4zNjk2IDI0LjU0ODcgMzAuNDMwM0MyNC4wMzc4IDMwLjUyNDMgMjMuNTM3NCAzMC42Njk0IDIzLjA1NTIgMzAuODYzM1pNMzEuMzE4NyAzOS4xMDQ2TDMxLjI3MyAzOS4xNDE1TDMxLjI3MyAzOS4xNDE2QzMxLjE1MjUgMzkuMjM4OSAzMS4wMzAxIDM5LjMzNzkgMzAuODk4MiAzOS40MjY4QzMwLjczMDEgMzkuNTM4IDMwLjU1NCAzOS42MzY1IDMwLjM3MTMgMzkuNzIxMkMyOS45OTA4IDM5LjkwNzcgMjkuNTcyNiA0MC4wMDI5IDI5LjE0OTMgMzkuOTk5NEMyOC4wMDI4IDM5Ljk3NzggMjcuMTkyNCAzOS4xMjA1IDI2LjcxODMgMzguMTUxNkMyNi41OTQgMzcuODk3NyAyNi40ODQ1IDM3LjYzNTkgMjYuMzc1IDM3LjM3NDFMMjYuMzc1IDM3LjM3NDFDMjYuMTk5NyAzNi45NTUxIDI2LjAyNDQgMzYuNTM2MSAyNS43ODgzIDM2LjE0OUMyNS4yMzk5IDM1LjI0OTUgMjQuMzAxMyAzNC41MjUzIDIzLjIwMjIgMzQuNjU5NUMyMi43NTM5IDM0LjcxNTggMjIuMzMzNiAzNC45MTgyIDIyLjA4NDcgMzUuMzA5QzIxLjQyOTUgMzYuMzI5OCAyMi4zNzAzIDM3Ljc1OTggMjMuNTY5NiAzNy41NTczQzIzLjY3MTYgMzcuNTQxNyAyMy43NzE0IDM3LjUxNDEgMjMuODY3IDM3LjQ3NTFDMjMuOTYyMyAzNy40MzQzIDI0LjA1MTIgMzcuMzggMjQuMTMxIDM3LjMxMzhDMjQuMjk4NiAzNy4xNzM2IDI0LjQyNDggMzYuOTkwMyAyNC40OTYzIDM2Ljc4MzRDMjQuNTc1MSAzNi41Njc2IDI0LjU5MjYgMzYuMzM0MSAyNC41NDcgMzYuMTA5QzI0LjQ5NzggMzUuODczNiAyNC4zNTk0IDM1LjY2NjggMjQuMTYxMiAzNS41MzJDMjQuMzkxNyAzNS42NDA0IDI0LjU3MTMgMzUuODM0NSAyNC42NjIzIDM2LjA3MzJDMjQuNzU2NiAzNi4zMTkgMjQuNzgwOSAzNi41ODYyIDI0LjczMjMgMzYuODQ1MUMyNC42ODUyIDM3LjExNDcgMjQuNTY2OSAzNy4zNjY3IDI0LjM4OTYgMzcuNTc0N0MyNC4yOTU1IDM3LjY4MTYgMjQuMTg2NiAzNy43NzQ2IDI0LjA2NjQgMzcuODUwN0MyMy45NDcyIDM3LjkyNTkgMjMuODE5NSAzNy45ODY2IDIzLjY4NiAzOC4wMzE1QzIzLjQxNTMgMzguMTI0NCAyMy4xMjcyIDM4LjE1NDQgMjIuODQzMyAzOC4xMTkyQzIyLjQ0NDcgMzguMDYyMSAyMi4wNjg4IDM3Ljg5ODMgMjEuNzU1IDM3LjY0NUMyMS42OTcgMzcuNTk5IDIxLjY0MTQgMzcuNTUwOCAyMS41ODc1IDM3LjUwMDhDMjEuMzc0IDM3LjMxNTggMjEuMTgwMiAzNy4xMDg3IDIxLjAwOTMgMzYuODgyOUMyMC45MzI2IDM2Ljc5ODEgMjAuODU0NyAzNi43MTQ0IDIwLjc3MzMgMzYuNjM0QzIwLjM4OTEgMzYuMjI5IDE5LjkzNTggMzUuODk2NSAxOS40MzQ5IDM1LjY1MjJDMTkuMDg5NSAzNS40OTk4IDE4LjcyOCAzNS4zODcyIDE4LjM1NzQgMzUuMzE2NkMxOC4xNzA5IDM1LjI3NzYgMTcuOTgyNCAzNS4yNDk1IDE3Ljc5MzggMzUuMjI1N0MxNy43NzMzIDM1LjIyMzYgMTcuNzM0IDM1LjIxNjcgMTcuNjg1IDM1LjIwODJMMTcuNjg0NyAzNS4yMDgxTDE3LjY4NDYgMzUuMjA4MUwxNy42ODQ2IDM1LjIwODFMMTcuNjg0NiAzNS4yMDgxTDE3LjY4NDUgMzUuMjA4MUMxNy41MjcxIDM1LjE4MDYgMTcuMjcxMSAzNS4xMzYgMTcuMjI1OSAzNS4xNzhDMTcuODA4OCAzNC42MzkgMTguNDQ0MSAzNC4xNjAzIDE5LjEyMjQgMzMuNzQ5MUMxOS44MTg5IDMzLjMzNCAyMC41NjY3IDMzLjAxMjYgMjEuMzQ2NiAzMi43OTMzQzIyLjE1NTEgMzIuNTY0NyAyMy4wMDA5IDMyLjQ5OTUgMjMuODM0NyAzMi42MDE3QzI0LjI2MzkgMzIuNjUzNSAyNC42ODQzIDMyLjc2MjcgMjUuMDg0NyAzMi45MjY0QzI1LjUwNDIgMzMuMDk0OCAyNS44OTE0IDMzLjMzNTEgMjYuMjI5MSAzMy42MzY2QzI2LjU2MzIgMzMuOTUyOCAyNi44MzMzIDM0LjMzMTEgMjcuMDI0MyAzNC43NTA0QzI3LjE5NjggMzUuMTQzMSAyNy4zMjU0IDM1LjU1MzcgMjcuNDA3OSAzNS45NzQ3QzI3LjQ1MjEgMzYuMjAxMyAyNy40ODU1IDM2LjQ1MDIgMjcuNTE5OSAzNi43MDc5TDI3LjUyIDM2LjcwNzlMMjcuNTIgMzYuNzA4TDI3LjUyIDM2LjcwOEMyNy42NzcxIDM3Ljg4MjMgMjcuODU4NSAzOS4yMzcyIDI5LjIwNDMgMzkuNDczM0MyOS4yODk4IDM5LjQ5IDI5LjM3NjEgMzkuNTAyMyAyOS40NjI5IDM5LjUxMDJMMjkuNzMxMiAzOS41MTY2QzI5LjkxNTcgMzkuNTAzNCAzMC4wOTkgMzkuNDc3IDMwLjI3OTcgMzkuNDM3NkMzMC42NTQxIDM5LjM0OTIgMzEuMDE5IDM5LjIyNDEgMzEuMzY5MSAzOS4wNjQyTDMxLjMxODcgMzkuMTA0NlpNMjEuMDgwMSAzNi45NjE5QzIxLjExMjMgMzYuOTk4OSAyMS4xNDQ5IDM3LjAzNTUgMjEuMTc3OSAzNy4wNzE4QzIxLjE2NDQgMzcuMDU2NyAyMS4xNTEgMzcuMDQxNSAyMS4xMzc1IDM3LjAyNjRMMjEuMTM3NSAzNy4wMjY0TDIxLjEzNzUgMzcuMDI2NEwyMS4xMzc1IDM3LjAyNjRDMjEuMTE4NCAzNy4wMDQ5IDIxLjA5OTMgMzYuOTgzNCAyMS4wODAxIDM2Ljk2MTlaIiBmaWxsPSJjdXJyZW50Q29sb3IiPjwvcGF0aD48L3N2Zz4K",protocol:"uniswap_v3",slippage:!0,fees:[100,500,3e3,1e4],blockchains:["ethereum","bsc","polygon","optimism","arbitrum"],ethereum:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},bsc:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x78D78E420Da98ad378D7799bE8f4AF69033EB077",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},polygon:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},optimism:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},arbitrum:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},base:{router:{address:"0x198EF79F1F515F02dFE9e3115eD9fC07183f02fC",api:rj.ROUTER},factory:{address:"0x33128a8fC17869897dcE68Ed026d694621f6FDfD",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}}};var oj=t=>new bx(Object.assign(ij,{scope:t,findPath:t=>rj.findPath({...t,exchange:ij}),pathExists:t=>rj.pathExists({...t,exchange:ij}),getAmounts:t=>rj.getAmounts({...t,exchange:ij}),getPrep:t=>rj.getPrep({...t,exchange:ij}),getTransaction:t=>rj.getTransaction({...t,exchange:ij})}));var aj={findPath:async({blockchain:t,tokenIn:e,tokenOut:n})=>{if(![e,n].includes(Vp[t].currency.address)||![e,n].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let r=[e,n];return{path:r,exchangePath:r}},pathExists:async({blockchain:t,path:e})=>!(!e||2!==e.length)&&(e.includes(Vp[t].currency.address)&&e.includes(Vp[t].wrapped.address)),getAmounts:async({path:t,block:e,tokenIn:n,tokenOut:r,amountOut:i,amountIn:o,amountInMax:a,amountOutMin:s})=>(i?o=a=s=i:o?i=a=s=o:s?o=a=i=s:a&&(i=s=o=a),{amountOut:i,amountIn:o,amountInMax:a,amountOutMin:s}),getTransaction:({exchange:t,blockchain:e,path:n,amountIn:r,amountInMax:i,amountOut:o,amountOutMin:a,amountInInput:s,amountOutInput:u,amountInMaxInput:c,amountOutMinInput:l,account:h})=>{let d={blockchain:e,from:h,to:t[e].router.address,api:t[e].router.api};return n[0]===Vp[e].currency.address&&n[1]===Vp[e].wrapped.address?(d.method="deposit",d.value=r.toString(),d):n[0]===Vp[e].wrapped.address&&n[1]===Vp[e].currency.address?(d.method="withdraw",d.value=0,d.params={wad:r},d):void 0},WETH:[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"guy",type:"address"},{name:"wad",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"src",type:"address"},{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"",type:"address"},{name:"",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"guy",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"}]};const sj={name:"wavax",label:"Wrapped Avax",logo:Vp.avalanche.wrapped.logo,protocol:"weth",slippage:!1,blockchains:["avalanche"],avalanche:{router:{address:Vp.avalanche.wrapped.address,api:aj.WETH}}};var uj=t=>new bx(Object.assign(sj,{scope:t,findPath:t=>aj.findPath({...t,exchange:sj}),pathExists:t=>aj.pathExists({...t,exchange:sj}),getAmounts:t=>aj.getAmounts({...t,exchange:sj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:sj})}));const cj={name:"wbnb",label:"Wrapped BNB",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxOTIgMTkyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxOTIgMTkyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6I0YwQjkwQjt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik01NCw0MS4xbDQyLTI0LjJsNDIsMjQuMmwtMTUuNCw4LjlMOTYsMzQuOUw2OS40LDUwTDU0LDQxLjF6IE0xMzgsNzEuN2wtMTUuNC04LjlMOTYsNzhMNjkuNCw2Mi43bC0xNS40LDl2MTgKCUw4MC42LDEwNXYzMC41bDE1LjQsOWwxNS40LTlWMTA1TDEzOCw4OS43VjcxLjd6IE0xMzgsMTIwLjN2LTE4bC0xNS40LDguOXYxOEMxMjIuNiwxMjkuMSwxMzgsMTIwLjMsMTM4LDEyMC4zeiBNMTQ4LjksMTI2LjQKCWwtMjYuNiwxNS4zdjE4bDQyLTI0LjJWODdsLTE1LjQsOUMxNDguOSw5NiwxNDguOSwxMjYuNCwxNDguOSwxMjYuNHogTTEzMy41LDU2LjRsMTUuNCw5djE4bDE1LjQtOXYtMThsLTE1LjQtOUwxMzMuNSw1Ni40CglMMTMzLjUsNTYuNHogTTgwLjYsMTQ4LjN2MThsMTUuNCw5bDE1LjQtOXYtMThMOTYsMTU3LjFMODAuNiwxNDguM3ogTTU0LDEyMC4zbDE1LjQsOXYtMTguMUw1NCwxMDIuM0w1NCwxMjAuM0w1NCwxMjAuM3oKCSBNODAuNiw1Ni40bDE1LjQsOWwxNS40LTlMOTYsNDcuNUM5Niw0Ny40LDgwLjYsNTYuNCw4MC42LDU2LjRMODAuNiw1Ni40eiBNNDMuMSw2NS40bDE1LjQtOWwtMTUuNC05bC0xNS40LDl2MThsMTUuNCw5TDQzLjEsNjUuNAoJTDQzLjEsNjUuNHogTTQzLjEsOTUuOUwyNy43LDg3djQ4LjVsNDIsMjQuMnYtMThsLTI2LjYtMTUuM1Y5NS45TDQzLjEsOTUuOXoiLz4KPC9zdmc+Cg==",slippage:!1,blockchains:["bsc"],bsc:{router:{address:Vp.bsc.wrapped.address,api:aj.WETH}}};var lj=t=>new bx(Object.assign(cj,{scope:t,findPath:t=>aj.findPath({...t,exchange:cj}),pathExists:t=>aj.pathExists({...t,exchange:cj}),getAmounts:t=>aj.getAmounts({...t,exchange:cj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:cj})}));const hj={name:"weth",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["ethereum"],ethereum:{router:{address:Vp.ethereum.wrapped.address,api:aj.WETH}}};var dj=t=>new bx(Object.assign(hj,{scope:t,findPath:t=>aj.findPath({...t,exchange:hj}),pathExists:t=>aj.pathExists({...t,exchange:hj}),getAmounts:t=>aj.getAmounts({...t,exchange:hj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:hj})}));const pj={name:"weth_arbitrum",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["arbitrum"],arbitrum:{router:{address:Vp.arbitrum.wrapped.address,api:aj.WETH}}};var fj=t=>new bx(Object.assign(pj,{scope:t,findPath:t=>aj.findPath({...t,exchange:pj}),pathExists:t=>aj.pathExists({...t,exchange:pj}),getAmounts:t=>aj.getAmounts({...t,exchange:pj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:pj})}));const mj={name:"weth_optimism",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["optimism"],optimism:{router:{address:Vp.optimism.wrapped.address,api:aj.WETH}}};var yj=t=>new bx(Object.assign(mj,{scope:t,findPath:t=>aj.findPath({...t,exchange:mj}),pathExists:t=>aj.pathExists({...t,exchange:mj}),getAmounts:t=>aj.getAmounts({...t,exchange:mj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:mj})}));const gj={name:"weth_base",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["base"],base:{router:{address:Vp.base.wrapped.address,api:aj.WETH}}};var vj=t=>new bx(Object.assign(gj,{scope:t,findPath:t=>aj.findPath({...t,exchange:gj}),pathExists:t=>aj.pathExists({...t,exchange:gj}),getAmounts:t=>aj.getAmounts({...t,exchange:gj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:gj})}));const wj={name:"wftm",label:"Wrapped Fantom",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMTkyIDE5MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTkyIDE5MjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8ZyBpZD0iY2lyY2xlIj4KCTxnIGlkPSJGYW50b20tY2lyY2xlIj4KCQk8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsUnVsZT0iZXZlbm9kZCIgY2xpcFJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMxOTY5RkYiIGNsYXNzPSJzdDAiIGN4PSI5NiIgY3k9Ijk2IiByPSI4MC40Ii8+CgkJPHBhdGggaWQ9IlNoYXBlIiBmaWxsPSIjRkZGRkZGIiBkPSJNOTEuMSw0MS4yYzIuNy0xLjQsNi44LTEuNCw5LjUsMGwyNy42LDE0LjZjMS42LDAuOSwyLjUsMi4xLDIuNywzLjVoMHY3My4zCgkJCWMwLDEuNC0wLjksMi45LTIuNywzLjhsLTI3LjYsMTQuNmMtMi43LDEuNC02LjgsMS40LTkuNSwwbC0yNy42LTE0LjZjLTEuOC0wLjktMi42LTIuNC0yLjctMy44YzAtMC4xLDAtMC4zLDAtMC40bDAtNzIuNAoJCQljMC0wLjEsMC0wLjIsMC0wLjNsMC0wLjJoMGMwLjEtMS4zLDEtMi42LDIuNi0zLjVMOTEuMSw0MS4yeiBNMTI2LjYsOTkuOWwtMjYsMTMuN2MtMi43LDEuNC02LjgsMS40LTkuNSwwTDY1LjIsMTAwdjMyLjMKCQkJbDI1LjksMTMuNmMxLjUsMC44LDMuMSwxLjYsNC43LDEuN2wwLjEsMGMxLjUsMCwzLTAuOCw0LjYtMS41bDI2LjItMTMuOVY5OS45eiBNNTYuNSwxMzAuOWMwLDIuOCwwLjMsNC43LDEsNgoJCQljMC41LDEuMSwxLjMsMS45LDIuOCwyLjlsMC4xLDAuMWMwLjMsMC4yLDAuNywwLjQsMS4xLDAuN2wwLjUsMC4zbDEuNiwwLjlsLTIuMiwzLjdsLTEuNy0xLjFsLTAuMy0wLjJjLTAuNS0wLjMtMC45LTAuNi0xLjMtMC44CgkJCWMtNC4yLTIuOC01LjctNS45LTUuNy0xMi4zbDAtMC4ySDU2LjV6IE05My44LDgwLjVjLTAuMiwwLjEtMC40LDAuMS0wLjYsMC4yTDY1LjYsOTUuM2MwLDAtMC4xLDAtMC4xLDBsMCwwbDAsMGwwLjEsMGwyNy42LDE0LjYKCQkJYzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yVjgwLjV6IE05OC4yLDgwLjV2MjkuOGMwLjItMC4xLDAuNC0wLjEsMC42LTAuMmwyNy42LTE0LjZjMCwwLDAuMSwwLDAuMSwwbDAsMGwwLDBsLTAuMSwwTDk4LjgsODAuNwoJCQlDOTguNiw4MC42LDk4LjQsODAuNSw5OC4yLDgwLjV6IE0xMjYuNiw2NC40bC0yNC44LDEzbDI0LjgsMTNWNjQuNHogTTY1LjIsNjQuNHYyNi4xbDI0LjgtMTNMNjUuMiw2NC40eiBNOTguNyw0NS4xCgkJCWMtMS40LTAuOC00LTAuOC01LjUsMEw2NS42LDU5LjdjMCwwLTAuMSwwLTAuMSwwbDAsMGwwLDBsMC4xLDBsMjcuNiwxNC42YzEuNCwwLjgsNCwwLjgsNS41LDBsMjcuNi0xNC42YzAsMCwwLjEsMCwwLjEsMGwwLDBsMCwwCgkJCWwtMC4xLDBMOTguNyw0NS4xeiBNMTMwLjcsNDYuNWwxLjcsMS4xbDAuMywwLjJjMC41LDAuMywwLjksMC42LDEuMywwLjhjNC4yLDIuOCw1LjcsNS45LDUuNywxMi4zbDAsMC4yaC00LjNjMC0yLjgtMC4zLTQuNy0xLTYKCQkJYy0wLjUtMS4xLTEuMy0xLjktMi44LTIuOWwtMC4xLTAuMWMtMC4zLTAuMi0wLjctMC40LTEuMS0wLjdsLTAuNS0wLjNsLTEuNi0wLjlMMTMwLjcsNDYuNXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["fantom"],fantom:{router:{address:Vp.fantom.wrapped.address,api:aj.WETH}}};var bj=t=>new bx(Object.assign(wj,{scope:t,findPath:t=>aj.findPath({...t,exchange:wj}),pathExists:t=>aj.pathExists({...t,exchange:wj}),getAmounts:t=>aj.getAmounts({...t,exchange:wj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:wj})}));const Mj={name:"wmatic",label:"Wrapped MATIC",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0NS40IDQ1LjQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ1LjQgNDUuNDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiM4MjQ3RTU7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzEuOSwxNi42Yy0wLjctMC40LTEuNi0wLjQtMi4yLDBsLTUuMywzLjFsLTMuNSwybC01LjEsMy4xYy0wLjcsMC40LTEuNiwwLjQtMi4yLDBsLTQtMi40CgljLTAuNi0wLjQtMS4xLTEuMS0xLjEtMnYtNC42YzAtMC45LDAuNS0xLjYsMS4xLTJsNC0yLjNjMC43LTAuNCwxLjUtMC40LDIuMiwwbDQsMi40YzAuNywwLjQsMS4xLDEuMSwxLjEsMnYzLjFsMy41LTIuMXYtMy4yCgljMC0wLjktMC40LTEuNi0xLjEtMmwtNy41LTQuNGMtMC43LTAuNC0xLjUtMC40LTIuMiwwTDYsMTEuN2MtMC43LDAuNC0xLjEsMS4xLTEuMSwxLjh2OC43YzAsMC45LDAuNCwxLjYsMS4xLDJsNy42LDQuNAoJYzAuNywwLjQsMS41LDAuNCwyLjIsMGw1LjEtMi45bDMuNS0yLjFsNS4xLTIuOWMwLjctMC40LDEuNi0wLjQsMi4yLDBsNCwyLjNjMC43LDAuNCwxLjEsMS4xLDEuMSwydjQuNmMwLDAuOS0wLjQsMS42LTEuMSwyCglsLTMuOSwyLjNjLTAuNywwLjQtMS41LDAuNC0yLjIsMGwtNC0yLjNjLTAuNy0wLjQtMS4xLTEuMS0xLjEtMnYtMi45TDIxLDI4Ljd2My4xYzAsMC45LDAuNCwxLjYsMS4xLDJsNy41LDQuNAoJYzAuNywwLjQsMS41LDAuNCwyLjIsMGw3LjUtNC40YzAuNy0wLjQsMS4xLTEuMSwxLjEtMlYyM2MwLTAuOS0wLjQtMS42LTEuMS0yQzM5LjIsMjEsMzEuOSwxNi42LDMxLjksMTYuNnoiLz4KPC9zdmc+Cg==",protocol:"weth",slippage:!1,blockchains:["polygon"],polygon:{router:{address:Vp.polygon.wrapped.address,api:aj.WETH}}};var Aj=t=>new bx(Object.assign(Mj,{scope:t,findPath:t=>aj.findPath({...t,exchange:Mj}),pathExists:t=>aj.pathExists({...t,exchange:Mj}),getAmounts:t=>aj.getAmounts({...t,exchange:Mj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:Mj})}));const Ej={name:"wxdai",label:"Wrapped XDAI",logo:Vp.gnosis.wrapped.logo,protocol:"weth",slippage:!1,blockchains:["gnosis"],gnosis:{router:{address:Vp.gnosis.wrapped.address,api:aj.WETH}}};var Nj=t=>new bx(Object.assign(Ej,{scope:t,findPath:t=>aj.findPath({...t,exchange:Ej}),pathExists:t=>aj.pathExists({...t,exchange:Ej}),getAmounts:t=>aj.getAmounts({...t,exchange:Ej}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:Ej})}));const Tj=[TS(),oj(),zS(),ZS(),kS(),GS(),PS(),RS(),xx(),dj(),yj(),vj(),fj(),lj(),Aj(),bj(),uj(),Nj()];Tj.forEach((t=>{Tj[t.name]=t})),Tj.ethereum=[oj("ethereum"),ZS("ethereum"),dj("ethereum")],Tj.ethereum.forEach((t=>{Tj.ethereum[t.name]=t})),Tj.bsc=[zS("bsc"),oj("bsc"),kS("bsc"),lj("bsc")],Tj.bsc.forEach((t=>{Tj.bsc[t.name]=t})),Tj.polygon=[oj("polygon"),PS("polygon"),Aj("polygon")],Tj.polygon.forEach((t=>{Tj.polygon[t.name]=t})),Tj.solana=[TS("solana")],Tj.solana.forEach((t=>{Tj.solana[t.name]=t})),Tj.optimism=[oj("optimism"),yj("optimism")],Tj.optimism.forEach((t=>{Tj.optimism[t.name]=t})),Tj.base=[oj("base"),vj("base")],Tj.base.forEach((t=>{Tj.base[t.name]=t})),Tj.arbitrum=[oj("arbitrum"),fj("arbitrum")],Tj.arbitrum.forEach((t=>{Tj.arbitrum[t.name]=t})),Tj.fantom=[RS("fantom"),bj("fantom")],Tj.fantom.forEach((t=>{Tj.fantom[t.name]=t})),Tj.avalanche=[GS("avalanche"),uj("avalanche")],Tj.avalanche.forEach((t=>{Tj.avalanche[t.name]=t})),Tj.gnosis=[xx("gnosis"),Nj("gnosis")],Tj.gnosis.forEach((t=>{Tj.gnosis[t.name]=t}));Tj.route=({blockchain:t,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>Promise.all(Tj[t].map((t=>t.route({tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})))).then((t=>t.filter(Boolean).sort(((t,e)=>(r||o?BigInt(t.amountOut)BigInt(e.amountIn))?1:(r||o?BigInt(t.amountOut)>BigInt(e.amountOut):BigInt(t.amountIn)kj||(kj="object"==typeof r?r:window,kj);const xj=()=>(void 0===Lj()._Web3ClientConfiguration&&(Lj()._Web3ClientConfiguration={}),Lj()._Web3ClientConfiguration);function Sj(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}class jj extends ZA{constructor(t,e,n,r){super(t),this._network=e,this._endpoint=t,this._endpoints=n,this._failover=r,this._pendingBatch=[]}detectNetwork(){return Promise.resolve(Vp.findByName(this._network).id)}requestChunk(t,e){try{const n=t.map((t=>t.request));return $M(e,JSON.stringify(n)).then((e=>{t.forEach(((t,n)=>{const r=e[n];if(Sj([r,"optionalAccess",t=>t.error])){const e=new Error(r.error.message);e.code=r.error.code,e.data=r.error.data,t.reject(e)}else Sj([r,"optionalAccess",t=>t.result])?t.resolve(r.result):t.reject()}))})).catch((e=>{if(e&&"SERVER_ERROR"==e.code){const e=this._endpoints.indexOf(this._endpoint)+1;this._failover(),this._endpoint=e>=this._endpoints.length?this._endpoints[0]:this._endpoints[e],this.requestChunk(t,this._endpoint)}else t.forEach((t=>{t.reject(e)}))}))}catch(e){t.forEach((t=>{t.reject()}))}}send(t,e){const n={method:t,params:e,id:this._nextId++,jsonrpc:"2.0"};null==this._pendingBatch&&(this._pendingBatch=[]);const r={request:n,resolve:null,reject:null},i=new Promise(((t,e)=>{r.resolve=t,r.reject=e}));return this._pendingBatch.push(r),this._pendingBatchAggregator||(this._pendingBatchAggregator=setTimeout((()=>{const t=this._pendingBatch;this._pendingBatch=[],this._pendingBatchAggregator=null;const e=[];for(let n=0;n(t.map((t=>t.request)),this.requestChunk(t,this._endpoint))))}),xj().batchInterval||10)),i}}const Cj=()=>(null==Lj()._Web3ClientProviders&&(Lj()._Web3ClientProviders={}),Lj()._Web3ClientProviders),Dj=(t,e)=>{void 0===Cj()[t]&&(Cj()[t]=[]);const n=Cj()[t].indexOf(e);n>-1&&Cj()[t].splice(n,1),Cj()[t].unshift(e)},Oj=async(t,e,n=!0)=>{let r;Cj()[t]=e.map(((r,i)=>new jj(r,t,e,(()=>{1===Cj()[t].length?Oj(t,e,n):Cj()[t].splice(i,1)}))));let i=Lj();if(null==i.fetch||void 0!==k&&k.env&&"test"==k.env.NODE_ENV||void 0!==i.cy||!1===n)r=Cj()[t][0];else{let n=await Promise.all(e.map((t=>new Promise((async e=>{let n=(new Date).getTime();setTimeout((()=>e(900)),900);if(!(await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({method:"net_version",id:1,jsonrpc:"2.0"})})).ok)return e(999);let r=(new Date).getTime();e(r-n)})))));const i=Math.min(...n),o=n.indexOf(i);r=Cj()[t][o]}Dj(t,r)};var zj=async t=>{let e=Cj();if(e&&e[t])return e[t][0];let n=Lj();return n._Web3ClientGetProviderPromise&&n._Web3ClientGetProviderPromise[t]||(n._Web3ClientGetProviderPromise||(n._Web3ClientGetProviderPromise={}),n._Web3ClientGetProviderPromise[t]=new Promise((async e=>{await Oj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t][0])}))),await n._Web3ClientGetProviderPromise[t]},_j=async t=>{let e=Cj();if(e&&e[t])return e[t];let n=Lj();return n._Web3ClientGetProvidersPromise&&n._Web3ClientGetProvidersPromise[t]||(n._Web3ClientGetProvidersPromise||(n._Web3ClientGetProvidersPromise={}),n._Web3ClientGetProvidersPromise[t]=new Promise((async e=>{await Oj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t])}))),await n._Web3ClientGetProvidersPromise[t]};class Pj extends ql{constructor(t,e,n,r){super(t),this._provider=new ql(t),this._network=e,this._endpoint=t,this._endpoints=n,this._failover=r,this._pendingBatch=[],this._rpcRequest=this._rpcRequestReplacement.bind(this)}requestChunk(t){const e=t.map((t=>t.request)),n=e=>{if(e&&["Failed to fetch","limit reached","504","503","502","500","429","426","422","413","409","408","406","405","404","403","402","401","400"].some((t=>e.toString().match(t)))){const e=this._endpoints.indexOf(this._endpoint)+1;this._endpoint=e>=this._endpoints.length?this._endpoints[0]:this._endpoints[e],this._provider=new ql(this._endpoint),this.requestChunk(t)}else t.forEach((t=>{t.reject(e)}))};try{return this._provider._rpcBatchRequest(e).then((e=>{t.forEach(((t,n)=>{const r=e[n];if(function(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}([r,"optionalAccess",t=>t.error])){const e=new Error(r.error.message);e.code=r.error.code,e.data=r.error.data,t.reject(e)}else r?t.resolve(r):t.reject()}))})).catch(n)}catch(t){return n(t)}}_rpcRequestReplacement(t,e){const n={methodName:t,args:e};null==this._pendingBatch&&(this._pendingBatch=[]);const r={request:n,resolve:null,reject:null},i=new Promise(((t,e)=>{r.resolve=t,r.reject=e}));return this._pendingBatch.push(r),this._pendingBatchAggregator||(this._pendingBatchAggregator=setTimeout((()=>{const t=this._pendingBatch;this._pendingBatch=[],this._pendingBatchAggregator=null;const e=[];for(let n=0;n(t.map((t=>t.request)),this.requestChunk(t))))}),xj().batchInterval||10)),i}}const Bj=()=>(null==Lj()._Web3ClientProviders&&(Lj()._Web3ClientProviders={}),Lj()._Web3ClientProviders),Rj=(t,e)=>{void 0===Bj()[t]&&(Bj()[t]=[]);const n=Bj()[t].indexOf(e);n>-1&&Bj()[t].splice(n,1),Bj()[t].unshift(e)},Uj=async(t,e,n=!0)=>{let r;Bj()[t]=e.map(((r,i)=>new Pj(r,t,e,(()=>{1===Bj()[t].length?Uj(t,e,n):Bj()[t].splice(i,1)}))));let i=Lj();if(null==i.fetch||void 0!==k&&k.env&&"test"==k.env.NODE_ENV||void 0!==i.cy||!1===n)r=Bj()[t][0];else{let n=await Promise.all(e.map((t=>new Promise((async e=>{let n=(new Date).getTime();setTimeout((()=>e(900)),900);if(!(await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({method:"getIdentity",id:1,jsonrpc:"2.0"})})).ok)return e(999);let r=(new Date).getTime();e(r-n)})))));const i=Math.min(...n),o=n.indexOf(i);r=Bj()[t][o]}Rj(t,r)};var Wj=async t=>{let e=Bj();if(e&&e[t])return e[t][0];let n=Lj();return n._Web3ClientGetProviderPromise&&n._Web3ClientGetProviderPromise[t]||(n._Web3ClientGetProviderPromise||(n._Web3ClientGetProviderPromise={}),n._Web3ClientGetProviderPromise[t]=new Promise((async e=>{await Uj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t][0])}))),await n._Web3ClientGetProviderPromise[t]},Qj=async t=>{let e=Bj();if(e&&e[t])return e[t];let n=Lj();return n._Web3ClientGetProvidersPromise&&n._Web3ClientGetProvidersPromise[t]||(n._Web3ClientGetProvidersPromise||(n._Web3ClientGetProvidersPromise={}),n._Web3ClientGetProvidersPromise[t]=new Promise((async e=>{await Uj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t])}))),await n._Web3ClientGetProvidersPromise[t]};let Yj=["ethereum","bsc","polygon","solana","fantom","arbitrum","avalanche","gnosis","optimism","base"];Yj.evm=["ethereum","bsc","polygon","fantom","arbitrum","avalanche","gnosis","optimism","base"],Yj.solana=["solana"];let Fj=()=>(null==Lj()._Web3ClientCacheStore&&(Lj()._Web3ClientCacheStore={}),Lj()._Web3ClientCacheStore),Vj=()=>(null==Lj()._Web3ClientPromiseStore&&(Lj()._Web3ClientPromiseStore={}),Lj()._Web3ClientPromiseStore),Hj=function({key:t}){Vj()[t]=void 0},Gj=function({call:t,key:e,expires:n=0}){return new Promise(((r,i)=>{let o,a=function({key:t}){return Vj()[t]}({key:e=JSON.stringify(e)});if(a)return a.then(r).catch(i);(function({key:t,promise:e}){return Vj()[t]=e,e})({key:e,promise:new Promise(((a,s)=>0===n?t().then((t=>{r(t),a(t)})).catch((t=>{i(t),s(t)})):(o=function({key:t,expires:e}){let n=Fj()[t];if(function(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}([n,"optionalAccess",t=>t.expiresAt])>Date.now())return n.value}({key:e,expires:n}),o?(r(o),a(o),o):void t().then((t=>{t&&function({key:t,value:e,expires:n}){Fj()[t]={expiresAt:Date.now()+n,value:e}}({key:e,value:t,expires:n}),r(t),a(t)})).catch((t=>{i(t),s(t)})))))}).then((()=>{Hj({key:e})})).catch((()=>{Hj({key:e})}))}))};const qj=async t=>{if(Yj.evm.includes(t))return await zj(t);if(Yj.solana.includes(t))return await Wj(t);throw"Unknown blockchain: "+t};const Zj=({address:t,api:e,method:n,params:r,provider:i,block:o})=>{const a=new _M(t,e,i),s=(({contract:t,method:e,params:n})=>t.interface.fragments.find((t=>t.name==e)).inputs.map(((t,e)=>Array.isArray(n)?n[e]:n[t.name])))({contract:a,method:n,params:r}),u=a.interface.fragments.find((t=>t.name===n));return void 0===a[n]&&(n=`${n}(${u.inputs.map((t=>t.type)).join(",")})`),u&&"nonpayable"===u.stateMutability?a.callStatic[n](...s,{blockTag:o}):a[n](...s,{blockTag:o})},Jj=({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a})=>n?Zj({address:e,api:n,method:r,params:i,provider:a,block:o}):"latestBlockNumber"===r?a.getBlockNumber():"balance"===r?(({address:t,provider:e})=>e.getBalance(t))({address:e,provider:a}):"transactionCount"===r?(({address:t,provider:e})=>e.getTransactionCount(t))({address:e,provider:a}):void 0;const Xj=async({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a,providers:s})=>{try{if(null==r||"getAccountInfo"===r)return null==n&&(n=ip),await(async({address:t,api:e,method:n,params:r,provider:i,block:o})=>{const a=await i.getAccountInfo(new Xs(t));if(a&&a.data)return e.decode(a.data)})({address:e,api:n,method:r,params:i,provider:a,block:o});if("getProgramAccounts"===r)return await a.getProgramAccounts(new Xs(e),i).then((t=>n?t.map((t=>(t.data=n.decode(t.account.data),t))):t));if("getTokenAccountBalance"===r)return await a.getTokenAccountBalance(new Xs(e));if("latestBlockNumber"===r)return await a.getSlot(i||void 0);if("balance"===r)return await(({address:t,provider:e})=>e.getBalance(new Xs(t)))({address:e,provider:a})}catch(u){if(s&&u&&["Failed to fetch","limit reached","504","503","502","500","429","426","422","413","409","408","406","405","404","403","402","401","400"].some((t=>u.toString().match(t)))){let u=s[s.indexOf(a)+1]||s[0];return Xj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:u,providers:s})}throw u}};const Kj=async function(t,e){const{blockchain:n,address:r,method:i}=(t=>{if("object"==typeof t)return t;let e=t.match(/(?\w+):\/\/(?[\w\d]+)(\/(?[\w\d]+)*)?/);return null==e.groups.part2?e.groups.part1.match(/\d/)?{blockchain:e.groups.blockchain,address:e.groups.part1}:{blockchain:e.groups.blockchain,method:e.groups.part1}:{blockchain:e.groups.blockchain,address:e.groups.part1,method:e.groups.part2}})(t),{api:o,params:a,cache:s,block:u,timeout:c,strategy:l,cacheKey:h}=("object"==typeof t?t:e)||{};return await Gj({expires:s||0,key:h||[n,r,i,a,u],call:async()=>{if(Yj.evm.includes(n))return await(async({blockchain:t,address:e,api:n,method:r,params:i,block:o,timeout:a,strategy:s})=>{if(s=s||xj().strategy||"failover",a=a||xj().timeout||void 0,"fastest"===s){const s=await _j(t);let u=[];const c=s.map((a=>new Promise((s=>{u.push(Jj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a}).then(s))})))),l=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a||1e4)));return u=Promise.all(u.map((t=>new Promise((e=>{t.catch(e)}))))).then((()=>{})),Promise.race([...c,l,u])}{const s=await zj(t),u=Jj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:s});return a?(a=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a))),Promise.race([u,a])):u}})({blockchain:n,address:r,api:o,method:i,params:a,block:u,strategy:l,timeout:c});if(Yj.solana.includes(n))return await(async({blockchain:t,address:e,api:n,method:r,params:i,block:o,timeout:a,strategy:s})=>{s=s||xj().strategy||"failover",a=a||xj().timeout||void 0;const u=await Qj(t);if("fastest"===s){let s=[];const c=u.map((a=>new Promise((u=>{s.push(Xj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a}).then(u))})))),l=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a||1e4)));return s=Promise.all(s.map((t=>new Promise((e=>{t.catch(e)}))))).then((()=>{})),Promise.race([...c,l,s])}{const s=await Wj(t),c=Xj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:s,providers:u});return a?(a=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a))),Promise.race([c,a])):c}})({blockchain:n,address:r,api:o,method:i,params:a,block:u,strategy:l,timeout:c});throw"Unknown blockchain: "+n}})},$j=async({wSolSenderAccountKeypair:t,paymentRoute:e})=>{if(!t)return;const n=e.fromToken.address===Vp.solana.currency.address?new rp(e.fromAmount):new rp("0"),r=await qj("solana"),i=new rp(await r.getMinimumBalanceForRentExemption(Tk.solana.TOKEN_LAYOUT.span)),o=e.fromAddress,a=n.add(i);return[Yu.createAccount({fromPubkey:new Xs(o),newAccountPubkey:t.publicKey,programId:new Xs(Tk.solana.TOKEN_PROGRAM),space:Tk.solana.TOKEN_LAYOUT.span,lamports:a}),Tk.solana.initializeAccountInstruction({account:t.publicKey.toString(),token:Vp.solana.wrapped.address,owner:o})]},tC=async({wSolEscrowAccountKeypair:t,paymentRoute:e})=>{if(!t)return;const n=await qj("solana"),r=new rp(await n.getMinimumBalanceForRentExemption(Tk.solana.TOKEN_LAYOUT.span)),i=await pC();return[Yu.createAccount({fromPubkey:new Xs(e.fromAddress),newAccountPubkey:t.publicKey,programId:new Xs(Tk.solana.TOKEN_PROGRAM),space:Tk.solana.TOKEN_LAYOUT.span,lamports:r}),Tk.solana.initializeAccountInstruction({account:t.publicKey.toString(),token:Vp.solana.wrapped.address,owner:i.toString()})]},eC=({paymentRoute:t})=>{let e=[...t.exchangeRoutes[0].path];return e.indexOf(Vp.solana.currency.address)>-1&&e.splice(e.indexOf(Vp.solana.currency.address),1),e.indexOf(t.fromToken.address)>-1&&e.splice(e.indexOf(t.fromToken.address),1),e.indexOf(t.toToken.address)>-1&&e.splice(e.indexOf(t.toToken.address),1),2===e.length&&e[0]===Vp.solana.wrapped.address?e[1]:e[0]},nC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:eC({paymentRoute:t}),owner:t.fromAddress}),rC=async({paymentRoute:t})=>{if(0===t.exchangeRoutes.length||gC(t.exchangeRoutes[0].path).length<=2)return;return await(async({paymentRoute:t})=>await Kj({blockchain:"solana",address:await nC({paymentRoute:t}),api:Tk.solana.TOKEN_LAYOUT,cache:1e3}))({paymentRoute:t})?void 0:Tk.solana.createAssociatedTokenAccountInstruction({token:eC({paymentRoute:t}),owner:t.fromAddress,payer:t.fromAddress})},iC=async({wSolSenderAccountKeypair:t,paymentRoute:e})=>{if(t)return Tk.solana.closeAccountInstruction({account:t.publicKey.toString(),owner:e.fromAddress})},oC=async({from:t})=>{let e=[np.from("payments"),new Xs(t).toBuffer()],[n]=await Xs.findProgramAddress(e,new Xs(Ij.solana.address));return n},aC=async({from:t})=>{let e=(await oC({from:t})).toString();return await Kj({blockchain:"solana",address:e,api:pp([gp("anchorDiscriminator"),gp("nonce")]),cache:1e3})},sC=async({from:t})=>{if(await aC({from:t}))return;const e=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(t),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t}),isSigner:!1,isWritable:!0}],n=np.alloc(Ij.solana.api.createPaymentsAccount.layout.span);return Ij.solana.api.createPaymentsAccount.layout.encode({anchorDiscriminator:Ij.solana.api.createPaymentsAccount.anchorDiscriminator},n),new gu({keys:e,programId:new Xs(Ij.solana.address),data:n})},uC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:t.fromToken.address,owner:t.fromAddress}),cC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:t.toToken.address,owner:t.toAddress}),lC=async({paymentRoute:t})=>{if(t.toToken.address===Vp.solana.currency.address){const e=await Kj({blockchain:"solana",method:"balance",address:t.toAddress}),n=await qj("solana"),r=new rp(await n.getMinimumBalanceForRentExemption(0)),i=new rp(t.toAmount);if(new rp(e).add(i).gt(r))return;return Yu.transfer({fromPubkey:new Xs(t.fromAddress),toPubkey:new Xs(t.toAddress),lamports:r.sub(i)})}{const e=t.toToken.address;if(await(async({paymentRoute:t})=>await Tk.solana.findAccount({token:t.toToken.address,owner:t.toAddress}))({paymentRoute:t}))return;return Tk.solana.createAssociatedTokenAccountInstruction({token:e,owner:t.toAddress,payer:t.fromAddress})}},hC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:t.toToken.address,owner:t.fee.receiver}),dC=async({paymentRoute:t})=>{if(t.fee){if(t.toToken.address===Vp.solana.currency.address){const e=await Kj({blockchain:"solana",method:"balance",address:t.fee.receiver}),n=await qj("solana"),r=new rp(await n.getMinimumBalanceForRentExemption(0)),i=new rp(t.feeAmount);if(new rp(e).add(i).gt(r))return;return Yu.transfer({fromPubkey:new Xs(t.fromAddress),toPubkey:new Xs(t.fee.receiver),lamports:r.sub(i)})}{const e=t.toToken.address;if(await(async({paymentRoute:t})=>await Tk.solana.findAccount({token:t.toToken.address,owner:t.fee.receiver}))({paymentRoute:t}))return;return Tk.solana.createAssociatedTokenAccountInstruction({token:e,owner:t.fee.receiver,payer:t.fromAddress})}}},pC=async()=>{let t=[np.from("escrow_sol")],[e,n]=await Xs.findProgramAddress(t,new Xs(Ij.solana.address));return e},fC=async({paymentRoute:t})=>{let e=[np.from("escrow"),new Xs(t.toToken.address===Vp.solana.currency.address?Vp.solana.wrapped.address:t.toToken.address).toBuffer()],[n,r]=await Xs.findProgramAddress(e,new Xs(Ij.solana.address));return n},mC=async({paymentRoute:t})=>{if(0===t.exchangeRoutes.length||t.toToken.address===Vp.solana.currency.address)return;if(await(async({paymentRoute:t})=>await Kj({blockchain:"solana",address:(await fC({paymentRoute:t})).toString(),api:Tk.solana.TOKEN_LAYOUT,cache:1e3}))({paymentRoute:t}))return;const e=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:new Xs(t.toToken.address===Vp.solana.currency.address?Vp.solana.wrapped.address:t.toToken.address),isSigner:!1,isWritable:!0},{pubkey:await fC({paymentRoute:t}),isSigner:!1,isWritable:!0}],n=np.alloc(Ij.solana.api.createEscrowTokenAccount.layout.span);return Ij.solana.api.createEscrowTokenAccount.layout.encode({anchorDiscriminator:Ij.solana.api.createEscrowTokenAccount.anchorDiscriminator},n),new gu({keys:e,programId:new Xs(Ij.solana.address),data:n})},yC=async({paymentRoute:t})=>{if(0===t.exchangeRoutes.length||t.toToken.address!=Vp.solana.currency.address)return;if(await(async({paymentRoute:t})=>await Kj({blockchain:"solana",address:(await pC()).toString(),api:pp([gp("amount"),lp("owner")]),cache:1e3}))({paymentRoute:t}))return;const e=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await pC(),isSigner:!1,isWritable:!0}],n=np.alloc(Ij.solana.api.createEscrowSolAccount.layout.span);return Ij.solana.api.createEscrowSolAccount.layout.encode({anchorDiscriminator:Ij.solana.api.createEscrowSolAccount.anchorDiscriminator},n),new gu({keys:e,programId:new Xs(Ij.solana.address),data:n})},gC=t=>t.filter((t=>t!==Vp.solana.currency.address)),vC=async({paymentRoute:t,wSolSenderAccountKeypair:e,wSolEscrowAccountKeypair:n,nonce:r,deadline:i})=>{switch((({paymentRoute:t})=>{if(t.fromToken.address===Vp.solana.currency.address&&t.toToken.address===Vp.solana.currency.address)return"routeSol";if(t.fromToken.address!==Vp.solana.currency.address&&t.toToken.address!==Vp.solana.currency.address&&0===t.exchangeRoutes.length)return"routeToken";if(t.exchangeRoutes.length>0&&2===gC(t.exchangeRoutes[0].path).length)return t.toToken.address===Vp.solana.currency.address?"routeOrcaSwapSolOut":"routeOrcaSwap";if(t.exchangeRoutes.length>0&&gC(t.exchangeRoutes[0].path).length>2)return t.toToken.address===Vp.solana.currency.address?"routeOrcaTwoHopSwapSolOut":"routeOrcaTwoHopSwap";throw"Payment method does not exist!"})({paymentRoute:t})){case"routeSol":return await(async({paymentRoute:t,nonce:e,deadline:n})=>{const r=new Xs(t.toAddress),i=t.fee?new Xs(t.fee.receiver):r,o=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0}],a=np.alloc(Ij.solana.api.routeSol.layout.span);return Ij.solana.api.routeSol.layout.encode({anchorDiscriminator:Ij.solana.api.routeSol.anchorDiscriminator,nonce:e,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(n)},a),new gu({keys:o,programId:new Xs(Ij.solana.address),data:a})})({paymentRoute:t,nonce:r,deadline:i});case"routeToken":return await(async({paymentRoute:t,nonce:e,deadline:n})=>{const r=await uC({paymentRoute:t}),i=await cC({paymentRoute:t}),o=t.fee?await hC({paymentRoute:t}):i,a=[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:new Xs(r),isSigner:!1,isWritable:!0},{pubkey:new Xs(i),isSigner:!1,isWritable:!0},{pubkey:new Xs(o),isSigner:!1,isWritable:!0}],s=np.alloc(Ij.solana.api.routeToken.layout.span);return Ij.solana.api.routeToken.layout.encode({anchorDiscriminator:Ij.solana.api.routeToken.anchorDiscriminator,nonce:e,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(n)},s),new gu({keys:a,programId:new Xs(Ij.solana.address),data:s})})({paymentRoute:t,nonce:r,deadline:i});case"routeOrcaSwap":return await(async({paymentRoute:t,nonce:e,wSolSenderAccountKeypair:n,deadline:r})=>{const i=n?n.publicKey:await uC({paymentRoute:t}),o=await cC({paymentRoute:t}),a=t.fee?await hC({paymentRoute:t}):o,s=await fC({paymentRoute:t}),u=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),c=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),fp("sqrtPriceLimit"),op("amountSpecifiedIsInput"),op("aToB")]).decode(u.data),l=[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:new Xs(i),isSigner:!1,isWritable:!0},u.keys[2],u.keys[4],u.keys[6],u.keys[7],u.keys[8],u.keys[9],u.keys[10],{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:new Xs(o),isSigner:!1,isWritable:!0},{pubkey:new Xs(a),isSigner:!1,isWritable:!0}],h=np.alloc(Ij.solana.api.routeOrcaSwap.layout.span);return Ij.solana.api.routeOrcaSwap.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaSwap.anchorDiscriminator,nonce:e,amountIn:c.amount,sqrtPriceLimit:c.sqrtPriceLimit,amountSpecifiedIsInput:c.amountSpecifiedIsInput,aToB:c.aToB,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},h),new gu({keys:l,programId:new Xs(Ij.solana.address),data:h})})({paymentRoute:t,nonce:r,wSolSenderAccountKeypair:e,deadline:i});case"routeOrcaSwapSolOut":return await(async({paymentRoute:t,nonce:e,wSolEscrowAccountKeypair:n,deadline:r})=>{const i=await uC({paymentRoute:t}),o=n.publicKey,a=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),s=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),fp("sqrtPriceLimit"),op("amountSpecifiedIsInput"),op("aToB")]).decode(a.data),u=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:new Xs(i),isSigner:!1,isWritable:!0},a.keys[2],a.keys[4],a.keys[6],a.keys[7],a.keys[8],a.keys[9],a.keys[10],{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:await pC(),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.toAddress),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.fee?t.fee.receiver:t.toAddress),isSigner:!1,isWritable:!0}],c=np.alloc(Ij.solana.api.routeOrcaSwapSolOut.layout.span);return Ij.solana.api.routeOrcaSwapSolOut.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaSwapSolOut.anchorDiscriminator,nonce:e,amountIn:s.amount,sqrtPriceLimit:s.sqrtPriceLimit,amountSpecifiedIsInput:s.amountSpecifiedIsInput,aToB:s.aToB,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},c),new gu({keys:u,programId:new Xs(Ij.solana.address),data:c})})({paymentRoute:t,nonce:r,wSolEscrowAccountKeypair:n,deadline:i});case"routeOrcaTwoHopSwap":return await(async({paymentRoute:t,nonce:e,wSolSenderAccountKeypair:n,deadline:r})=>{const i=new Xs(await cC({paymentRoute:t})),o=t.fee?new Xs(await hC({paymentRoute:t})):i,a=await fC({paymentRoute:t}),s=new Xs(await nC({paymentRoute:t})),u=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),c=n?n.publicKey:new Xs(await uC({paymentRoute:t})),l=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),op("amountSpecifiedIsInput"),op("aToBOne"),op("aToBTwo"),fp("sqrtPriceLimitOne"),fp("sqrtPriceLimitTwo")]).decode(u.data),h=[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},u.keys[2],u.keys[3],{pubkey:c,isSigner:!1,isWritable:!0},u.keys[5],u.keys[7],{pubkey:s,isSigner:!1,isWritable:!0},u.keys[9],u.keys[11],u.keys[12],u.keys[13],u.keys[14],u.keys[15],u.keys[16],u.keys[17],u.keys[18],u.keys[19],{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],d=np.alloc(Ij.solana.api.routeOrcaTwoHopSwap.layout.span);return Ij.solana.api.routeOrcaTwoHopSwap.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaTwoHopSwap.anchorDiscriminator,nonce:e,amountIn:l.amount,amountSpecifiedIsInput:l.amountSpecifiedIsInput,aToBOne:l.aToBOne,aToBTwo:l.aToBTwo,sqrtPriceLimitOne:l.sqrtPriceLimitOne,sqrtPriceLimitTwo:l.sqrtPriceLimitTwo,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},d),new gu({keys:h,programId:new Xs(Ij.solana.address),data:d})})({paymentRoute:t,nonce:r,wSolSenderAccountKeypair:e,deadline:i});case"routeOrcaTwoHopSwapSolOut":return await(async({paymentRoute:t,nonce:e,wSolEscrowAccountKeypair:n,deadline:r})=>{const i=new Xs(await nC({paymentRoute:t})),o=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),a=new Xs(await uC({paymentRoute:t})),s=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),op("amountSpecifiedIsInput"),op("aToBOne"),op("aToBTwo"),fp("sqrtPriceLimitOne"),fp("sqrtPriceLimitTwo")]).decode(o.data),u=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},o.keys[2],o.keys[3],o.keys[5],o.keys[7],{pubkey:i,isSigner:!1,isWritable:!0},o.keys[9],o.keys[11],o.keys[12],o.keys[13],o.keys[14],o.keys[15],o.keys[16],o.keys[17],o.keys[18],o.keys[19],{pubkey:n.publicKey,isSigner:!1,isWritable:!0},{pubkey:await pC(),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.toAddress),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.fee?t.fee.receiver:t.toAddress),isSigner:!1,isWritable:!0}],c=np.alloc(Ij.solana.api.routeOrcaTwoHopSwapSolOut.layout.span);return Ij.solana.api.routeOrcaTwoHopSwapSolOut.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaTwoHopSwapSolOut.anchorDiscriminator,nonce:e,amountIn:s.amount,amountSpecifiedIsInput:s.amountSpecifiedIsInput,aToBOne:s.aToBOne,aToBTwo:s.aToBTwo,sqrtPriceLimitOne:s.sqrtPriceLimitOne,sqrtPriceLimitTwo:s.sqrtPriceLimitTwo,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},c),new gu({keys:u,programId:new Xs(Ij.solana.address),data:c})})({paymentRoute:t,nonce:r,wSolEscrowAccountKeypair:n,deadline:i})}},wC=async({paymentRoute:t})=>{const e=await aC({from:t.fromAddress}),n=Math.ceil((new Date).getTime()/1e3)+1800,r=(t=>t?t.nonce:new rp("0"))(e),i=await(async({paymentRoute:t})=>{if(t.fromToken.address===Vp.solana.currency.address&&t.toToken.address!==Vp.solana.currency.address)return Zl.generate()})({paymentRoute:t}),o=await(async({paymentRoute:t})=>{if(t.fromToken.address!==Vp.solana.currency.address&&t.toToken.address===Vp.solana.currency.address)return Zl.generate()})({paymentRoute:t});let a=(await Promise.all([sC({from:t.fromAddress}),$j({paymentRoute:t,wSolSenderAccountKeypair:i}),rC({paymentRoute:t}),lC({paymentRoute:t}),dC({paymentRoute:t}),yC({paymentRoute:t}),tC({paymentRoute:t,wSolEscrowAccountKeypair:o}),mC({paymentRoute:t}),vC({paymentRoute:t,wSolSenderAccountKeypair:i,wSolEscrowAccountKeypair:o,nonce:r,deadline:n}),iC({paymentRoute:t,wSolSenderAccountKeypair:i})])).filter(Boolean).flat();const s={blockchain:t.blockchain,instructions:a,signers:[i,o].filter(Boolean),alts:[Ij.solana.alt]};return s.deadline=n,s.nonce=r.toString(),s},bC=[{inputs:[{internalType:"address",name:"_PERMIT2",type:"address"},{internalType:"address",name:"_FORWARDER",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"ExchangeCallFailed",type:"error"},{inputs:[],name:"ExchangeCallMissing",type:"error"},{inputs:[],name:"ExchangeNotApproved",type:"error"},{inputs:[],name:"ForwardingPaymentFailed",type:"error"},{inputs:[],name:"InsufficientBalanceInAfterPayment",type:"error"},{inputs:[],name:"InsufficientBalanceOutAfterPayment",type:"error"},{inputs:[],name:"NativeFeePaymentFailed",type:"error"},{inputs:[],name:"NativePaymentFailed",type:"error"},{inputs:[],name:"PaymentDeadlineReached",type:"error"},{inputs:[],name:"PaymentToZeroAddressNotAllowed",type:"error"},{inputs:[],name:"WrongAmountPaidIn",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"exchange",type:"address"}],name:"Disabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"exchange",type:"address"}],name:"Enabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"InternalTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{inputs:[],name:"FORWARDER",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"PERMIT2",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"acceptOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"exchange",type:"address"},{internalType:"bool",name:"enabled",type:"bool"}],name:"enable",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"exchanges",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"bool",name:"permit2",type:"bool"},{internalType:"uint256",name:"paymentAmount",type:"uint256"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"address",name:"tokenInAddress",type:"address"},{internalType:"address",name:"exchangeAddress",type:"address"},{internalType:"address",name:"tokenOutAddress",type:"address"},{internalType:"address",name:"paymentReceiverAddress",type:"address"},{internalType:"address",name:"feeReceiverAddress",type:"address"},{internalType:"uint8",name:"exchangeType",type:"uint8"},{internalType:"uint8",name:"receiverType",type:"uint8"},{internalType:"bytes",name:"exchangeCallData",type:"bytes"},{internalType:"bytes",name:"receiverCallData",type:"bytes"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct IDePayRouterV2.Payment",name:"payment",type:"tuple"}],name:"pay",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"bool",name:"permit2",type:"bool"},{internalType:"uint256",name:"paymentAmount",type:"uint256"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"address",name:"tokenInAddress",type:"address"},{internalType:"address",name:"exchangeAddress",type:"address"},{internalType:"address",name:"tokenOutAddress",type:"address"},{internalType:"address",name:"paymentReceiverAddress",type:"address"},{internalType:"address",name:"feeReceiverAddress",type:"address"},{internalType:"uint8",name:"exchangeType",type:"uint8"},{internalType:"uint8",name:"receiverType",type:"uint8"},{internalType:"bytes",name:"exchangeCallData",type:"bytes"},{internalType:"bytes",name:"receiverCallData",type:"bytes"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct IDePayRouterV2.Payment",name:"payment",type:"tuple"},{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],internalType:"struct IPermit2.PermitDetails",name:"details",type:"tuple"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"sigDeadline",type:"uint256"}],internalType:"struct IPermit2.PermitSingle",name:"permitSingle",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"pay",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"payable",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdraw",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var MC={ethereum:{address:"0x6466F27B169C908Ba8174d80aEfa7173CbC3D0c7",api:bC},bsc:{address:"0x7ea09401db4692a8AEF4111b75bD32AE758f552A",api:bC},polygon:{address:"0x50CFAB577623B1359602E11514a9482B061A941e",api:bC},fantom:{address:"0xFee05C41195985909DDfc9127Db1f94559c46db3",api:bC},avalanche:{address:"0xFee05C41195985909DDfc9127Db1f94559c46db3",api:bC},gnosis:{address:"0xFee05C41195985909DDfc9127Db1f94559c46db3",api:bC},arbitrum:{address:"0xA1cfbeeF344A52e18f748fd6a126f9426A40fbc7",api:bC},optimism:{address:"0x8698E529E9867eEbcC68b4792daC627cd8870736",api:bC},base:{address:"0x8B127D169D232D5F3ebE1C3D06CE343FD7C1AA11",api:bC}},AC={...MC,...Ij},EC="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:{},NC="object"==typeof EC&&EC&&EC.Object===Object&&EC,TC="object"==typeof self&&self&&self.Object===Object&&self,IC=(NC||TC||Function("return this")()).Symbol;IC&&IC.toStringTag,IC&&IC.toStringTag;const kC=t=>{switch(t){case"solana":return 125e-6;case"gnosis":return.009;case"polygon":return.01;case"fantom":return.05;case"avalanche":return.1;case"bsc":return.2;case"base":return.25;case"arbitrum":return.3;case"optimism":return.4;case"ethereum":return 10;default:return 100}},LC={arbitrum:{[Vp.arbitrum.wrapped.address]:"0x7E655088214d0657251A51aDccE9109CFd23B5B5"},avalanche:{[Vp.avalanche.wrapped.address]:"0x2d0a6275eaDa0d03226919ce6D93661E589B2d59"},base:{[Vp.base.wrapped.address]:"0xD1711710843B125a6a01FfDF9b95fDc3064BeF7A"},bsc:{[Vp.bsc.wrapped.address]:"0xeEb80d14abfB058AA78DE38813fe705c3e3b243E"},ethereum:{[Vp.ethereum.wrapped.address]:"0x298f4980525594b3b982779cf74ba76819708D43"},fantom:{[Vp.fantom.wrapped.address]:"0x2d0a6275eaDa0d03226919ce6D93661E589B2d59"},gnosis:{[Vp.gnosis.wrapped.address]:"0x2d0a6275eaDa0d03226919ce6D93661E589B2d59"},optimism:{[Vp.optimism.wrapped.address]:"0x69594057e2C0224deb1180c7a5Df9ec9d5B611B5"},polygon:{[Vp.polygon.wrapped.address]:"0xaE59C9d3E055BdFAa583E169aA5Ebe395689476a"},solana:{}},xC=({paymentRoute:t})=>t.directTransfer&&!t.fee?t.toToken.address==Vp[t.blockchain].currency.address?t.toAddress:t.toToken.address:MC[t.blockchain].address,SC=({paymentRoute:t})=>t.directTransfer&&!t.fee?t.toToken.address==Vp[t.blockchain].currency.address?void 0:Tk[t.blockchain].DEFAULT:MC[t.blockchain].api,jC=({paymentRoute:t})=>t.directTransfer&&!t.fee?t.toToken.address==Vp[t.blockchain].currency.address?void 0:"transfer":"pay",CC=async({paymentRoute:t})=>{if(t.directTransfer&&!t.fee)return t.toToken.address==Vp[t.blockchain].currency.address?void 0:[t.toAddress,t.toAmount];{const e=Math.ceil(new Date/1e3)+86400,n=t.exchangeRoutes[0],r=(({exchangeRoute:t,blockchain:e})=>void 0===t?0:"uniswap_v3"===t.exchange.name||t.exchange[e].router.address===Vp[e].wrapped.address?2:1)({exchangeRoute:n,blockchain:t.blockchain}),i=n?await n.getTransaction({account:MC[t.blockchain].address,inputTokenPushed:2===r}):void 0,o=i?(({exchangeTransaction:t})=>{const e=new _M(t.to,t.api),n=t.method,r=t.params;let i,o,a;return o=e.interface.fragments.find((t=>!(t.name!=n||t.inputs&&r&&"object"==typeof r&&t.inputs.length!=Object.keys(r).length))),1===o.inputs.length&&"tuple"===o.inputs[0].type?(i=n,a=[r[o.inputs[0].name]]):(i=`${n}(${o.inputs.map((t=>t.type)).join(",")})`,a=o.inputs.map((t=>{if("tuple"===t.type){let e={};return t.components.forEach(((n,i)=>{e[n.name]=r[t.name][i]})),i=n,e}return r[t.name]}))),e.interface.encodeFunctionData(i,a)})({exchangeTransaction:i}):Vp[t.blockchain].zero;let a=Vp[t.blockchain].zero;return n&&(a="bsc"===t.blockchain&&"pancakeswap_v3"===n.exchange.name&&t.toToken.address===Vp[t.blockchain].currency.address?n.exchange[t.blockchain].smartRouter.address:LC[i.blockchain][n.exchange[t.blockchain].router.address]||n.exchange[t.blockchain].router.address),{payment:{amountIn:t.fromAmount,paymentAmount:t.toAmount,feeAmount:t.feeAmount||0,tokenInAddress:t.fromToken.address,exchangeAddress:a,tokenOutAddress:t.toToken.address,paymentReceiverAddress:t.toAddress,feeReceiverAddress:t.fee?t.fee.receiver:Vp[t.blockchain].zero,exchangeType:r,receiverType:0,exchangeCallData:o,receiverCallData:Vp[t.blockchain].zero,deadline:e}}}},DC=({paymentRoute:t})=>t.fromToken.address==Vp[t.blockchain].currency.address?t.directTransfer?t.toAmount.toString():t.fromAmount.toString():Ff.from("0").toString();let OC=["ethereum","bsc","polygon","solana","fantom","arbitrum","avalanche","gnosis","optimism","base"];OC.evm=["ethereum","bsc","polygon","fantom","arbitrum","avalanche","gnosis","optimism","base"],OC.solana=["solana"];const zC=({paymentRoute:t,fee:e})=>{if(OC.evm.includes(t.blockchain))return(async({paymentRoute:t})=>({blockchain:t.blockchain,to:xC({paymentRoute:t}),api:SC({paymentRoute:t}),method:jC({paymentRoute:t}),params:await CC({paymentRoute:t}),value:DC({paymentRoute:t})}))({paymentRoute:t,fee:e});if(OC.solana.includes(t.blockchain))return wC({paymentRoute:t,fee:e});throw"Blockchain not supported!"};function _C(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}class PC{constructor({blockchain:t,fromAddress:e,fromToken:n,fromAmount:r,fromDecimals:i,fromBalance:o,toToken:a,toAmount:s,toDecimals:u,toAddress:c,fee:l,feeAmount:h,exchangeRoutes:d,approvalRequired:p,approvalTransaction:f,directTransfer:m}){this.blockchain=t,this.fromAddress=e,this.fromToken=n,this.fromAmount=_C([r||s,"optionalAccess",t=>t.toString,"call",t=>t()]),this.fromDecimals=i,this.fromBalance=o,this.toToken=a,this.toAmount=_C([s,"optionalAccess",t=>t.toString,"call",t=>t()]),this.toDecimals=u,this.toAddress=c,this.fee=l,this.feeAmount=h,this.exchangeRoutes=d||[],this.approvalRequired=p,this.approvalTransaction=f,this.directTransfer=m,this.getTransaction=async()=>await zC({paymentRoute:this})}}function BC({assets:t,blacklist:e,accept:n,from:r}){return Promise.resolve(UC({assets:t,blacklist:e})).then((t=>function({assets:t,accept:e,from:n}){return Promise.all(t.map((async t=>{let r=e.filter((e=>e.blockchain==t.blockchain)),i=new Tk(t);return Promise.all(r.map((async e=>{if(e.token&&e.amount){let r=e.blockchain,o=t.decimals,a=new Tk({blockchain:r,address:e.token}),s=await a.decimals(),u=(await a.BigNumber(e.amount)).toString();return new PC({blockchain:r,fromToken:i,fromDecimals:o,toToken:a,toAmount:u,toDecimals:s,fromBalance:t.balance,fromAddress:n[e.blockchain],toAddress:e.toAddress,fee:e.fee})}if(e.fromToken&&e.fromAmount&&i.address.toLowerCase()==e.fromToken.toLowerCase()){let r=e.blockchain,o=(await i.BigNumber(e.fromAmount)).toString(),a=t.decimals,s=new Tk({blockchain:r,address:e.toToken}),u=await s.decimals();return new PC({blockchain:r,fromToken:i,fromDecimals:a,fromAmount:o,toToken:s,toDecimals:u,fromBalance:t.balance,fromAddress:n[e.blockchain],toAddress:e.toAddress,fee:e.fee})}})))}))).then((t=>t.flat().filter((t=>t))))}({assets:t,accept:n,from:r}))).then((t=>VC({routes:t}))).then(WC).then(QC).then(YC).then((t=>ZC({routes:t}))).then(FC).then(XC).then(JC).then((t=>t.map((t=>new PC(t)))))}function RC({accept:t,from:e,whitelist:n,blacklist:r,drip:i}){if(t.some((t=>t&&t.fee&&"string"==typeof t.fee.amount&&t.fee.amount.match(/\.\d\d+\%/))))throw"Only up to 1 decimal is supported for fee amounts!";return new Promise((async(o,a)=>{let s=[],u=[];if(n)for(const t in n)(n[t]||[]).forEach((e=>{u.push(t),s.push({blockchain:t,address:e})}));else t.forEach((t=>{u.push(t.blockchain),s.push({blockchain:t.blockchain,address:t.token||t.toToken})}));[...new Set(u)].forEach((t=>{s.find((e=>e.blockchain===t&&e.address===Vp[t].currency.address))||s.push({blockchain:t,address:Vp[t].currency.address})})),s.sort(((t,e)=>kC(t.blockchain)[t.blockchain,t.address.toLowerCase()].join(""))),p=()=>Math.ceil(new Date),f=p();setTimeout((()=>{l.forEach((t=>m(RC,!1)))}),3e3);const m=(t,e=!0)=>{try{const n={blockchain:t.blockchain,address:t.fromToken.address},r=[n.blockchain,n.address.toLowerCase()].join(""),o=p()-f>3e3;if(h.indexOf(r)>-1)return;if(d.indexOf(r)===c){if(h.push(r),i(t),c+=1,!e)return;l.forEach((e=>m(t,!1)))}else c>=d.length||o?(-1===d.indexOf(r)||c>=d.length||o)&&(h.push(r),i(t)):l.find((t=>t.blockchain===n.blockchain&&t.address.toLowerCase()===n.address.toLowerCase()))||(l.push(n),l.sort(((t,e)=>((t,e,n)=>{if(!t||0===t.length)return 0;let r=t.indexOf([e.blockchain,e.address.toLowerCase()].join("")),i=t.indexOf([n.blockchain,n.address.toLowerCase()].join(""));return-1!==r&&-1===i?-1:-1!==i&&-1===r?1:r{BC({assets:[n],blacklist:r,accept:t,from:e}).then((t=>{_C([t,"optionalAccess",t=>t.length])&&m(t[0])}))}:void 0});let g=await BC({assets:y,blacklist:r,accept:t,from:e})||[];g.assets=y,o(g)}))}let UC=({assets:t,blacklist:e})=>null==e?t:t.filter((t=>null==e[t.blockchain]||!e[t.blockchain].find((e=>e.toLowerCase()==t.address.toLowerCase())))),WC=async t=>await Promise.all(t.map((t=>t.directTransfer?[]:t.toToken&&t.toAmount?Tj.route({blockchain:t.blockchain,tokenIn:t.fromToken.address,tokenOut:t.toToken.address,amountOutMin:t.toAmount,fromAddress:t.fromAddress,toAddress:t.toAddress}):t.fromToken&&t.fromAmount?Tj.route({blockchain:t.blockchain,tokenIn:t.fromToken.address,tokenOut:t.toToken.address,amountIn:t.fromAmount,fromAddress:t.fromAddress,toAddress:t.toAddress}):void 0))).then((e=>t.map(((t,n)=>(t.exchangeRoutes=e[n],t))))),QC=t=>t.filter((t=>0!=t.exchangeRoutes.length||t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase())),YC=async t=>t.filter((t=>t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase()?Ff.from(t.fromBalance).gte(Ff.from(t.toAmount)):t.fromAmount&&t.toAmount?Ff.from(t.fromBalance).gte(Ff.from(t.exchangeRoutes[0].amountInMax)):t.exchangeRoutes[0]&&t.exchangeRoutes[0].amountIn?Ff.from(t.fromBalance).gte(Ff.from(t.exchangeRoutes[0].amountIn)):void 0)),FC=t=>Promise.all(t.map((t=>"solana"===t.blockchain?Promise.resolve(Vp.solana.maxInt):t.fromToken.allowance(t.fromAddress,AC[t.blockchain].address).catch((()=>{}))))).then((e=>(t.map(((n,r)=>{void 0===e[r]||n.directTransfer||n.fromToken.address.toLowerCase()==Vp[n.blockchain].currency.address.toLowerCase()||"solana"===n.blockchain?t[r].approvalRequired=!1:(t[r].approvalRequired=Ff.from(n.fromAmount).gte(Ff.from(e[r])),t[r].approvalRequired&&(t[r].approvalTransaction={blockchain:n.blockchain,to:n.fromToken.address,api:Tk[n.blockchain].DEFAULT,method:"approve",params:[AC[n.blockchain].address,Vp[n.blockchain].maxInt]}))})),t))),VC=({routes:t})=>t.map((t=>(OC.evm.includes(t.blockchain)?t.directTransfer=t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase()&&null==t.fee:"solana"===t.blockchain&&(t.directTransfer=t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase()),t))),HC=({paymentRoute:t,exchangeRoute:e})=>{let n,r,i;return e?(e&&e.exchange.wrapper,n=e.amountIn.toString(),r=GC({amount:e.amountOutMin.toString(),paymentRoute:t})):(n=t.fromAmount,r=GC({amount:t.fromAmount,paymentRoute:t})),t.fee&&(i=qC({paymentRoute:t})),{fromAmount:n,toAmount:r,feeAmount:i}},GC=({amount:t,paymentRoute:e})=>{if(e.fee){let n=qC({paymentRoute:e});return Ff.from(t).sub(n).toString()}return t},qC=({paymentRoute:t})=>{if("string"==typeof t.fee.amount&&t.fee.amount.match("%"))return Ff.from(t.toAmount).mul(10*parseFloat(t.fee.amount)).div(1e3).toString();if("string"==typeof t.fee.amount)return t.fee.amount;if("number"==typeof t.fee.amount)return cE(t.fee.amount.toString(),t.toDecimals).toString();throw"Unknown fee amount type!"},ZC=({routes:t})=>t.map((t=>{if(OC.evm.includes(t.blockchain))if(t.directTransfer&&!t.fee)t.fromAmount=t.toAmount;else{let{fromAmount:e,toAmount:n,feeAmount:r}=HC({paymentRoute:t,exchangeRoute:t.exchangeRoutes[0]});t.fromAmount=e,t.toAmount=n,t.fee&&(t.feeAmount=r)}else if(OC.solana.includes(t.blockchain)){let{fromAmount:e,toAmount:n,feeAmount:r}=HC({paymentRoute:t,exchangeRoute:t.exchangeRoutes[0]});t.fromAmount=e,t.toAmount=n,t.fee&&(t.feeAmount=r)}return t})),JC=t=>t.filter(((e,n)=>null==t.find(((t,r)=>e.fromToken.address==t.fromToken.address&&(e.fromToken.blockchain==t.fromToken.blockchain&&(!(!t.directTransfer||e.directTransfer)||(!(!Ff.from(t.fromAmount).lt(Ff.from(e.fromAmount))||e.directTransfer)||(t.fromAmount==e.fromAmount&&r{let e=-1;return t.sort(((t,n)=>kC(t.fromToken.blockchain)0){for(o+=a,e=1;en)throw Error(Qk+t)}function nL(t,e,n,r){var i,o,a,s;for(o=t[0];o>=10;o/=10)--e;return--e<0?(e+=7,i=0):(i=Math.ceil((e+1)/7),e%=7),o=Vk(10,7-e),s=t[i]%o|0,null==r?e<3?(0==e?s=s/100|0:1==e&&(s=s/10|0),a=n<4&&99999==s||n>3&&49999==s||5e4==s||0==s):a=(n<4&&s+1==o||n>3&&s+1==o/2)&&(t[i+1]/o/100|0)==Vk(10,e-2)-1||(s==o/2||0==s)&&0==(t[i+1]/o/100|0):e<4?(0==e?s=s/1e3|0:1==e?s=s/100|0:2==e&&(s=s/10|0),a=(r||n<4)&&9999==s||!r&&n>3&&4999==s):a=((r||n<4)&&s+1==o||!r&&n>3&&s+1==o/2)&&(t[i+1]/o/1e3|0)==Vk(10,e-3)-1,a}function rL(t,e,n){for(var r,i,o=[0],a=0,s=t.length;an-1&&(void 0===o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/n|0,o[r]%=n)}return o.reverse()}$k.absoluteValue=$k.abs=function(){var t=new this.constructor(this);return t.s<0&&(t.s=1),oL(t)},$k.ceil=function(){return oL(new this.constructor(this),this.e+1,2)},$k.clampedTo=$k.clamp=function(t,e){var n=this,r=n.constructor;if(t=new r(t),e=new r(e),!t.s||!e.s)return new r(NaN);if(t.gt(e))throw Error(Qk+e);return n.cmp(t)<0?t:n.cmp(e)>0?e:new r(n)},$k.comparedTo=$k.cmp=function(t){var e,n,r,i,o=this,a=o.d,s=(t=new o.constructor(t)).d,u=o.s,c=t.s;if(!a||!s)return u&&c?u!==c?u:a===s?0:!a^u<0?1:-1:NaN;if(!a[0]||!s[0])return a[0]?u:s[0]?-c:0;if(u!==c)return u;if(o.e!==t.e)return o.e>t.e^u<0?1:-1;for(e=0,n=(r=a.length)<(i=s.length)?r:i;es[e]^u<0?1:-1;return r===i?0:r>i^u<0?1:-1},$k.cosine=$k.cos=function(){var t,e,n=this,r=n.constructor;return n.d?n.d[0]?(t=r.precision,e=r.rounding,r.precision=t+Math.max(n.e,n.sd())+7,r.rounding=1,n=function(t,e){var n,r,i;if(e.isZero())return e;(r=e.d.length)<32?i=(1/ML(4,n=Math.ceil(r/3))).toString():(n=16,i="2.3283064365386962890625e-10");t.precision+=n,e=bL(t,1,e.times(i),new t(1));for(var o=n;o--;){var a=e.times(e);e=a.times(a).minus(a).times(8).plus(1)}return t.precision-=n,e}(r,AL(r,n)),r.precision=t,r.rounding=e,oL(2==Ok||3==Ok?n.neg():n,t,e,!0)):new r(1):new r(NaN)},$k.cubeRoot=$k.cbrt=function(){var t,e,n,r,i,o,a,s,u,c,l=this,h=l.constructor;if(!l.isFinite()||l.isZero())return new h(l);for(Wk=!1,(o=l.s*Vk(l.s*l,1/3))&&Math.abs(o)!=1/0?r=new h(o.toString()):(n=tL(l.d),(o=((t=l.e)-n.length+1)%3)&&(n+=1==o||-2==o?"0":"00"),o=Vk(n,1/3),t=Fk((t+1)/3)-(t%3==(t<0?-1:2)),(r=new h(n=o==1/0?"5e"+t:(n=o.toExponential()).slice(0,n.indexOf("e")+1)+t)).s=l.s),a=(t=h.precision)+3;;)if(c=(u=(s=r).times(s).times(s)).plus(l),r=iL(c.plus(l).times(s),c.plus(u),a+2,1),tL(s.d).slice(0,a)===(n=tL(r.d)).slice(0,a)){if("9999"!=(n=n.slice(a-3,a+1))&&(i||"4999"!=n)){+n&&(+n.slice(1)||"5"!=n.charAt(0))||(oL(r,t+1,1),e=!r.times(r).times(r).eq(l));break}if(!i&&(oL(s,t+1,0),s.times(s).times(s).eq(l))){r=s;break}a+=4,i=1}return Wk=!0,oL(r,t,h.rounding,e)},$k.decimalPlaces=$k.dp=function(){var t,e=this.d,n=NaN;if(e){if(n=7*((t=e.length-1)-Fk(this.e/7)),t=e[t])for(;t%10==0;t/=10)n--;n<0&&(n=0)}return n},$k.dividedBy=$k.div=function(t){return iL(this,new this.constructor(t))},$k.dividedToIntegerBy=$k.divToInt=function(t){var e=this.constructor;return oL(iL(this,new e(t),0,1,1),e.precision,e.rounding)},$k.equals=$k.eq=function(t){return 0===this.cmp(t)},$k.floor=function(){return oL(new this.constructor(this),this.e+1,3)},$k.greaterThan=$k.gt=function(t){return this.cmp(t)>0},$k.greaterThanOrEqualTo=$k.gte=function(t){var e=this.cmp(t);return 1==e||0===e},$k.hyperbolicCosine=$k.cosh=function(){var t,e,n,r,i,o=this,a=o.constructor,s=new a(1);if(!o.isFinite())return new a(o.s?1/0:NaN);if(o.isZero())return s;n=a.precision,r=a.rounding,a.precision=n+Math.max(o.e,o.sd())+4,a.rounding=1,(i=o.d.length)<32?e=(1/ML(4,t=Math.ceil(i/3))).toString():(t=16,e="2.3283064365386962890625e-10"),o=bL(a,1,o.times(e),new a(1),!0);for(var u,c=t,l=new a(8);c--;)u=o.times(o),o=s.minus(u.times(l.minus(u.times(l))));return oL(o,a.precision=n,a.rounding=r,!0)},$k.hyperbolicSine=$k.sinh=function(){var t,e,n,r,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,n=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,(r=i.d.length)<3)i=bL(o,2,i,i,!0);else{t=(t=1.4*Math.sqrt(r))>16?16:0|t,i=bL(o,2,i=i.times(1/ML(5,t)),i,!0);for(var a,s=new o(5),u=new o(16),c=new o(20);t--;)a=i.times(i),i=i.times(s.plus(a.times(u.times(a).plus(c))))}return o.precision=e,o.rounding=n,oL(i,e,n,!0)},$k.hyperbolicTangent=$k.tanh=function(){var t,e,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+7,r.rounding=1,iL(n.sinh(),n.cosh(),r.precision=t,r.rounding=e)):new r(n.s)},$k.inverseCosine=$k.acos=function(){var t,e=this,n=e.constructor,r=e.abs().cmp(1),i=n.precision,o=n.rounding;return-1!==r?0===r?e.isNeg()?cL(n,i,o):new n(0):new n(NaN):e.isZero()?cL(n,i+4,o).times(.5):(n.precision=i+6,n.rounding=1,e=e.asin(),t=cL(n,i+4,o).times(.5),n.precision=i,n.rounding=o,t.minus(e))},$k.inverseHyperbolicCosine=$k.acosh=function(){var t,e,n=this,r=n.constructor;return n.lte(1)?new r(n.eq(1)?0:NaN):n.isFinite()?(t=r.precision,e=r.rounding,r.precision=t+Math.max(Math.abs(n.e),n.sd())+4,r.rounding=1,Wk=!1,n=n.times(n).minus(1).sqrt().plus(n),Wk=!0,r.precision=t,r.rounding=e,n.ln()):new r(n)},$k.inverseHyperbolicSine=$k.asinh=function(){var t,e,n=this,r=n.constructor;return!n.isFinite()||n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+2*Math.max(Math.abs(n.e),n.sd())+6,r.rounding=1,Wk=!1,n=n.times(n).plus(1).sqrt().plus(n),Wk=!0,r.precision=t,r.rounding=e,n.ln())},$k.inverseHyperbolicTangent=$k.atanh=function(){var t,e,n,r,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(t=o.precision,e=o.rounding,r=i.sd(),Math.max(r,t)<2*-i.e-1?oL(new o(i),t,e,!0):(o.precision=n=r-i.e,i=iL(i.plus(1),new o(1).minus(i),n+t,1),o.precision=t+4,o.rounding=1,i=i.ln(),o.precision=t,o.rounding=e,i.times(.5))):new o(NaN)},$k.inverseSine=$k.asin=function(){var t,e,n,r,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),n=o.precision,r=o.rounding,-1!==e?0===e?((t=cL(o,n+4,r).times(.5)).s=i.s,t):new o(NaN):(o.precision=n+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=n,o.rounding=r,i.times(2)))},$k.inverseTangent=$k.atan=function(){var t,e,n,r,i,o,a,s,u,c=this,l=c.constructor,h=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&h+4<=Kk)return(a=cL(l,h+4,d).times(.25)).s=c.s,a}else{if(!c.s)return new l(NaN);if(h+4<=Kk)return(a=cL(l,h+4,d).times(.5)).s=c.s,a}for(l.precision=s=h+10,l.rounding=1,t=n=Math.min(28,s/7+2|0);t;--t)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(Wk=!1,e=Math.ceil(s/7),r=1,u=c.times(c),a=new l(c),i=c;-1!==t;)if(i=i.times(u),o=a.minus(i.div(r+=2)),i=i.times(u),void 0!==(a=o.plus(i.div(r+=2))).d[e])for(t=e;a.d[t]===o.d[t]&&t--;);return n&&(a=a.times(2<this.d.length-2},$k.isNaN=function(){return!this.s},$k.isNegative=$k.isNeg=function(){return this.s<0},$k.isPositive=$k.isPos=function(){return this.s>0},$k.isZero=function(){return!!this.d&&0===this.d[0]},$k.lessThan=$k.lt=function(t){return this.cmp(t)<0},$k.lessThanOrEqualTo=$k.lte=function(t){return this.cmp(t)<1},$k.logarithm=$k.log=function(t){var e,n,r,i,o,a,s,u,c=this,l=c.constructor,h=l.precision,d=l.rounding;if(null==t)t=new l(10),e=!0;else{if(n=(t=new l(t)).d,t.s<0||!n||!n[0]||t.eq(1))return new l(NaN);e=t.eq(10)}if(n=c.d,c.s<0||!n||!n[0]||c.eq(1))return new l(n&&!n[0]?-1/0:1!=c.s?NaN:n?0:1/0);if(e)if(n.length>1)o=!0;else{for(i=n[0];i%10==0;)i/=10;o=1!==i}if(Wk=!1,a=yL(c,s=h+5),r=e?uL(l,s+10):yL(t,s),nL((u=iL(a,r,s,1)).d,i=h,d))do{if(a=yL(c,s+=10),r=e?uL(l,s+10):yL(t,s),u=iL(a,r,s,1),!o){+tL(u.d).slice(i+1,i+15)+1==1e14&&(u=oL(u,h+1,0));break}}while(nL(u.d,i+=10,d));return Wk=!0,oL(u,h,d)},$k.minus=$k.sub=function(t){var e,n,r,i,o,a,s,u,c,l,h,d,p=this,f=p.constructor;if(t=new f(t),!p.d||!t.d)return p.s&&t.s?p.d?t.s=-t.s:t=new f(t.d||p.s!==t.s?p:NaN):t=new f(NaN),t;if(p.s!=t.s)return t.s=-t.s,p.plus(t);if(c=p.d,d=t.d,s=f.precision,u=f.rounding,!c[0]||!d[0]){if(d[0])t.s=-t.s;else{if(!c[0])return new f(3===u?-0:0);t=new f(p)}return Wk?oL(t,s,u):t}if(n=Fk(t.e/7),l=Fk(p.e/7),c=c.slice(),o=l-n){for((h=o<0)?(e=c,o=-o,a=d.length):(e=d,n=l,a=c.length),o>(r=Math.max(Math.ceil(s/7),a)+2)&&(o=r,e.length=1),e.reverse(),r=o;r--;)e.push(0);e.reverse()}else{for((h=(r=c.length)<(a=d.length))&&(a=r),r=0;r0;--r)c[a++]=0;for(r=d.length;r>o;){if(c[--r](a=(o=Math.ceil(s/7))>a?o+1:a+1)&&(i=a,n.length=1),n.reverse();i--;)n.push(0);n.reverse()}for((a=c.length)-(i=l.length)<0&&(i=a,n=l,l=c,c=n),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/Jk|0,c[i]%=Jk;for(e&&(c.unshift(e),++r),a=c.length;0==c[--a];)c.pop();return t.d=c,t.e=sL(c,r),Wk?oL(t,s,u):t},$k.precision=$k.sd=function(t){var e,n=this;if(void 0!==t&&t!==!!t&&1!==t&&0!==t)throw Error(Qk+t);return n.d?(e=lL(n.d),t&&n.e+1>e&&(e=n.e+1)):e=NaN,e},$k.round=function(){var t=this,e=t.constructor;return oL(new e(t),t.e+1,e.rounding)},$k.sine=$k.sin=function(){var t,e,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+Math.max(n.e,n.sd())+7,r.rounding=1,n=function(t,e){var n,r=e.d.length;if(r<3)return e.isZero()?e:bL(t,2,e,e);n=(n=1.4*Math.sqrt(r))>16?16:0|n,e=e.times(1/ML(5,n)),e=bL(t,2,e,e);for(var i,o=new t(5),a=new t(16),s=new t(20);n--;)i=e.times(e),e=e.times(o.plus(i.times(a.times(i).minus(s))));return e}(r,AL(r,n)),r.precision=t,r.rounding=e,oL(Ok>2?n.neg():n,t,e,!0)):new r(NaN)},$k.squareRoot=$k.sqrt=function(){var t,e,n,r,i,o,a=this,s=a.d,u=a.e,c=a.s,l=a.constructor;if(1!==c||!s||!s[0])return new l(!c||c<0&&(!s||s[0])?NaN:s?a:1/0);for(Wk=!1,0==(c=Math.sqrt(+a))||c==1/0?(((e=tL(s)).length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=Fk((u+1)/2)-(u<0||u%2),r=new l(e=c==1/0?"5e"+u:(e=c.toExponential()).slice(0,e.indexOf("e")+1)+u)):r=new l(c.toString()),n=(u=l.precision)+3;;)if(r=(o=r).plus(iL(a,o,n+2,1)).times(.5),tL(o.d).slice(0,n)===(e=tL(r.d)).slice(0,n)){if("9999"!=(e=e.slice(n-3,n+1))&&(i||"4999"!=e)){+e&&(+e.slice(1)||"5"!=e.charAt(0))||(oL(r,u+1,1),t=!r.times(r).eq(a));break}if(!i&&(oL(o,u+1,0),o.times(o).eq(a))){r=o;break}n+=4,i=1}return Wk=!0,oL(r,u,l.rounding,t)},$k.tangent=$k.tan=function(){var t,e,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(t=r.precision,e=r.rounding,r.precision=t+10,r.rounding=1,(n=n.sin()).s=1,n=iL(n,new r(1).minus(n.times(n)).sqrt(),t+10,0),r.precision=t,r.rounding=e,oL(2==Ok||4==Ok?n.neg():n,t,e,!0)):new r(NaN)},$k.times=$k.mul=function(t){var e,n,r,i,o,a,s,u,c,l=this,h=l.constructor,d=l.d,p=(t=new h(t)).d;if(t.s*=l.s,!(d&&d[0]&&p&&p[0]))return new h(!t.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:d&&p?0*t.s:t.s/0);for(n=Fk(l.e/7)+Fk(t.e/7),(u=d.length)<(c=p.length)&&(o=d,d=p,p=o,a=u,u=c,c=a),o=[],r=a=u+c;r--;)o.push(0);for(r=c;--r>=0;){for(e=0,i=u+r;i>r;)s=o[i]+p[r]*d[i-r-1]+e,o[i--]=s%Jk|0,e=s/Jk|0;o[i]=(o[i]+e)%Jk|0}for(;!o[--a];)o.pop();return e?++n:o.shift(),t.d=o,t.e=sL(o,n),Wk?oL(t,h.precision,h.rounding):t},$k.toBinary=function(t,e){return EL(this,2,t,e)},$k.toDecimalPlaces=$k.toDP=function(t,e){var n=this,r=n.constructor;return n=new r(n),void 0===t?n:(eL(t,0,1e9),void 0===e?e=r.rounding:eL(e,0,8),oL(n,t+n.e+1,e))},$k.toExponential=function(t,e){var n,r=this,i=r.constructor;return void 0===t?n=aL(r,!0):(eL(t,0,1e9),void 0===e?e=i.rounding:eL(e,0,8),n=aL(r=oL(new i(r),t+1,e),!0,t+1)),r.isNeg()&&!r.isZero()?"-"+n:n},$k.toFixed=function(t,e){var n,r,i=this,o=i.constructor;return void 0===t?n=aL(i):(eL(t,0,1e9),void 0===e?e=o.rounding:eL(e,0,8),n=aL(r=oL(new o(i),t+i.e+1,e),!1,t+r.e+1)),i.isNeg()&&!i.isZero()?"-"+n:n},$k.toFraction=function(t){var e,n,r,i,o,a,s,u,c,l,h,d,p=this,f=p.d,m=p.constructor;if(!f)return new m(p);if(c=n=new m(1),r=u=new m(0),a=(o=(e=new m(r)).e=lL(f)-p.e-1)%7,e.d[0]=Vk(10,a<0?7+a:a),null==t)t=o>0?e:c;else{if(!(s=new m(t)).isInt()||s.lt(c))throw Error(Qk+s);t=s.gt(e)?o>0?e:c:s}for(Wk=!1,s=new m(tL(f)),l=m.precision,m.precision=o=7*f.length*2;h=iL(s,e,0,1,1),1!=(i=n.plus(h.times(r))).cmp(t);)n=r,r=i,i=c,c=u.plus(h.times(i)),u=i,i=e,e=s.minus(h.times(i)),s=i;return i=iL(t.minus(n),r,0,1,1),u=u.plus(i.times(c)),n=n.plus(i.times(r)),u.s=c.s=p.s,d=iL(c,r,o,1).minus(p).abs().cmp(iL(u,n,o,1).minus(p).abs())<1?[c,r]:[u,n],m.precision=l,Wk=!0,d},$k.toHexadecimal=$k.toHex=function(t,e){return EL(this,16,t,e)},$k.toNearest=function(t,e){var n=this,r=n.constructor;if(n=new r(n),null==t){if(!n.d)return n;t=new r(1),e=r.rounding}else{if(t=new r(t),void 0===e?e=r.rounding:eL(e,0,8),!n.d)return t.s?n:t;if(!t.d)return t.s&&(t.s=n.s),t}return t.d[0]?(Wk=!1,n=iL(n,t,0,e,1).times(t),Wk=!0,oL(n)):(t.s=n.s,n=t),n},$k.toNumber=function(){return+this},$k.toOctal=function(t,e){return EL(this,8,t,e)},$k.toPower=$k.pow=function(t){var e,n,r,i,o,a,s=this,u=s.constructor,c=+(t=new u(t));if(!(s.d&&t.d&&s.d[0]&&t.d[0]))return new u(Vk(+s,c));if((s=new u(s)).eq(1))return s;if(r=u.precision,o=u.rounding,t.eq(1))return oL(s,r,o);if((e=Fk(t.e/7))>=t.d.length-1&&(n=c<0?-c:c)<=9007199254740991)return i=dL(u,s,n,r),t.s<0?new u(1).div(i):oL(i,r,o);if((a=s.s)<0){if(eu.maxE+1||e0?a/0:0):(Wk=!1,u.rounding=s.s=1,n=Math.min(12,(e+"").length),(i=mL(t.times(yL(s,r+n)),r)).d&&nL((i=oL(i,r+5,1)).d,r,o)&&(e=r+10,+tL((i=oL(mL(t.times(yL(s,e+n)),e),e+5,1)).d).slice(r+1,r+15)+1==1e14&&(i=oL(i,r+1,0))),i.s=a,Wk=!0,u.rounding=o,oL(i,r,o))},$k.toPrecision=function(t,e){var n,r=this,i=r.constructor;return void 0===t?n=aL(r,r.e<=i.toExpNeg||r.e>=i.toExpPos):(eL(t,1,1e9),void 0===e?e=i.rounding:eL(e,0,8),n=aL(r=oL(new i(r),t,e),t<=r.e||r.e<=i.toExpNeg,t)),r.isNeg()&&!r.isZero()?"-"+n:n},$k.toSignificantDigits=$k.toSD=function(t,e){var n=this.constructor;return void 0===t?(t=n.precision,e=n.rounding):(eL(t,1,1e9),void 0===e?e=n.rounding:eL(e,0,8)),oL(new n(this),t,e)},$k.toString=function(){var t=this,e=t.constructor,n=aL(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()&&!t.isZero()?"-"+n:n},$k.truncated=$k.trunc=function(){return oL(new this.constructor(this),this.e+1,1)},$k.valueOf=$k.toJSON=function(){var t=this,e=t.constructor,n=aL(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()?"-"+n:n};var iL=function(){function t(t,e,n){var r,i=0,o=t.length;for(t=t.slice();o--;)r=t[o]*e+i,t[o]=r%n|0,i=r/n|0;return i&&t.unshift(i),t}function e(t,e,n,r){var i,o;if(n!=r)o=n>r?1:-1;else for(i=o=0;ie[i]?1:-1;break}return o}function n(t,e,n,r){for(var i=0;n--;)t[n]-=i,i=t[n]1;)t.shift()}return function(r,i,o,a,s,u){var c,l,h,d,p,f,m,y,g,v,w,b,M,A,E,N,T,I,k,L,x=r.constructor,S=r.s==i.s?1:-1,j=r.d,C=i.d;if(!(j&&j[0]&&C&&C[0]))return new x(r.s&&i.s&&(j?!C||j[0]!=C[0]:C)?j&&0==j[0]||!C?0*S:S/0:NaN);for(u?(p=1,l=r.e-i.e):(u=Jk,p=7,l=Fk(r.e/p)-Fk(i.e/p)),k=C.length,T=j.length,v=(g=new x(S)).d=[],h=0;C[h]==(j[h]||0);h++);if(C[h]>(j[h]||0)&&l--,null==o?(A=o=x.precision,a=x.rounding):A=s?o+(r.e-i.e)+1:o,A<0)v.push(1),f=!0;else{if(A=A/p+2|0,h=0,1==k){for(d=0,C=C[0],A++;(h1&&(C=t(C,d,u),j=t(j,d,u),k=C.length,T=j.length),N=k,b=(w=j.slice(0,k)).length;b=u/2&&++I;do{d=0,(c=e(C,w,k,b))<0?(M=w[0],k!=b&&(M=M*u+(w[1]||0)),(d=M/I|0)>1?(d>=u&&(d=u-1),1==(c=e(m=t(C,d,u),w,y=m.length,b=w.length))&&(d--,n(m,k=10;d/=10)h++;g.e=h+l*p-1,oL(g,s?o+g.e+1:o,a,f)}return g}}();function oL(t,e,n,r){var i,o,a,s,u,c,l,h,d,p=t.constructor;t:if(null!=e){if(!(h=t.d))return t;for(i=1,s=h[0];s>=10;s/=10)i++;if((o=e-i)<0)o+=7,a=e,u=(l=h[d=0])/Vk(10,i-a-1)%10|0;else if((d=Math.ceil((o+1)/7))>=(s=h.length)){if(!r)break t;for(;s++<=d;)h.push(0);l=u=0,i=1,a=(o%=7)-7+1}else{for(l=s=h[d],i=1;s>=10;s/=10)i++;u=(a=(o%=7)-7+i)<0?0:l/Vk(10,i-a-1)%10|0}if(r=r||e<0||void 0!==h[d+1]||(a<0?l:l%Vk(10,i-a-1)),c=n<4?(u||r)&&(0==n||n==(t.s<0?3:2)):u>5||5==u&&(4==n||r||6==n&&(o>0?a>0?l/Vk(10,i-a):0:h[d-1])%10&1||n==(t.s<0?8:7)),e<1||!h[0])return h.length=0,c?(e-=t.e+1,h[0]=Vk(10,(7-e%7)%7),t.e=-e||0):h[0]=t.e=0,t;if(0==o?(h.length=d,s=1,d--):(h.length=d+1,s=Vk(10,7-o),h[d]=a>0?(l/Vk(10,i-a)%Vk(10,a)|0)*s:0),c)for(;;){if(0==d){for(o=1,a=h[0];a>=10;a/=10)o++;for(a=h[0]+=s,s=1;a>=10;a/=10)s++;o!=s&&(t.e++,h[0]==Jk&&(h[0]=1));break}if(h[d]+=s,h[d]!=Jk)break;h[d--]=0,s=1}for(o=h.length;0===h[--o];)h.pop()}return Wk&&(t.e>p.maxE?(t.d=null,t.e=NaN):t.e0?o=o.charAt(0)+"."+o.slice(1)+hL(r):a>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(t.e<0?"e":"e+")+t.e):i<0?(o="0."+hL(-i-1)+o,n&&(r=n-a)>0&&(o+=hL(r))):i>=a?(o+=hL(i+1-a),n&&(r=n-i-1)>0&&(o=o+"."+hL(r))):((r=i+1)0&&(i+1===a&&(o+="."),o+=hL(r))),o}function sL(t,e){var n=t[0];for(e*=7;n>=10;n/=10)e++;return e}function uL(t,e,n){if(e>Xk)throw Wk=!0,n&&(t.precision=n),Error("[DecimalError] Precision limit exceeded");return oL(new t(Bk),e,1,!0)}function cL(t,e,n){if(e>Kk)throw Error("[DecimalError] Precision limit exceeded");return oL(new t(Rk),e,n,!0)}function lL(t){var e=t.length-1,n=7*e+1;if(e=t[e]){for(;e%10==0;e/=10)n--;for(e=t[0];e>=10;e/=10)n++}return n}function hL(t){for(var e="";t--;)e+="0";return e}function dL(t,e,n,r){var i,o=new t(1),a=Math.ceil(r/7+4);for(Wk=!1;;){if(n%2&&NL((o=o.times(e)).d,a)&&(i=!0),0===(n=Fk(n/2))){n=o.d.length-1,i&&0===o.d[n]&&++o.d[n];break}NL((e=e.times(e)).d,a)}return Wk=!0,o}function pL(t){return 1&t.d[t.d.length-1]}function fL(t,e,n){for(var r,i=new t(e[0]),o=0;++o17)return new d(t.d?t.d[0]?t.s<0?0:1/0:1:t.s?t.s<0?0:t:NaN);for(null==e?(Wk=!1,u=f):u=e,s=new d(.03125);t.e>-2;)t=t.times(s),h+=5;for(u+=r=Math.log(Vk(2,h))/Math.LN10*2+5|0,n=o=a=new d(1),d.precision=u;;){if(o=oL(o.times(t),u,1),n=n.times(++l),tL((s=a.plus(iL(o,n,u,1))).d).slice(0,u)===tL(a.d).slice(0,u)){for(i=h;i--;)a=oL(a.times(a),u,1);if(null!=e)return d.precision=f,a;if(!(c<3&&nL(a.d,u-r,p,c)))return oL(a,d.precision=f,p,Wk=!0);d.precision=u+=10,n=o=s=new d(1),l=0,c++}a=s}}function yL(t,e){var n,r,i,o,a,s,u,c,l,h,d,p=1,f=t,m=f.d,y=f.constructor,g=y.rounding,v=y.precision;if(f.s<0||!m||!m[0]||!f.e&&1==m[0]&&1==m.length)return new y(m&&!m[0]?-1/0:1!=f.s?NaN:m?0:f);if(null==e?(Wk=!1,l=v):l=e,y.precision=l+=10,r=(n=tL(m)).charAt(0),!(Math.abs(o=f.e)<15e14))return c=uL(y,l+2,v).times(o+""),f=yL(new y(r+"."+n.slice(1)),l-10).plus(c),y.precision=v,null==e?oL(f,v,g,Wk=!0):f;for(;r<7&&1!=r||1==r&&n.charAt(1)>3;)r=(n=tL((f=f.times(t)).d)).charAt(0),p++;for(o=f.e,r>1?(f=new y("0."+n),o++):f=new y(r+"."+n.slice(1)),h=f,u=a=f=iL(f.minus(1),f.plus(1),l,1),d=oL(f.times(f),l,1),i=3;;){if(a=oL(a.times(d),l,1),tL((c=u.plus(iL(a,new y(i),l,1))).d).slice(0,l)===tL(u.d).slice(0,l)){if(u=u.times(2),0!==o&&(u=u.plus(uL(y,l+2,v).times(o+""))),u=iL(u,new y(p),l,1),null!=e)return y.precision=v,u;if(!nL(u.d,l-10,g,s))return oL(u,y.precision=v,g,Wk=!0);y.precision=l+=10,c=a=f=iL(h.minus(1),h.plus(1),l,1),d=oL(f.times(f),l,1),i=s=1}u=c,i+=2}}function gL(t){return String(t.s*t.s/0)}function vL(t,e){var n,r,i;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;48===e.charCodeAt(r);r++);for(i=e.length;48===e.charCodeAt(i-1);--i);if(e=e.slice(r,i)){if(i-=r,t.e=n=n-r-1,t.d=[],r=(n+1)%7,n<0&&(r+=7),rt.constructor.maxE?(t.d=null,t.e=NaN):t.e-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Zk.test(e))return vL(t,e)}else if("Infinity"===e||"NaN"===e)return+e||(t.s=NaN),t.e=NaN,t.d=null,t;if(Gk.test(e))n=16,e=e.toLowerCase();else if(Hk.test(e))n=2;else{if(!qk.test(e))throw Error(Qk+e);n=8}for((o=e.search(/p/i))>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),a=(o=e.indexOf("."))>=0,r=t.constructor,a&&(o=(s=(e=e.replace(".","")).length)-o,i=dL(r,new r(n),o,2*o)),o=l=(c=rL(e,n,Jk)).length-1;0===c[o];--o)c.pop();return o<0?new r(0*t.s):(t.e=sL(c,l),t.d=c,Wk=!1,a&&(t=iL(t,i,4*s)),u&&(t=t.times(Math.abs(u)<54?Vk(2,u):hx.pow(2,u))),Wk=!0,t)}function bL(t,e,n,r,i){var o,a,s,u,c=t.precision,l=Math.ceil(c/7);for(Wk=!1,u=n.times(n),s=new t(r);;){if(a=iL(s.times(u),new t(e++*e++),c,1),s=i?r.plus(a):r.minus(a),r=iL(a.times(u),new t(e++*e++),c,1),void 0!==(a=s.plus(r)).d[l]){for(o=l;a.d[o]===s.d[o]&&o--;);if(-1==o)break}o=s,s=r,r=a,a=o}return Wk=!0,a.d.length=l+1,a}function ML(t,e){for(var n=t;--e;)n*=t;return n}function AL(t,e){var n,r=e.s<0,i=cL(t,t.precision,1),o=i.times(.5);if((e=e.abs()).lte(o))return Ok=r?4:1,e;if((n=e.divToInt(i)).isZero())Ok=r?3:2;else{if((e=e.minus(n.times(i))).lte(o))return Ok=pL(n)?r?2:3:r?4:1,e;Ok=pL(n)?r?1:4:r?3:2}return e.minus(i).abs()}function EL(t,e,n,r){var i,o,a,s,u,c,l,h,d,p=t.constructor,f=void 0!==n;if(f?(eL(n,1,1e9),void 0===r?r=p.rounding:eL(r,0,8)):(n=p.precision,r=p.rounding),t.isFinite()){for(f?(i=2,16==e?n=4*n-3:8==e&&(n=3*n-2)):i=e,(a=(l=aL(t)).indexOf("."))>=0&&(l=l.replace(".",""),(d=new p(1)).e=l.length-a,d.d=rL(aL(d),10,i),d.e=d.d.length),o=u=(h=rL(l,10,i)).length;0==h[--u];)h.pop();if(h[0]){if(a<0?o--:((t=new p(t)).d=h,t.e=o,h=(t=iL(t,d,n,r,0,i)).d,o=t.e,c=Dk),a=h[n],s=i/2,c=c||void 0!==h[n+1],c=r<4?(void 0!==a||c)&&(0===r||r===(t.s<0?3:2)):a>s||a===s&&(4===r||c||6===r&&1&h[n-1]||r===(t.s<0?8:7)),h.length=n,c)for(;++h[--n]>i-1;)h[n]=0,n||(++o,h.unshift(1));for(u=h.length;!h[u-1];--u);for(a=0,l="";a1)if(16==e||8==e){for(a=16==e?4:3,--u;u%a;u++)l+="0";for(u=(h=rL(l,i,e)).length;!h[u-1];--u);for(a=1,l="1.";au)for(o-=u;o--;)l+="0";else oe)return t.length=e,!0}function TL(t){return new this(t).abs()}function IL(t){return new this(t).acos()}function kL(t){return new this(t).acosh()}function LL(t,e){return new this(t).plus(e)}function xL(t){return new this(t).asin()}function SL(t){return new this(t).asinh()}function jL(t){return new this(t).atan()}function CL(t){return new this(t).atanh()}function DL(t,e){t=new this(t),e=new this(e);var n,r=this.precision,i=this.rounding,o=r+4;return t.s&&e.s?t.d||e.d?!e.d||t.isZero()?(n=e.s<0?cL(this,r,i):new this(0)).s=t.s:!t.d||e.isZero()?(n=cL(this,o,1).times(.5)).s=t.s:e.s<0?(this.precision=o,this.rounding=1,n=this.atan(iL(t,e,o,1)),e=cL(this,o,1),this.precision=r,this.rounding=i,n=t.s<0?n.minus(e):n.plus(e)):n=this.atan(iL(t,e,o,1)):(n=cL(this,o,1).times(e.s>0?.25:.75)).s=t.s:n=new this(NaN),n}function OL(t){return new this(t).cbrt()}function zL(t){return oL(t=new this(t),t.e+1,2)}function _L(t,e,n){return new this(t).clamp(e,n)}function PL(t){if(!t||"object"!=typeof t)throw Error("[DecimalError] Object expected");var e,n,r,i=!0===t.defaults,o=["precision",1,1e9,"rounding",0,8,"toExpNeg",-_k,0,"toExpPos",0,_k,"maxE",0,_k,"minE",-_k,0,"modulo",0,9];for(e=0;e=o[e+1]&&r<=o[e+2]))throw Error(Qk+n+": "+r);this[n]=r}if(n="crypto",i&&(this[n]=Uk[n]),void 0!==(r=t[n])){if(!0!==r&&!1!==r&&0!==r&&1!==r)throw Error(Qk+n+": "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw Error("[DecimalError] crypto unavailable");this[n]=!0}else this[n]=!1}return this}function BL(t){return new this(t).cos()}function RL(t){return new this(t).cosh()}function UL(t,e){return new this(t).div(e)}function WL(t){return new this(t).exp()}function QL(t){return oL(t=new this(t),t.e+1,3)}function YL(){var t,e,n=new this(0);for(Wk=!1,t=0;t=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:s[o++]=i%1e7;else{if(!crypto.randomBytes)throw Error("[DecimalError] crypto unavailable");for(e=crypto.randomBytes(r*=4);o=214e7?crypto.randomBytes(4).copy(e,o):(s.push(i%1e7),o+=4);o=r/4}else for(;o=10;i/=10)r++;r<7&&(n-=7-r)}return a.e=n,a.d=s,a}function ex(t){return oL(t=new this(t),t.e+1,this.rounding)}function nx(t){return(t=new this(t)).d?t.d[0]?t.s:0*t.s:t.s||NaN}function rx(t){return new this(t).sin()}function ix(t){return new this(t).sinh()}function ox(t){return new this(t).sqrt()}function ax(t,e){return new this(t).sub(e)}function sx(){var t=0,e=arguments,n=new this(e[t]);for(Wk=!1;n.s&&++to.maxE?(i.e=NaN,i.d=null):t.e=10;n/=10)e++;return void(Wk?e>o.maxE?(i.e=NaN,i.d=null):en.call(e,...t))),e=void 0)}return n}Bk=new hx(Bk),Rk=new hx(Rk);class px{constructor({blockchain:t,tokenIn:e,decimalsIn:n,tokenOut:r,decimalsOut:i,path:o,pools:a,amountIn:s,amountInMax:u,amountOut:c,amountOutMin:l,exchange:h,approvalRequired:d,getApproval:p,getPrep:f,getTransaction:m}){this.blockchain=t,this.tokenIn=e,this.decimalsIn=n,this.tokenOut=r,this.decimalsOut=i,this.path=o,this.pools=a,this.amountIn=dx([s,"optionalAccess",t=>t.toString,"call",t=>t()]),this.amountOutMin=dx([l,"optionalAccess",t=>t.toString,"call",t=>t()]),this.amountOut=dx([c,"optionalAccess",t=>t.toString,"call",t=>t()]),this.amountInMax=dx([u,"optionalAccess",t=>t.toString,"call",t=>t()]),this.exchange=h,this.getPrep=f,this.getTransaction=m}}let fx=["ethereum","bsc","polygon","solana","fantom","arbitrum","avalanche","gnosis","optimism","base"];fx.evm=["ethereum","bsc","polygon","fantom","arbitrum","avalanche","gnosis","optimism","base"],fx.solana=["solana"];const mx=async({exchange:t,blockchain:e,pools:n,exchangePath:r,amountIn:i,amountOut:o})=>{let a=i.add(i.mul(100*parseFloat("0.5")).div(1e4));if(!fx.evm.includes(t.blockchain||e))return a;const s=await _E({blockchain:t.blockchain||e,method:"latestBlockNumber"});let u=[];for(var c=0;c<=2;c++)u.push(s-c);const l=await Promise.all(u.map((async i=>{let{amountIn:a}=await t.getAmounts({exchange:t,blockchain:e,path:r,pools:n,amountOut:o,block:i});return a})));if(!l[0]||!l[1]||!l[2])return a;let h;if(l[0].gt(l[1])&&l[1].gt(l[2])){const t=l[0].sub(l[1]),e=l[1].sub(l[2]),n=t.add(e).div(2);if(h=l[0].add(n),h.gt(a))return h}else if(!l[0].eq(l[1])&&!l[1].eq(l[2])){const t=l[0].sub(l[1]).abs(),e=l[1].sub(l[2]).abs();let n,r;if(n=t.lt(e)?t:e,r=l[0].gt(l[1])&&l[0].gt(l[2])?l[0]:l[1].gt(l[2])&&l[1].gt(l[0])?l[1]:l[2],h=r.add(n),h.gt(a))return h}return a},yx=async({exchange:t,blockchain:e,pools:n,exchangePath:r,amounts:i,tokenIn:o,tokenOut:a,amountIn:s,amountInMax:u,amountOut:c,amountOutMin:l,amountInInput:h,amountOutInput:d,amountInMaxInput:p,amountOutMinInput:f})=>{if(f||d){if(fx.evm.includes(t.blockchain||e))s=u=await mx({exchange:t,blockchain:e,pools:n,exchangePath:r,amountIn:s,amountOut:f||c});else if(fx.solana.includes(t.blockchain||e)){let e=[];await Promise.all(r.map(((o,a)=>{if(0!=a){let o=mx({exchange:t,pools:n,exchangePath:[r[a-1],r[a]],amountIn:i[a-1],amountOut:i[a]});return o.then((t=>e.push(t))),o}}))),e.push(i[i.length-1]),s=u=(i=e)[0]}}else if((p||h)&&fx.solana.includes(t.blockchain||e)){let e=[];await Promise.all(r.map(((n,o)=>{if(0!==o&&on.sub(n.mul(100*parseFloat("0.5")).div(1e4)))({exchange:t,exchangePath:[r[o-1],r[o]],amountIn:i[o-1],amountOut:i[o]});return n.then((t=>(e.unshift(t),t))),n}}))),e.push(i[0]),c=l=(i=e.slice().reverse())[i.length-1]}return{amountIn:s,amountInMax:u,amountOut:c,amountOutMin:l,amounts:i}},gx=t=>t.match("0x")?ay(t):t;let vx=async({amount:t,blockchain:e,address:n})=>await Tk.BigNumber({amount:t,blockchain:e,address:n}),wx=async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{let u={exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s};return o&&"number"==typeof o&&(u.amountOut=await vx({amount:o,blockchain:t,address:r})),s&&"number"==typeof s&&(u.amountOutMin=await vx({amount:s,blockchain:t,address:r})),i&&"number"==typeof i&&(u.amountIn=await vx({amount:i,blockchain:t,address:n})),a&&"number"==typeof a&&(u.amountInMax=await vx({amount:a,blockchain:t,address:n})),u};class bx{constructor(...t){Object.assign(this,...t)}async route({blockchain:t,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a}){return e===n?Promise.resolve():(void 0===t&&(this.scope?t=this.scope:1===this.blockchains.length&&(t=this.blockchains[0])),(({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if(void 0===t&&null!=e.blockchains&&e.blockchains.length>1)throw"You need to provide a blockchain when calling route on an exchange that supports multiple blockchains!";if(void 0!==o&&void 0!==i)throw"You cannot set amountIn and amountOut at the same time, use amountInMax or amountOutMin to describe the non exact part of the swap!";if(void 0!==a&&void 0!==s)throw"You cannot set amountInMax and amountOutMin at the same time, use amountIn or amountOut to describe the part of the swap that needs to be exact!";if(void 0!==i&&void 0!==a)throw"Setting amountIn and amountInMax at the same time makes no sense. Decide if amountIn needs to be exact or not!";if(void 0!==o&&void 0!==s)throw"Setting amountOut and amountOutMin at the same time makes no sense. Decide if amountOut needs to be exact or not!"})({blockchain:t,exchange:this,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a}),await(({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s,findPath:u,getAmounts:c,getPrep:l,getTransaction:h,slippage:d})=>{if(n=gx(n),r=gx(r),[i,o,a,s].filter(Boolean).length>1)throw"You can only pass one: amountIn, amountOut, amountInMax or amountOutMin";if([i,o,a,s].filter(Boolean).length<1)throw"You need to pass exactly one: amountIn, amountOut, amountInMax or amountOutMin";return new Promise((async p=>{let{path:f,exchangePath:m,pools:y}=await u({blockchain:t,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s});if(void 0===f||0==f.length)return p();let g,[v,w,b,M]=[i,o,a,s];try{({amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amounts:g}=await c({exchange:e,blockchain:t,path:f,pools:y,tokenIn:n,tokenOut:r,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s}))}catch(t){return p()}if([i,a,o,s].every((t=>null==t)))return p();if(d||e.slippage)try{({amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amounts:g}=await yx({exchange:e,blockchain:t,pools:y,exchangePath:m,amounts:g,tokenIn:n,tokenOut:r,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amountInInput:v,amountOutInput:w,amountInMaxInput:b,amountOutMinInput:M}))}catch(t){return p()}const A=await new Tk({blockchain:t,address:n}).decimals(),E=await new Tk({blockchain:t,address:r}).decimals();p(new px({blockchain:t,tokenIn:n,decimalsIn:A,tokenOut:r,decimalsOut:E,path:f,pools:y,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,exchange:e,getPrep:async({account:o})=>await l({exchange:e,blockchain:t,tokenIn:n,tokenOut:r,amountIn:i||a,account:o}),getTransaction:async({account:n,permit2:r,inputTokenPushed:u})=>await h({exchange:e,blockchain:t,pools:y,path:f,amountIn:i,amountInMax:a,amountOut:o,amountOutMin:s,amounts:g,amountInInput:v,amountOutInput:w,amountInMaxInput:b,amountOutMinInput:M,account:n,permit2:r,inputTokenPushed:u})}))}))})({...await wx({blockchain:t,exchange:this,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a}),blockchain:t,findPath:this.findPath,getAmounts:this.getAmounts,getPrep:this.getPrep,getTransaction:this.getTransaction,slippage:this.slippage}))}}function Mx(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const Ax=({blockchain:t,exchange:e,path:n})=>{if(!n)return;let r=n.map(((e,r)=>e===Vp[t].currency.address&&n[r+1]!=Vp[t].wrapped.address&&n[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:e));return r[0]==Vp[t].currency.address&&r[1]==Vp[t].wrapped.address?r.splice(0,1):r[r.length-1]==Vp[t].currency.address&&r[r.length-2]==Vp[t].wrapped.address&&r.splice(r.length-1,1),r},Ex=({reserves:t,min:e,token:n,token0:r,token1:i,decimals:o})=>r.toLowerCase()==n.toLowerCase()?t[0].gte(cE(e.toString(),o)):i.toLowerCase()==n.toLowerCase()&&t[1].gte(cE(e.toString(),o)),Nx=async({blockchain:t,exchange:e,path:n})=>{const r=Ax({blockchain:t,exchange:e,path:n});if(!r||1===r.length)return!1;try{let i=await _E({blockchain:t,address:e[t].factory.address,method:"getPair",api:e[t].factory.api,cache:36e5,params:Ax({blockchain:t,exchange:e,path:n})});if(!i||i==Vp[t].zero)return!1;let[o,a,s]=await Promise.all([_E({blockchain:t,address:i,method:"getReserves",api:e[t].pair.api,cache:36e5}),_E({blockchain:t,address:i,method:"token0",api:e[t].pair.api,cache:36e5}),_E({blockchain:t,address:i,method:"token1",api:e[t].pair.api,cache:36e5})]);if(r.includes(Vp[t].wrapped.address))return Ex({min:1,token:Vp[t].wrapped.address,decimals:Vp[t].currency.decimals,reserves:o,token0:a,token1:s});if(n.find((e=>Vp[t].stables.usd.includes(e)))){let e=n.find((e=>Vp[t].stables.usd.includes(e))),r=new Tk({blockchain:t,address:e}),i=await r.decimals();return Ex({min:1e3,token:e,decimals:i,reserves:o,token0:a,token1:s})}return!0}catch(t){return console.log("e",t),!1}};let Tx=({blockchain:t,exchange:e,path:n,amountIn:r,tokenIn:i,tokenOut:o})=>new Promise((i=>{_E({blockchain:t,address:e[t].router.address,method:"getAmountsOut",api:e[t].router.api,params:{amountIn:r,path:Ax({blockchain:t,exchange:e,path:n})}}).then((t=>{i(t[t.length-1])})).catch((()=>i()))})),Ix=({blockchain:t,exchange:e,path:n,amountOut:r,block:i})=>new Promise((o=>{_E({blockchain:t,address:e[t].router.address,method:"getAmountsIn",api:e[t].router.api,params:{amountOut:r,path:Ax({blockchain:t,exchange:e,path:n})},block:i}).then((t=>o(t[0]))).catch((()=>o()))}));var kx={findPath:async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r})=>{if([n,r].includes(Vp[t].currency.address)&&[n,r].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let i;if(await Nx({blockchain:t,exchange:e,path:[n,r]}))i=[n,r];else if(n!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[n,Vp[t].wrapped.address]})&&r!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[r,Vp[t].wrapped.address]}))i=[n,Vp[t].wrapped.address,r];else if(!Vp[t].stables.usd.includes(n)&&(await Promise.all(Vp[t].stables.usd.map((r=>Nx({blockchain:t,exchange:e,path:[n,r]}))))).filter(Boolean).length&&r!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[Vp[t].wrapped.address,r]})){let o=(await Promise.all(Vp[t].stables.usd.map((async r=>await Nx({blockchain:t,exchange:e,path:[n,r]})?r:void 0)))).find(Boolean);i=[n,o,Vp[t].wrapped.address,r]}else if(n!=Vp[t].wrapped.address&&await Nx({blockchain:t,exchange:e,path:[n,Vp[t].wrapped.address]})&&!Vp[t].stables.usd.includes(r)&&(await Promise.all(Vp[t].stables.usd.map((n=>Nx({blockchain:t,exchange:e,path:[n,r]}))))).filter(Boolean).length){let o=(await Promise.all(Vp[t].stables.usd.map((async n=>await Nx({blockchain:t,exchange:e,path:[n,r]})?n:void 0)))).find(Boolean);i=[n,Vp[t].wrapped.address,o,r]}return Mx([i,"optionalAccess",t=>t.length])&&i[0]==Vp[t].currency.address?i.splice(1,0,Vp[t].wrapped.address):Mx([i,"optionalAccess",t=>t.length])&&i[i.length-1]==Vp[t].currency.address&&i.splice(i.length-1,0,Vp[t].wrapped.address),{path:i,exchangePath:Ax({blockchain:t,exchange:e,path:i})}},pathExists:Nx,getAmounts:async({blockchain:t,exchange:e,path:n,block:r,tokenIn:i,tokenOut:o,amountOut:a,amountIn:s,amountInMax:u,amountOutMin:c})=>{if(a){if(null==(s=await Ix({blockchain:t,exchange:e,block:r,path:n,amountOut:a,tokenIn:i,tokenOut:o}))||u&&s.gt(u))return{};void 0===u&&(u=s)}else if(s){if(null==(a=await Tx({blockchain:t,exchange:e,path:n,amountIn:s,tokenIn:i,tokenOut:o}))||c&&a.lt(c))return{};void 0===c&&(c=a)}else if(c){if(null==(s=await Ix({blockchain:t,exchange:e,block:r,path:n,amountOut:c,tokenIn:i,tokenOut:o}))||u&&s.gt(u))return{};void 0===u&&(u=s)}else if(u){if(null==(a=await Tx({blockchain:t,exchange:e,path:n,amountIn:u,tokenIn:i,tokenOut:o}))||c&&a.lt(c))return{};void 0===c&&(c=a)}return{amountOut:a,amountIn:s,amountInMax:u,amountOutMin:c}},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i})=>{if(n===Vp[e].currency.address)return;const o=await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,t[e].router.address]});if(o.gte(r))return;return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[t[e].router.address,r.sub(o)]}}},getTransaction:({exchange:t,blockchain:e,path:n,amountIn:r,amountInMax:i,amountOut:o,amountOutMin:a,amountInInput:s,amountOutInput:u,amountInMaxInput:c,amountOutMinInput:l,account:h})=>{let d={blockchain:e,from:h,to:t[e].router.address,api:t[e].router.api};return n[0]===Vp[e].currency.address?s||l?(d.method="swapExactETHForTokens",d.value=r.toString(),d.params={amountOutMin:a.toString()}):(u||c)&&(d.method="swapETHForExactTokens",d.value=i.toString(),d.params={amountOut:o.toString()}):n[n.length-1]===Vp[e].currency.address?s||l?(d.method="swapExactTokensForETH",d.params={amountIn:r.toString(),amountOutMin:a.toString()}):(u||c)&&(d.method="swapTokensForExactETH",d.params={amountInMax:i.toString(),amountOut:o.toString()}):s||l?(d.method="swapExactTokensForTokens",d.params={amountIn:r.toString(),amountOutMin:a.toString()}):(u||c)&&(d.method="swapTokensForExactTokens",d.params={amountInMax:i.toString(),amountOut:o.toString()}),d.params=Object.assign({},d.params,{path:Ax({blockchain:e,exchange:t,path:n}),to:h,deadline:Math.round(Date.now()/1e3)+86400}),d},ROUTER:[{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint256",name:"amountADesired",type:"uint256"},{internalType:"uint256",name:"amountBDesired",type:"uint256"},{internalType:"uint256",name:"amountAMin",type:"uint256"},{internalType:"uint256",name:"amountBMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"addLiquidity",outputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"amountB",type:"uint256"},{internalType:"uint256",name:"liquidity",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountTokenDesired",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"addLiquidityETH",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountETH",type:"uint256"},{internalType:"uint256",name:"liquidity",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"reserveIn",type:"uint256"},{internalType:"uint256",name:"reserveOut",type:"uint256"}],name:"getAmountIn",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"reserveIn",type:"uint256"},{internalType:"uint256",name:"reserveOut",type:"uint256"}],name:"getAmountOut",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"}],name:"getAmountsIn",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"}],name:"getAmountsOut",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"reserveA",type:"uint256"},{internalType:"uint256",name:"reserveB",type:"uint256"}],name:"quote",outputs:[{internalType:"uint256",name:"amountB",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountAMin",type:"uint256"},{internalType:"uint256",name:"amountBMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidity",outputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"amountB",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidityETH",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidityETHSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bool",name:"approveMax",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"removeLiquidityETHWithPermit",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountETHMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bool",name:"approveMax",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountETH",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint256",name:"liquidity",type:"uint256"},{internalType:"uint256",name:"amountAMin",type:"uint256"},{internalType:"uint256",name:"amountBMin",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bool",name:"approveMax",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"removeLiquidityWithPermit",outputs:[{internalType:"uint256",name:"amountA",type:"uint256"},{internalType:"uint256",name:"amountB",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapETHForExactTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactETHForTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactETHForTokensSupportingFeeOnTransferTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForETH",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForETHSupportingFeeOnTransferTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokensSupportingFeeOnTransferTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactETH",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactTokens",outputs:[{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[{internalType:"address",name:"_feeToSetter",type:"address"}],payable:!1,stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!1,internalType:"address",name:"pair",type:"address"},{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"PairCreated",type:"event"},{constant:!0,inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"allPairs",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"allPairsLength",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"}],name:"createPair",outputs:[{internalType:"address",name:"pair",type:"address"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"feeTo",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"feeToSetter",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"getPair",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"_feeTo",type:"address"}],name:"setFeeTo",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"_feeToSetter",type:"address"}],name:"setFeeToSetter",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"}],PAIR:[{inputs:[],payable:!1,stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0In",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1In",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount0Out",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1Out",type:"uint256"},{indexed:!0,internalType:"address",name:"to",type:"address"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint112",name:"reserve0",type:"uint112"},{indexed:!1,internalType:"uint112",name:"reserve1",type:"uint112"}],name:"Sync",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{constant:!0,inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"MINIMUM_LIQUIDITY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"PERMIT_TYPEHASH",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"getReserves",outputs:[{internalType:"uint112",name:"_reserve0",type:"uint112"},{internalType:"uint112",name:"_reserve1",type:"uint112"},{internalType:"uint32",name:"_blockTimestampLast",type:"uint32"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"_token0",type:"address"},{internalType:"address",name:"_token1",type:"address"}],name:"initialize",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"kLast",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"}],name:"mint",outputs:[{internalType:"uint256",name:"liquidity",type:"uint256"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"price0CumulativeLast",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"price1CumulativeLast",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"}],name:"skim",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"amount0Out",type:"uint256"},{internalType:"uint256",name:"amount1Out",type:"uint256"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[],name:"sync",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"}]};const Lx={name:"honeyswap",label:"Honeyswap",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAYAAADBTPF9AAAACXBIWXMAAAsTAAALEwEAmpwYAAALmklEQVR4nO2de3BU1R3HP7+7eQALAcSNyq4ELDpUS0HJdrRm0aE6oPWJWqtQxUdn1KpcdQy04nssslQbdKxa7cC0iq22+BhsUQcfbBzQAL4V7VQM7OK4i4oJBJLs3l//uEHDkvfevbsb85nJHzn33PP73fu99+x5/M65Mt08jXwlVpuYCTwCjAS+BD5FeRXhaX+Vb51Tdja/khhZUsQpCGcBE4HRQCmwoqWFS8ZN8zU7ZctpJF8FjEbixSLyBnB0B4ebgZeAuzIRMhqJe0XkKuBKYFwn2c7xV/lW9NVGtjFy7UBniKKA1cnhUuA0oDYaSdyxLbLd09vyo5HEFBGJAGE6Fw+0Ux/ygrwV0D+1PKmqc4F1wGZgRwfZPCLcrKJ/i0bixT0tOxqJnyLCy3T8dqeAL9psLlH0+d577x5FuXagKwKh8teja+I/RRimKsMMQyeB/BL4BfZbuJcLRGQPcGl3ZUYj8eNBngK8aYc2AUtVeQk0CjQFQuW7nLqWbJG3v4FdYVd/PAxMSTv0G3+V70+dnxcfJSJrgcPbJStwm6reUwiCpZO3VWhXBEK+Dao6DViddui2aCQ+prPzROR37CteK8psf5XvjkIUDwpUQIBAqLxBVS8A/tsu2SciV3aUPxaJHwZcnpY83x/yLc+Wj25QsAICBELlCWB+WvL50Ui8bL/MIucC7dNr1dI/ZtE9VyhoAQFE5VngrXZJ46SD1qUIp6Yl3ReYWq5Zdc4FCl7A0aEDU6qs3CdRZJ/GTTQS96kyoV3SF6r6qgvuZZ2CFxBAhPfSksalHR8FjGiXtBlle7b9coN+IaDuL8bwtOPDgJJ2SV/3h+oT+omAgn6MPXoCgCpvpmX5FNj63b+6xhXHXMAz/tgjcu1DxpRVeBsbtzTVApYqy0T1obIKr9Xu+O6G+qbXAEuEv7e0yH0jx3lTufPYOQpyJGaA7+gXVej3mQEBC5wBAQucvJ5OyoRtke0eC2tQa6sk8zkkIlP6nYDRSDwkIrMRpghSVlJCc6w28RHwlKo+EwiVt+baRyfpNwLGauMTQO4QkfM6OPwj4DwReTMaid8WCJX/x23/skXB9wM3v5IY2RRrWgDyCHBMN9n9IjKrcUvTUTs2N304fKw34YaP2aRgBdwW2e5p2LrzYo9HlgNnsG+IRXccJcLFjVubhn35v6aNI8d592TJzaxTkK3QaCR+PIauBllKVxFlXSCCF5hfUsyGWG18Tl8i2/KBghIwFomPjdUmHhWRiConOFTsOJClGLo6GomHHCrTNQqiCo1G4t7GrbtuQGQpUAVIFsyMFZE5jVuaKhrrd71XVuH9Ogs2HCfvBYzVJmaKyOMgFwJDsmxOgKMR+VXjll1FDfW7NpZVePO625G3VWg0kjg6Vpv4N/Av7G6AmxwAcpeIvBmrTXTULckb8k7AaCRxcKw2USPCWuCUHLtzJPBkrDbxQjQSD+bYlw7Jmyp088uJ0l3RpisRHkc5ifwaZPiBiMxpqG865Jv6preHV3gbc+3QXvLiJumm2ImlpSW3FXl0altSvvbLrmhNyoz42vjd55+8Y9krO49oybVDOZ3QXXXtmjFqyb3RePGpyZSUFHk05zekO5IpKQHw+1rfKinV62csCUVy6U/OBFx1TWQisAIYjwFIgcUYpQSgFZg14/7QU7lyIyeNmFXXrPECjwHjAXsVYEoK68+mGFi66ppId2OwWSNHrVAxgR/nxrbjeIHf58q46wK2vX1z3LabZabl6i3MwRsohwEV7tvNKsXYQ3yu476AkvJjX3B/IycPZd6NxBQshpWTh3JAwAJnQMACJzdDacUF1mnvCTlaaeGqgMdcv+T4h7avvHXS1sWOly2aSvY0r4rHg8OTwp+POumsiTcurn1v8SVPOllud7giYKW5aKwgCzxF1mUb6g/h3lsOwfA4HoKSs4H55J5mJs4ef+jk8Q3/CJrhS1FuqVtSnb7ELStk9aIrzUVDBLkWuBE4AEDUoqRIEUOzExiRA6RIEfl2Ndt0hBODZvgRYGFdTfW2bNrOWiMmaIbPFmQdsJA28fahn4i3l7TLKQWuBjYEzfDVlXPDvQl57BWOCxg0w8cEzfBK7JmGiU6XX2AcDNwvwutBMzw9GwYcq0IrzUUHCTIfe+vGrD1xBcoUYFXQDP8TuLmupnqTUwVnLOCUuYuKDJHLgZuAQOYu9WvOBWYEzXCNIvesr7lxR6YFZlSFBs3wdENkDfAgA+L1lKHAAkE3BM3wxdE18YxaA316A4NmeDxwKzA7E+Pfcw4Dlp29YtmclFG6YOO9c1/vSyG9ErDSXDxC0BssPNcapPbfj2yAvnCix2p+LWiGl4HeWVczr743J/e4Cg2a4VmCvgEsGBDPcTzAZSAbg2Z4fqW5qMcR6N0KGDTDxwXN8EvYMSzOBZH2s+FQhy7nAGChIOuCZvjsnpzQaRUaNMOjgZuBX2M/IY5gqdCSFMSTYRdU1blHQKTPDQkBkknBcnZr9InAiqAZfg64pa6m+p3OMu4nYOXccKkIVwHV2B1Rx2hJGkwcv5sLbv8m47KKrN07RVMZzwGoeDwpY/DQTAb2hnia+Ni3m09aHHzSbc4ApgfN8IOqLFy/pDqenmEfAYNm+HTs1mX6XtSOoBYcOLyZn1XWs+/ec31Bhjnhk82ODM9voTnVzEeWOC0g2IMipgjnBs3wXZbqoxuWzPt25qUIIGguqgD5A3ZHM/u0Cvk1l5zpwKy4cTkB4EFD5KLg3LC5d7bDqDQXjQV5EbfEGyBTjkNYXWmGTwAwBFmMk63LAdxgqMA9lXPDpQYwI9feDNAnJoswwQAGu2m1AR/KIPpbR3AHB2G4e00eYIgBfOiexVa+IsBORgF5v5KshygphvK5HN59Vmf5Cqg3gD+7ZVGw2Mko3pWT3TLpAi1slmOIcSQeXN0P4em6muptxtMz5zyAPUzmCh5aqTVm0Ygf+zOAhUwzKYbyknEFKYoR975U94miNwEYganlqsrluCSiYLGD0TzmWfydiGLZ/ahC+RMLaEYZxDPGb9nCJIrcexjfA36+vmbeF5C2Qjdohq/AHolxdAitI5KUMoZ3ONl6iBE736eE5tYij5X3r2QyZZS2UFq8Z3CA1cVXsYmQW+KlgAcVubn9TP5+S6zbBrGvU/FcLJryZdMjC09DidH6wlfL76774JUPZyWTMkmEZnIW59w1qgwxDOIHV5T99Yfz7xrRXDzqzGzfI+x78Txwd11N9dr0g52ukW8TciZwIfY2jk4FKn0F1AErFV25vmbeZ2BvG1lcxHXA9ZZK+scZ8wJDdIVlccuYE3wfwLeBXDOw79NPcLbm+gR4DniirqZ6Y2eZerTJQdAMT8BewHgCMAnwY38dpbux251AHPvDG28Da4ANXQW7RiPxw0XkduCCbh1zjzdVtcuNYtvEnIx9n4LY3yksx46B6Y699+l9YG3KKI0Y1p631tfMa+ruxF7vUtEWhVaO/bT5gAOBYdgD40lgN/Zbth1IKLqtJ46kE43ETxKRO4Fje3uug2xTZSHow73dqrktKn009j06GBgFDOK7xa2NwJcpozTusZq/6Ot9yusPf8TWxIuKi7m0NSU3AZ1+mTML7AEeVtVFgVD55y7a7TV5s9VWR5RVeC3vod4NDfW7louIB5hM9pdnr1RldiDkW1ZW4d2ZZVsZk0+Tcp0SCJXH/VW+G1Q5Fng2S2beB87xV/lOD4R8b3WbO08oCAH3Egj53vVX+c5SOBPoNE6kl2wH5qnqsf4q3wqHynSNghJwL4Eq33Nq6XHADbT77FwvSQF/UdUp/ipfuFC/Yp3Xv4FdUVbhTZaN8a795rOmJ4DBIkym5zFFr6rqRYFQ+QNlFd7MI6xySEG+ge05dKovFgj5rgKmAi92k30Tyiy1dFogVN6nUPZ8Iy/2C3UCf5VvHTA9VpuYCVyEPdCQwn4rU8ALqvpIIFS+I3deOs//AZb84smmUsyHAAAAAElFTkSuQmCC",protocol:"uniswap_v2",slippage:!0,blockchains:["gnosis"],gnosis:{router:{address:"0x1C232F01118CB8B424793ae03F870aa7D0ac7f77",api:kx.ROUTER},factory:{address:"0xA818b4F111Ccac7AA31D0BCc0806d64F2E0737D7",api:kx.FACTORY},pair:{api:kx.PAIR}}};var xx=t=>new bx(Object.assign(Lx,{scope:t,findPath:t=>kx.findPath({...t,exchange:Lx}),pathExists:t=>kx.pathExists({...t,exchange:Lx}),getAmounts:t=>kx.getAmounts({...t,exchange:Lx}),getPrep:t=>kx.getPrep({...t,exchange:Lx}),getTransaction:t=>kx.getTransaction({...t,exchange:Lx})}));const Sx="79226673515401279992447579055",jx=t=>-t;class Cx{static priceToSqrtPriceX64(t,e,n){return r=t.mul(hx.pow(10,n-e)).sqrt(),new rp(r.mul(hx.pow(2,64)).floor().toFixed());var r}static sqrtPriceX64ToPrice(t,e,n){return(r=t,new hx(r.toString()).mul(hx.pow(2,-64))).pow(2).mul(hx.pow(10,e-n));var r}static tickIndexToSqrtPriceX64(t){return new rp(t>0?function(t){let e;e=new rp(0!=(1&t)?"79232123823359799118286999567":"79228162514264337593543950336");0!=(2&t)&&(e=Dx(e.mul(new rp("79236085330515764027303304731")),96,256));0!=(4&t)&&(e=Dx(e.mul(new rp("79244008939048815603706035061")),96,256));0!=(8&t)&&(e=Dx(e.mul(new rp("79259858533276714757314932305")),96,256));0!=(16&t)&&(e=Dx(e.mul(new rp("79291567232598584799939703904")),96,256));0!=(32&t)&&(e=Dx(e.mul(new rp("79355022692464371645785046466")),96,256));0!=(64&t)&&(e=Dx(e.mul(new rp("79482085999252804386437311141")),96,256));0!=(128&t)&&(e=Dx(e.mul(new rp("79736823300114093921829183326")),96,256));0!=(256&t)&&(e=Dx(e.mul(new rp("80248749790819932309965073892")),96,256));0!=(512&t)&&(e=Dx(e.mul(new rp("81282483887344747381513967011")),96,256));0!=(1024&t)&&(e=Dx(e.mul(new rp("83390072131320151908154831281")),96,256));0!=(2048&t)&&(e=Dx(e.mul(new rp("87770609709833776024991924138")),96,256));0!=(4096&t)&&(e=Dx(e.mul(new rp("97234110755111693312479820773")),96,256));0!=(8192&t)&&(e=Dx(e.mul(new rp("119332217159966728226237229890")),96,256));0!=(16384&t)&&(e=Dx(e.mul(new rp("179736315981702064433883588727")),96,256));0!=(32768&t)&&(e=Dx(e.mul(new rp("407748233172238350107850275304")),96,256));0!=(65536&t)&&(e=Dx(e.mul(new rp("2098478828474011932436660412517")),96,256));0!=(131072&t)&&(e=Dx(e.mul(new rp("55581415166113811149459800483533")),96,256));0!=(262144&t)&&(e=Dx(e.mul(new rp("38992368544603139932233054999993551")),96,256));return Dx(e,32,256)}(t):function(t){let e,n=Math.abs(t);e=new rp(0!=(1&n)?"18445821805675392311":"18446744073709551616");0!=(2&n)&&(e=Dx(e.mul(new rp("18444899583751176498")),64,256));0!=(4&n)&&(e=Dx(e.mul(new rp("18443055278223354162")),64,256));0!=(8&n)&&(e=Dx(e.mul(new rp("18439367220385604838")),64,256));0!=(16&n)&&(e=Dx(e.mul(new rp("18431993317065449817")),64,256));0!=(32&n)&&(e=Dx(e.mul(new rp("18417254355718160513")),64,256));0!=(64&n)&&(e=Dx(e.mul(new rp("18387811781193591352")),64,256));0!=(128&n)&&(e=Dx(e.mul(new rp("18329067761203520168")),64,256));0!=(256&n)&&(e=Dx(e.mul(new rp("18212142134806087854")),64,256));0!=(512&n)&&(e=Dx(e.mul(new rp("17980523815641551639")),64,256));0!=(1024&n)&&(e=Dx(e.mul(new rp("17526086738831147013")),64,256));0!=(2048&n)&&(e=Dx(e.mul(new rp("16651378430235024244")),64,256));0!=(4096&n)&&(e=Dx(e.mul(new rp("15030750278693429944")),64,256));0!=(8192&n)&&(e=Dx(e.mul(new rp("12247334978882834399")),64,256));0!=(16384&n)&&(e=Dx(e.mul(new rp("8131365268884726200")),64,256));0!=(32768&n)&&(e=Dx(e.mul(new rp("3584323654723342297")),64,256));0!=(65536&n)&&(e=Dx(e.mul(new rp("696457651847595233")),64,256));0!=(131072&n)&&(e=Dx(e.mul(new rp("26294789957452057")),64,256));0!=(262144&n)&&(e=Dx(e.mul(new rp("37481735321082")),64,256));return e}(t))}static sqrtPriceX64ToTickIndex(t){if(t.gt(new rp(Sx))||t.lt(new rp("4295048016")))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");const e=t.bitLength()-1,n=function(t,e,n){let r=t.toTwos(n).shln(e);return r.imaskn(n+1),r.fromTwos(n)}(new rp(e-64),32,128);let r=new rp("8000000000000000","hex"),i=0,o=new rp(0),a=e>=64?t.shrn(e-63):t.shln(63-e);for(;r.gt(new rp(0))&&i<14;){a=a.mul(a);let t=a.shrn(127);a=a.shrn(63+t.toNumber()),o=o.add(r.mul(t)),r=r.shrn(1),i+=1}const s=o.shrn(32),u=n.add(s).mul(new rp("59543866431248")),c=Dx(u.sub(new rp("184467440737095516")),64,128).toNumber(),l=Dx(u.add(new rp("15793534762490258745")),64,128).toNumber();if(c==l)return c;return Cx.tickIndexToSqrtPriceX64(l).lte(t)?l:c}static tickIndexToPrice(t,e,n){return Cx.sqrtPriceX64ToPrice(Cx.tickIndexToSqrtPriceX64(t),e,n)}static priceToTickIndex(t,e,n){return Cx.sqrtPriceX64ToTickIndex(Cx.priceToSqrtPriceX64(t,e,n))}static priceToInitializableTickIndex(t,e,n,r){return((t,e)=>t-t%e)(Cx.priceToTickIndex(t,e,n),r)}static invertPrice(t,e,n){const r=Cx.priceToTickIndex(t,e,n),i=jx(r);return Cx.tickIndexToPrice(i,n,e)}static invertSqrtPriceX64(t){const e=Cx.sqrtPriceX64ToTickIndex(t),n=jx(e);return Cx.tickIndexToSqrtPriceX64(n)}}function Dx(t,e,n){let r=t.toTwos(n).shrn(e);return r.imaskn(n-e+1),r.fromTwos(n-e)}const Ox=new rp(1e4),zx=new rp(1e6),_x=new rp(0),Px=new rp(1),Bx=new rp(2),Rx=Bx.pow(new rp(64)).sub(Px);class Ux extends rp{toBuffer(){const t=super.toArray().reverse(),e=buffer.Buffer.from(t);if(8===e.length)return e;assert__default.default(e.length<8,"u64 too large");const n=buffer.Buffer.alloc(8);return e.copy(n),n}static fromBuffer(t){return assert__default.default(8===t.length,`Invalid buffer length: ${t.length}`),new Ux([...t].reverse().map((t=>`00${t.toString(16)}`.slice(-2))).join(""),16)}}class Wx{static mul(t,e,n){const r=t.mul(e);if(this.isOverLimit(r,n))throw new Error(`Mul result higher than u${n}`);return r}static mulDiv(t,e,n,r){return this.mulDivRoundUpIf(t,e,n,!1,r)}static mulDivRoundUp(t,e,n,r){return this.mulDivRoundUpIf(t,e,n,!0,r)}static mulDivRoundUpIf(t,e,n,r,i){if(n.eq(_x))throw new Error("mulDiv denominator is zero");const o=this.mul(t,e,i),a=o.div(n);return r&&o.mod(n).gt(_x)?a.add(Px):a}static checked_mul_shift_right(t,e,n){return this.checked_mul_shift_right_round_up_if(t,e,!1,n)}static checked_mul_shift_right_round_up_if(t,e,n,r){if(t.eq(_x)||e.eq(_x))return _x;const i=this.mul(t,e,r);if(this.isOverLimit(i,r))throw new Error(`MulShiftRight overflowed u${r}.`);const o=i.div(new rp(2).pow(new rp(64)));const a=n&&o.and(Rx).gt(_x);if(a&&o.eq(Rx))throw new Error(`MulShiftRight overflowed u${r}.`);return a?o.add(Px):o}static isOverLimit(t,e){const n=Bx.pow(new rp(e)).sub(Px);return t.gt(n)}static divRoundUp(t,e){return this.divRoundUpIf(t,e,!0)}static divRoundUpIf(t,e,n){if(e.eq(_x))throw new Error("divRoundUpIf - divide by zero");let r=t.div(e);return n&&t.mod(e).gt(_x)?r.add(Px):r}}const Qx=(t,e,n)=>{const r=Cx.tickIndexToSqrtPriceX64(t);return{nextTickPrice:r,nextSqrtPriceLimit:n?rp.max(e,r):rp.min(e,r)}},Yx=(t,e)=>t.gt(e)?[e,t]:[t,e],Fx=(t,e,n,r)=>{let[i,o]=Yx(t,e),a=o.sub(i),s=n.mul(a).shln(64),u=i.mul(o),c=s.div(u),l=s.mod(u),h=r&&!l.eq(_x)?c.add(Px):c;if(h.gt(Rx))throw new Error("Results larger than U64");return h},Vx=(t,e,n,r)=>{let[i,o]=Yx(t,e),a=o.sub(i);return Wx.checked_mul_shift_right_round_up_if(n,a,r,128)},Hx=(t,e,n,r,i)=>r===i?((t,e,n,r)=>{if(n.eq(_x))return t;let i=Wx.mul(t,n,256),o=Wx.mul(e,t,256).shln(64);if(Wx.isOverLimit(o,256))throw new Error("getNextSqrtPriceFromARoundUp - numerator overflow u256");let a=e.shln(64);if(!r&&a.lte(i))throw new Error("getNextSqrtPriceFromARoundUp - Unable to divide currLiquidityX64 by product");let s=r?a.add(i):a.sub(i),u=Wx.divRoundUp(o,s);if(u.lt(new rp("4295048016")))throw new Error("getNextSqrtPriceFromARoundUp - price less than min sqrt price");if(u.gt(new rp(Sx)))throw new Error("getNextSqrtPriceFromARoundUp - price less than max sqrt price");return u})(t,e,n,r):((t,e,n,r)=>{let i=n.shln(64),o=Wx.divRoundUpIf(i,e,!r);return r?t.add(o):t.sub(o)})(t,e,n,r),Gx=(t,e,n,r,i)=>i===r?Fx(t,e,n,r):Vx(t,e,n,r),qx=(t,e,n,r,i,o,a)=>{let s=Gx(r,i,n,o,a),u=t;if(o){u=Wx.mulDiv(t,zx.sub(new rp(e)),zx,128)}let c=u.gte(s)?i:Hx(r,n,u,o,a),l=c.eq(i),h=((t,e,n,r,i)=>i===r?Vx(t,e,n,!r):Fx(t,e,n,!r))(r,c,n,o,a);l||(s=Gx(r,c,n,o,a));let d,p=o?s:h,f=o?h:s;if(!o&&f.gt(t)&&(f=t),o&&!l)d=t.sub(p);else{const t=new rp(e);d=Wx.mulDivRoundUp(p,t,zx.sub(t),128)}return{amountIn:p,amountOut:f,nextPrice:c,feeAmount:d}},Zx=(t,e,n)=>n?e.sub(t):e.add(t),Jx=(t,e,n,r,i)=>{let o=r,a=i,s=t;if(e>0){let t=((t,e)=>t.mul(new Ux(e).div(Ox)))(s,e);s=s.sub(t),o=o.add(r)}if(n.gt(_x)){const t=s.shln(64).div(n);a=a.add(t)}return{nextProtocolFee:o,nextFeeGrowthGlobalInput:a}},Xx=pp([lp("mint"),lp("vault"),lp("authority"),fp("emissionsPerSecondX64"),fp("growthGlobalX64")]),Kx=pp([gp("anchorDiscriminator"),lp("whirlpoolsConfig"),Kd(vp(),1,"whirlpoolBump"),mp("tickSpacing"),Kd(vp(),2,"tickSpacingSeed"),mp("feeRate"),mp("protocolFeeRate"),fp("liquidity"),fp("sqrtPrice"),sp("tickCurrentIndex"),gp("protocolFeeOwedA"),gp("protocolFeeOwedB"),lp("tokenMintA"),lp("tokenVaultA"),fp("feeGrowthGlobalA"),lp("tokenMintB"),lp("tokenVaultB"),fp("feeGrowthGlobalB"),gp("rewardLastUpdatedTimestamp"),Kd(Xx,3,"rewardInfos")]),$x=pp([op("initialized"),ap("liquidityNet"),fp("liquidityGross"),fp("feeGrowthOutsideA"),fp("feeGrowthOutsideB"),Kd(fp(),3,"reward_growths_outside")]),tS=pp([gp("anchorDiscriminator"),sp("startTickIndex"),Kd($x,88,"ticks"),lp("whirlpool")]),eS=(t,e,n)=>{const r=(Math.floor(t/e/88)+n)*e*88,i=88*e;if(r<-443636-(-443636%i+i))throw`startTickIndex is too small - - ${r}`;if(r>443636)throw`startTickIndex is too large - ${r}`;return r},nS=async({pool:t,freshWhirlpoolData:e,aToB:n})=>{const r=await(async({aToB:t,pool:e,tickSpacing:n,tickCurrentIndex:r})=>{const i=t?0:n;let o=0,a=[];for(let s=0;s<3;s++){let s;try{s=eS(r+i,n,o)}catch(t){return a}const u=(await Xs.findProgramAddress([np.from("tick_array"),new Xs(e.toString()).toBuffer(),np.from(s.toString())],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0];a.push(u),o=t?o-1:o+1}return a})({aToB:n,pool:t,tickSpacing:e.tickSpacing,tickCurrentIndex:e.tickCurrentIndex});return await Promise.all(r.map((async(t,e)=>{let n;try{n=await _E({blockchain:"solana",address:t.toString(),api:tS,cache:10})}catch(t){}return{address:t,data:n}})))};class rS{static fromTickIndex(t,e){const n=Math.floor(Math.floor(t/e)/88);let r=Math.floor(t%(88*e)/e);return r<0&&(r=88+r),new rS(n,r,e)}constructor(t,e,n){if(e>=88)throw new Error("Invalid offsetIndex - value has to be smaller than TICK_ARRAY_SIZE");if(e<0)throw new Error("Invalid offsetIndex - value is smaller than 0");if(n<0)throw new Error("Invalid tickSpacing - value is less than 0");this.arrayIndex=t,this.offsetIndex=e,this.tickSpacing=n}toTickIndex(){return 88*this.arrayIndex*this.tickSpacing+this.offsetIndex*this.tickSpacing}toNextInitializableTickIndex(){return rS.fromTickIndex(this.toTickIndex()+this.tickSpacing,this.tickSpacing)}toPrevInitializableTickIndex(){return rS.fromTickIndex(this.toTickIndex()-this.tickSpacing,this.tickSpacing)}}class iS{constructor(t,e,n){if(!t[0]||!t[0].data)throw new Error("TickArray index 0 must be initialized");this.sequence=[];for(const e of t){if(!e||!e.data)break;this.sequence.push({address:e.address,data:e.data})}this.tickArrays=t,this.tickSpacing=e,this.aToB=n,this.touchedArrays=[...Array(this.sequence.length).fill(!1)],this.startArrayIndex=rS.fromTickIndex(this.sequence[0].data.startTickIndex,this.tickSpacing).arrayIndex}isValidTickArray0(t){const e=this.aToB?0:this.tickSpacing,n=this.sequence[0].data;return this.checkIfIndexIsInTickArrayRange(n.startTickIndex,t+e)}getNumOfTouchedArrays(){return this.touchedArrays.filter((t=>!!t)).length}getTouchedArrays(t){let e=this.touchedArrays.reduce(((t,e,n)=>(e&&t.push(this.sequence[n].address),t)),[]);if(0===e.length)return[];const n=t-e.length;return n>0&&(e=e.concat(Array(n).fill(e[e.length-1]))),e}getTick(t){const e=rS.fromTickIndex(t,this.tickSpacing);if(!this.isArrayIndexInBounds(e,this.aToB))throw new Error("Provided tick index is out of bounds for this sequence.");const n=this.getLocalArrayIndex(e.arrayIndex,this.aToB),r=this.sequence[n].data;if(this.touchedArrays[n]=!0,!r)throw new Error(`TickArray at index ${n} is not initialized.`);if(!this.checkIfIndexIsInTickArrayRange(r.startTickIndex,t))throw new Error(`TickArray at index ${n} is unexpected for this sequence.`);return r.ticks[e.offsetIndex]}findNextInitializedTickIndex(t){const e=this.aToB?t:t+this.tickSpacing;let n=rS.fromTickIndex(e,this.tickSpacing);if(!this.isArrayIndexInBounds(n,this.aToB))throw new Error(`Swap input value traversed too many arrays. Out of bounds at attempt to traverse tick index - ${n.toTickIndex()}.`);for(;this.isArrayIndexInBounds(n,this.aToB);){const t=this.getTick(n.toTickIndex());if(t.initialized)return{nextIndex:n.toTickIndex(),nextTickData:t};n=this.aToB?n.toPrevInitializableTickIndex():n.toNextInitializableTickIndex()}return{nextIndex:Math.max(Math.min(this.aToB?n.toTickIndex()+this.tickSpacing:n.toTickIndex()-1,443636),-443636),nextTickData:null}}getLocalArrayIndex(t,e){return e?this.startArrayIndex-t:t-this.startArrayIndex}isArrayIndexInBounds(t,e){const n=this.getLocalArrayIndex(t.arrayIndex,e),r=this.sequence.length;return n>=0&&n=t&&e{try{const n=await _E({blockchain:"solana",address:t.pubkey.toString(),api:Kx,cache:10}),s=n.tokenMintA.toString()===e,u=await nS({pool:t.pubkey,freshWhirlpoolData:n,aToB:s}),c=new iS(u,n.tickSpacing,s),l=new rp(s?"4295048016":Sx),h=!(!r&&!i);return{price:(({tokenAmount:t,aToB:e,freshWhirlpoolData:n,tickSequence:r,sqrtPriceLimit:i,amountSpecifiedIsInput:o})=>{let a=t,s=_x,u=n.sqrtPrice,c=n.liquidity,l=n.tickCurrentIndex,h=_x;const d=n.feeRate,p=n.protocolFeeRate;let f=new Ux(0),m=e?n.feeGrowthGlobalA:n.feeGrowthGlobalB;for(;a.gt(_x)&&!i.eq(u);){let{nextIndex:t}=r.findNextInitializedTickIndex(l),{nextTickPrice:n,nextSqrtPriceLimit:y}=Qx(t,i,e);const g=qx(a,d,c,u,y,o,e);h=h.add(g.feeAmount),o?(a=a.sub(g.amountIn),a=a.sub(g.feeAmount),s=s.add(g.amountOut)):(a=a.sub(g.amountOut),s=s.add(g.amountIn),s=s.add(g.feeAmount));let{nextProtocolFee:v,nextFeeGrowthGlobalInput:w}=Jx(g.feeAmount,p,c,f,m);if(f=v,m=w,g.nextPrice.eq(n)){const n=r.getTick(t);n.initialized&&(c=Zx(n.liquidityNet,c,e)),l=e?t-1:t}else l=Cx.sqrtPriceX64ToTickIndex(g.nextPrice);u=g.nextPrice}return s})({tokenAmount:new rp((r||i||o||a).toString()),aToB:s,freshWhirlpoolData:n,tickSequence:c,sqrtPriceLimit:l,amountSpecifiedIsInput:h}).toString(),tickArrays:u,aToB:s,sqrtPriceLimit:l}}catch(t){return{price:void 0,tickArrays:void 0,aToB:void 0,sqrtPriceLimit:void 0}}};let aS=async(t,e)=>await _E("solana://whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc/getProgramAccounts",{params:{filters:[{dataSize:Kx.span},{memcmp:{offset:8,bytes:"2LecshUwdy9xi7meFgHtFJQNSKk4KdTrcpvaB56dP2NQ"}},{memcmp:{offset:101,bytes:t}},{memcmp:{offset:181,bytes:e}}]},api:Kx,cache:86400,cacheKey:["whirlpool",t.toString(),e.toString()].join("-")}),sS=async({tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o})=>{try{let a=await aS(t,e);return 0===a.length&&(a=await aS(e,t)),a=a.filter((t=>t.data.liquidity.gt(1))),a=(await Promise.all(a.map((async a=>{const{price:s,tickArrays:u,sqrtPriceLimit:c,aToB:l}=await oS({account:a,tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o});return void 0!==s&&{pubkey:a.pubkey,price:s,tickArrays:u,sqrtPriceLimit:c,aToB:l,data:{tokenVaultA:a.data.tokenVaultA,tokenVaultB:a.data.tokenVaultB}}})))).filter(Boolean),a}catch(t){return[]}},uS=async({tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o})=>{const a=await sS({tokenIn:t,tokenOut:e,amountIn:n,amountInMax:r,amountOut:i,amountOutMin:o});if(!a||0===a.length)return;let s;return s=n||r?(t=>t.reduce(((t,e)=>Ff.from(e.price).gt(Ff.from(t.price))?e:t)))(a):(t=>t.reduce(((t,e)=>Ff.from(e.price).lt(Ff.from(t.price))?e:t)))(a),s};function cS(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const lS=Vp.solana;let hS=({path:t})=>{if(!t)return;let e=t.map(((e,n)=>e===lS.currency.address&&t[n+1]!=lS.wrapped.address&&t[n-1]!=lS.wrapped.address?lS.wrapped.address:e));return e[0]==lS.currency.address&&e[1]==lS.wrapped.address?e.splice(0,1):e[e.length-1]==lS.currency.address&&e[e.length-2]==lS.wrapped.address&&e.splice(e.length-1,1),e},dS=async({path:t,amountIn:e,amountInMax:n,amountOut:r,amountOutMin:i})=>1!=t.length&&(t=hS({path:t}),(await sS({tokenIn:t[0],tokenOut:t[1],amountIn:e,amountInMax:n,amountOut:r,amountOutMin:i})).length>0),pS=async({path:t,amountIn:e,amountInMax:n})=>{let r=[Ff.from(e||n)];if(r.push(Ff.from((await uS({tokenIn:t[0],tokenOut:t[1],amountIn:e,amountInMax:n})).price)),3===t.length&&r.push(Ff.from((await uS({tokenIn:t[1],tokenOut:t[2],amountIn:e?r[1]:void 0,amountInMax:n?r[1]:void 0})).price)),r.length==t.length)return r},fS=async({path:t,amountOut:e,amountOutMin:n})=>{t=t.slice().reverse();let r=[Ff.from(e||n)];if(r.push(Ff.from((await uS({tokenIn:t[1],tokenOut:t[0],amountOut:e,amountOutMin:n})).price)),3===t.length&&r.push(Ff.from((await uS({tokenIn:t[2],tokenOut:t[1],amountOut:e?r[1]:void 0,amountOutMin:n?r[1]:void 0})).price)),r.length==t.length)return r.slice().reverse()};const mS=Vp.solana,yS=new rp("14449647541112719096"),gS=new rp("16635068063392030915"),vS=async({instructions:t,owner:e,token:n,account:r})=>{let i;try{i=!!await _E({blockchain:"solana",address:r.toString()})}catch(t){}i||t.push(await Tk.solana.createAssociatedTokenAccountInstruction({token:n,owner:e,payer:e}))},wS=async({account:t,poolOne:e,tickArraysOne:n,tokenAccountOneA:r,tokenVaultOneA:i,tokenAccountOneB:o,tokenVaultOneB:a,poolTwo:s,tickArraysTwo:u,tokenAccountTwoA:c,tokenVaultTwoA:l,tokenAccountTwoB:h,tokenVaultTwoB:d})=>{let p=!1;const f=n.map(((t,e)=>!1!==p?n[p]:t.data?t:(p=e-1,n[e-1])));let m=!1;const y=u.map(((t,e)=>!1!==m?u[m]:t.data?t:(m=e-1,u[e-1])));return[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isWritable:!1,isSigner:!1},{pubkey:new Xs(t),isWritable:!1,isSigner:!0},{pubkey:new Xs(e.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(s.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(r.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(i.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(o.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(a.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(c.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(l.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(h.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(d.toString()),isWritable:!0,isSigner:!1},{pubkey:f[0].address,isWritable:!0,isSigner:!1},{pubkey:f[1].address,isWritable:!0,isSigner:!1},{pubkey:f[2].address,isWritable:!0,isSigner:!1},{pubkey:y[0].address,isWritable:!0,isSigner:!1},{pubkey:y[1].address,isWritable:!0,isSigner:!1},{pubkey:y[2].address,isWritable:!0,isSigner:!1},{pubkey:(await Xs.findProgramAddress([np.from("oracle"),new Xs(e.toString()).toBuffer()],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0],isWritable:!1,isSigner:!1},{pubkey:(await Xs.findProgramAddress([np.from("oracle"),new Xs(s.toString()).toBuffer()],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0],isWritable:!1,isSigner:!1}]},bS=({amount:t,otherAmountThreshold:e,amountSpecifiedIsInput:n,aToBOne:r,aToBTwo:i,sqrtPriceLimitOne:o,sqrtPriceLimitTwo:a})=>{let s,u;return s=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),op("amountSpecifiedIsInput"),op("aToBOne"),op("aToBTwo"),fp("sqrtPriceLimitOne"),fp("sqrtPriceLimitTwo")]),u=np.alloc(s.span),s.encode({anchorDiscriminator:gS,amount:new rp(t.toString()),otherAmountThreshold:new rp(e.toString()),amountSpecifiedIsInput:n,aToBOne:r,aToBTwo:i,sqrtPriceLimitOne:o,sqrtPriceLimitTwo:a},u),u},MS=async({account:t,pool:e,tokenAccountA:n,tokenVaultA:r,tokenAccountB:i,tokenVaultB:o,tickArrays:a})=>{let s=!1;const u=a.map(((t,e)=>!1!==s?a[s]:t.data?t:(s=e-1,a[e-1])));return[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isWritable:!1,isSigner:!1},{pubkey:new Xs(t),isWritable:!1,isSigner:!0},{pubkey:new Xs(e.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(n.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(r.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(i.toString()),isWritable:!0,isSigner:!1},{pubkey:new Xs(o.toString()),isWritable:!0,isSigner:!1},{pubkey:u[0].address,isWritable:!0,isSigner:!1},{pubkey:u[1].address,isWritable:!0,isSigner:!1},{pubkey:u[2].address,isWritable:!0,isSigner:!1},{pubkey:(await Xs.findProgramAddress([np.from("oracle"),new Xs(e.toString()).toBuffer()],new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc")))[0],isWritable:!1,isSigner:!1}]},AS=({amount:t,otherAmountThreshold:e,sqrtPriceLimit:n,amountSpecifiedIsInput:r,aToB:i})=>{let o,a;return o=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),fp("sqrtPriceLimit"),op("amountSpecifiedIsInput"),op("aToB")]),a=np.alloc(o.span),o.encode({anchorDiscriminator:yS,amount:new rp(t.toString()),otherAmountThreshold:new rp(e.toString()),sqrtPriceLimit:n,amountSpecifiedIsInput:r,aToB:i},a),a};var ES={findPath:async({tokenIn:t,tokenOut:e,amountIn:n,amountOut:r,amountInMax:i,amountOutMin:o})=>{if([t,e].includes(lS.currency.address)&&[t,e].includes(lS.wrapped.address))return{path:void 0,exchangePath:void 0};let a,s,u,c;return await dS({path:[t,e],amountIn:n,amountInMax:i,amountOut:r,amountOutMin:o})?a=[t,e]:t!=lS.wrapped.address&&t!=lS.currency.address&&await dS({path:[t,lS.wrapped.address],amountIn:n,amountInMax:i,amountOut:r,amountOutMin:o})&&e!=lS.wrapped.address&&e!=lS.currency.address&&await dS({path:[e,lS.wrapped.address],amountIn:r||o,amountInMax:r||o,amountOut:n||i,amountOutMin:n||i})?a=[t,lS.wrapped.address,e]:!lS.stables.usd.includes(t)&&(s=(await Promise.all(lS.stables.usd.map((async e=>await dS({path:[t,e],amountIn:n,amountInMax:i,amountOut:r,amountOutMin:o})?e:void 0)))).filter(Boolean))&&!lS.stables.usd.includes(e)&&(u=(await Promise.all(lS.stables.usd.map((async t=>await dS({path:[e,t],amountIn:r||o,amountInMax:r||o,amountOut:n||i,amountOutMin:n||i})?t:void 0)))).filter(Boolean))&&(c=s.filter((t=>u.includes(t)))[0])&&(a=[t,c,e]),cS([a,"optionalAccess",t=>t.length])&&a[0]==lS.currency.address?a.splice(1,0,lS.wrapped.address):cS([a,"optionalAccess",t=>t.length])&&a[a.length-1]==lS.currency.address&&a.splice(a.length-1,0,lS.wrapped.address),{path:a,exchangePath:hS({path:a})}},pathExists:dS,getAmounts:async({path:t,tokenIn:e,tokenOut:n,amountOut:r,amountIn:i,amountInMax:o,amountOutMin:a})=>{let s;if(t=hS({path:t}),r){if(s=await fS({path:t,amountOut:r,tokenIn:e,tokenOut:n}),null==(i=s?s[0]:void 0)||o&&i.gt(o))return{};void 0===o&&(o=i)}else if(i){if(s=await pS({path:t,amountIn:i,tokenIn:e,tokenOut:n}),null==(r=s?s[s.length-1]:void 0)||a&&r.lt(a))return{};void 0===a&&(a=r)}else if(a){if(s=await fS({path:t,amountOutMin:a,tokenIn:e,tokenOut:n}),null==(i=s?s[0]:void 0)||o&&i.gt(o))return{};void 0===o&&(o=i)}else if(o){if(s=await pS({path:t,amountInMax:o,tokenIn:e,tokenOut:n}),null==(r=s?s[s.length-1]:void 0)||a&&r.lt(a))return{};void 0===a&&(a=r)}return{amountOut:r||a,amountIn:i||o,amountInMax:o||i,amountOutMin:a||r,amounts:s}},getTransaction:async({path:t,amountIn:e,amountInMax:n,amountOut:r,amountOutMin:i,amounts:o,amountInInput:a,amountOutInput:s,amountInMaxInput:u,amountOutMinInput:c,account:l})=>{let h={blockchain:"solana"},d=[];const p=hS({path:t});if(p.length>3)throw"Orca can only handle fixed paths with a max length of 3 (2 pools)!";const f=p[0],m=3==p.length?p[1]:void 0,y=p[p.length-1];let g;2==p.length?g=[await uS({tokenIn:f,tokenOut:y,amountIn:a||u,amountOut:s||c})]:a||u?(g=[await uS({tokenIn:f,tokenOut:m,amountIn:a||u})],g.push(await uS({tokenIn:m,tokenOut:y,amountIn:g[0].price}))):(g=[await uS({tokenIn:m,tokenOut:y,amountOut:s||c})],g.unshift(await uS({tokenIn:f,tokenOut:m,amountOut:g[0].price})));let v,w=t[0]===mS.currency.address&&p[0]===mS.wrapped.address,b=t[t.length-1]===mS.currency.address&&p[p.length-1]===mS.wrapped.address;const M=await xE("solana");if(w||b){const t=await M.getMinimumBalanceForRentExemption(Tk.solana.TOKEN_LAYOUT.span),n=Zl.generate();v=n.publicKey.toString();const r=w?new rp(e.toString()).add(new rp(t)):new rp(t);let i=Yu.createAccount({fromPubkey:new Xs(l),newAccountPubkey:new Xs(v),programId:new Xs(Tk.solana.TOKEN_PROGRAM),space:Tk.solana.TOKEN_LAYOUT.span,lamports:r});i.signers=[n],d.push(i),d.push(Tk.solana.initializeAccountInstruction({account:v,token:mS.wrapped.address,owner:l}))}if(1===g.length){let t=!(!a&&!c),o=t?e:r,s=t?i:n,u=new Xs(w?v:await Tk.solana.findProgramAddress({owner:l,token:f})),h=new Xs(b?v:await Tk.solana.findProgramAddress({owner:l,token:y}));b||await vS({instructions:d,owner:l,token:y,account:h}),d.push(new gu({programId:new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),keys:await MS({account:l,pool:g[0].pubkey,tokenAccountA:g[0].aToB?u:h,tokenVaultA:g[0].data.tokenVaultA,tokenAccountB:g[0].aToB?h:u,tokenVaultB:g[0].data.tokenVaultB,tickArrays:g[0].tickArrays}),data:AS({amount:o,otherAmountThreshold:s,sqrtPriceLimit:g[0].sqrtPriceLimit,amountSpecifiedIsInput:t,aToB:g[0].aToB})}))}else if(2===g.length){let t=!(!a&&!c),o=t?e:r,s=t?i:n,u=new Xs(w?v:await Tk.solana.findProgramAddress({owner:l,token:f})),h=p[1],m=new Xs(await Tk.solana.findProgramAddress({owner:l,token:h}));await vS({instructions:d,owner:l,token:h,account:m});let M=new Xs(b?v:await Tk.solana.findProgramAddress({owner:l,token:y}));b||await vS({instructions:d,owner:l,token:y,account:M}),d.push(new gu({programId:new Xs("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),keys:await wS({account:l,poolOne:g[0].pubkey,tickArraysOne:g[0].tickArrays,tokenAccountOneA:g[0].aToB?u:m,tokenVaultOneA:g[0].data.tokenVaultA,tokenAccountOneB:g[0].aToB?m:u,tokenVaultOneB:g[0].data.tokenVaultB,poolTwo:g[1].pubkey,tickArraysTwo:g[1].tickArrays,tokenAccountTwoA:g[1].aToB?m:M,tokenVaultTwoA:g[1].data.tokenVaultA,tokenAccountTwoB:g[1].aToB?M:m,tokenVaultTwoB:g[1].data.tokenVaultB}),data:bS({amount:o,otherAmountThreshold:s,amountSpecifiedIsInput:t,aToBOne:g[0].aToB,aToBTwo:g[1].aToB,sqrtPriceLimitOne:g[0].sqrtPriceLimit,sqrtPriceLimitTwo:g[1].sqrtPriceLimit})}))}return(w||b)&&d.push(Tk.solana.closeAccountInstruction({account:v,owner:l})),h.instructions=d,h},WHIRLPOOL_LAYOUT:Kx};const NS={name:"orca",label:"Orca",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI3LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9ImthdG1hbl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNjAwIDQ1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjAwIDQ1MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8cGF0aCBmaWxsPSIjRkZEMTVDIiBkPSJNNDg4LjQsMjIyLjljMCwxMDMuOC04NC4xLDE4Ny45LTE4Ny45LDE4Ny45Yy0xMDMuOCwwLTE4Ny45LTg0LjEtMTg3LjktMTg3LjlDMTEyLjYsMTE5LjEsMTk2LjcsMzUsMzAwLjUsMzUKCUM0MDQuMiwzNSw0ODguNCwxMTkuMSw0ODguNCwyMjIuOXoiLz4KPHBhdGggZmlsbD0iI0ZGRkZGRiIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjE3LjY3NTUiIGQ9Ik0yMDkuNSwyOTkuOGMxLjYtMS4xLDMuMS0yLjgsMy45LTUuMWMwLjgtMi42LDAuMy00LjksMC02LjJjMCwwLDAtMC4xLDAtMC4xbDAuMy0xLjhjMC45LDAuNSwxLjksMS4xLDMsMS45CgljMC4zLDAuMiwwLjcsMC41LDEuMSwwLjdjMC41LDAuNCwxLjEsMC44LDEuNCwxYzAuNiwwLjQsMS41LDEsMi41LDEuNWMyNS4xLDE1LjYsNDUuOCwyMiw2Mi4yLDIxLjJjMTctMC44LDI4LjktOS40LDM1LjEtMjEuOQoJYzUuOS0xMi4xLDYuMi0yNywyLTQwLjljLTQuMi0xMy45LTEzLTI3LjUtMjYuMi0zNi45Yy0yMi4yLTE1LjgtNDIuNS0zOS44LTUyLjctNjAuM2MtNS4yLTEwLjQtNy4zLTE4LjctNi43LTI0LjIKCWMwLjMtMi41LDEtNC4xLDItNS4xYzAuOS0xLDIuNi0yLjEsNS45LTIuNmM2LjktMS4xLDE1LTMuNiwyMy4xLTYuMmMzLjItMSw2LjMtMiw5LjUtMi45YzExLjctMy40LDI0LjItNi4zLDM3LjItNi4zCgljMjUuMywwLDU1LDExLDg2LjMsNTYuOGM0MC4yLDU4LjgsMTguMSwxMjQuNC0yOC4yLDE1OC45Yy0yMy4xLDE3LjItNTEuOSwyNi4zLTgxLjUsMjIuOUMyNjIuOSwzNDEuMywyMzQuOSwzMjcuOSwyMDkuNSwyOTkuOHoKCSBNMjE0LjIsMjg0LjZDMjE0LjIsMjg0LjYsMjE0LjIsMjg0LjcsMjE0LjIsMjg0LjZDMjE0LjEsMjg0LjcsMjE0LjIsMjg0LjYsMjE0LjIsMjg0LjZ6IE0yMTEuNiwyODUuOAoJQzIxMS42LDI4NS44LDIxMS43LDI4NS44LDIxMS42LDI4NS44QzIxMS43LDI4NS44LDIxMS42LDI4NS44LDIxMS42LDI4NS44eiIvPgo8cGF0aCBkPSJNMjMyLjUsMTI0LjNjMCwwLDcxLjgtMTkuMSw4Ny41LTE5LjFjMTUuNywwLDc4LjYsMzAuNSw5Ni45LDg2LjNjMjYsNzktNDQuNywxMzAuOS01Mi43LDEyNS44CgljNzYuMS02Mi45LTQ4LjQtMTc5LjEtMTA5LjYtMTcwLjRjLTcuNiwxLjEtMy40LDcuNi0zLjQsNy42bC0xLjcsMTdsLTEyLjctMjEuMkwyMzIuNSwxMjQuM3oiLz4KPHBhdGggZD0iTTQwNi41LDE2Ny42YzIyLjcsMzkuOSwxOCwxNy4xLDEyLjksNjIuN2M5LjMtMTUuMSwyMy45LTMuOCwyOS45LDJjMS4xLDEsMi45LDAuNCwyLjgtMS4xYy0wLjItNi44LTIuMi0yMS40LTEzLjQtMzcuMQoJQzQyMy40LDE3Mi42LDQwNi41LDE2Ny42LDQwNi41LDE2Ny42eiIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMC45OTMiIGQ9Ik00MTkuNCwyMzAuM2M1LTQ1LjYsOS43LTIyLjgtMTIuOS02Mi43YzAsMCwxNi45LDUsMzIuMywyNi41YzExLjIsMTUuNywxMy4xLDMwLjMsMTMuNCwzNy4xCgljMC4xLDEuNS0xLjcsMi4xLTIuOCwxLjFDNDQzLjMsMjI2LjUsNDI4LjcsMjE1LjMsNDE5LjQsMjMwLjN6IE00MTkuNCwyMzAuM2MwLjktMi4xLDIuMi01LjUsMi4yLTUuNSIvPgo8cGF0aCBkPSJNMjI0LDIyNC4yYy05LjYsMTYuMi0yOS4yLDE1LTI4LjgsMzQuM2MxNy41LDM5LDE3LjYsMzYuMiwxNy42LDM2LjJjMzIuNS0xOC4yLDE5LjEtNTguNSwxNC4zLTcwLjQKCUMyMjYuNiwyMjMsMjI0LjcsMjIzLDIyNCwyMjQuMnoiLz4KPHBhdGggZD0iTTE1MC40LDI2MC4xYzE4LjcsMi40LDI5LjgtMTMuOCw0NC44LTEuNmMxOS45LDM3LjgsMTcuNiwzNi4yLDE3LjYsMzYuMmMtMzQuNCwxNC40LTU3LjktMjEtNjQuMy0zMi4xCglDMTQ3LjgsMjYxLjMsMTQ5LDI1OS45LDE1MC40LDI2MC4xeiIvPgo8cGF0aCBkPSJNMzA2LjksMjM2YzAsMCwxOC43LDE5LjEsOC45LDIyLjFjLTEyLjItNy41LTM0LTEuNy00NC43LDEuOWMtMi42LDAuOS01LjItMS40LTQuMy00LjFjMy42LTEwLDEyLjYtMjguNiwyOS45LTMxCglDMzA2LjksMjIyLjQsMzA2LjksMjM2LDMwNi45LDIzNnoiLz4KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTMxOC4zLDE0Mi41Yy0yLjEtMy02LjQtMTEsNi44LTExYzEzLjIsMCwzMy4zLDE0LjksMzcuNCwyMC40Yy0xLjMsMy40LTkuOCw0LjEtMTQsMy44Yy00LjItMC4zLTExLjUtMS0xNy0zLjgKCUMzMjYsMTQ5LjIsMzIwLjUsMTQ1LjUsMzE4LjMsMTQyLjV6Ii8+Cjwvc3ZnPgo=",protocol:"orca",slippage:!0,blockchains:["solana"],solana:{router:{address:"whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc",api:ES.WHIRLPOOL_LAYOUT}}};var TS=t=>new bx(Object.assign(NS,{scope:t,findPath:t=>ES.findPath({...t,exchange:NS}),pathExists:t=>ES.pathExists({...t,exchange:NS}),getAmounts:t=>ES.getAmounts({...t,exchange:NS}),getPrep:t=>{},getTransaction:t=>ES.getTransaction({...t,exchange:NS})}));const IS={name:"pancakeswap",label:"PancakeSwap",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTk4IiBoZWlnaHQ9IjE5OSIgdmlld0JveD0iMCAwIDE5OCAxOTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguNTUyIDE5OC42MDdDNjkuMDYxMyAxOTguNTg1IDQ1LjMwNiAxOTEuNTggMjguNzA3OSAxNzguOTk4QzExLjkxMDggMTY2LjI2NSAzIDE0OC4xOTUgMyAxMjcuNzQ4QzMgMTA4LjA0NyAxMS44OTEzIDkzLjg0MTEgMjEuOTUxNyA4NC4yMzg1QzI5LjgzNTkgNzYuNzEzMiAzOC41MzYzIDcxLjg5MzYgNDQuNTk0NSA2OS4xMjEzQzQzLjIyNDUgNjQuOTU5NCA0MS41MTUzIDU5LjUxMDggMzkuOTg2MSA1My44ODMyQzM3LjkzOTkgNDYuMzUyNyAzNS45MzI1IDM3LjUxNzQgMzUuOTMyNSAzMS4wNDI5QzM1LjkzMjUgMjMuMzc5NSAzNy42MjA0IDE1LjY4MzMgNDIuMTcxNCA5LjcwMzA2QzQ2Ljk3OTcgMy4zODQ3NiA1NC4yMTgyIDAgNjIuOTI2NCAwQzY5LjczMjIgMCA3NS41MTAzIDIuNDk5MDMgODAuMDMzOSA2LjgxMDExQzg0LjM1NzkgMTAuOTMwOSA4Ny4yMzU3IDE2LjQwMzQgODkuMjIyNyAyMi4xMDgyQzkyLjcxNDMgMzIuMTMyNSA5NC4wNzM4IDQ0LjcyNjQgOTQuNDU1MSA1Ny4yOTQ1SDEwMi43OTZDMTAzLjE3OCA0NC43MjY0IDEwNC41MzcgMzIuMTMyNSAxMDguMDI5IDIyLjEwODJDMTEwLjAxNiAxNi40MDM0IDExMi44OTQgMTAuOTMwOSAxMTcuMjE4IDYuODEwMTFDMTIxLjc0MSAyLjQ5OTAzIDEyNy41MTkgMCAxMzQuMzI1IDBDMTQzLjAzMyAwIDE1MC4yNzIgMy4zODQ3NiAxNTUuMDggOS43MDMwNkMxNTkuNjMxIDE1LjY4MzMgMTYxLjMxOSAyMy4zNzk1IDE2MS4zMTkgMzEuMDQyOUMxNjEuMzE5IDM3LjUxNzQgMTU5LjMxMiA0Ni4zNTI3IDE1Ny4yNjUgNTMuODgzMkMxNTUuNzM2IDU5LjUxMDggMTU0LjAyNyA2NC45NTk0IDE1Mi42NTcgNjkuMTIxM0MxNTguNzE1IDcxLjg5MzYgMTY3LjQxNiA3Ni43MTMyIDE3NS4zIDg0LjIzODVDMTg1LjM2IDkzLjg0MTEgMTk0LjI1MiAxMDguMDQ3IDE5NC4yNTIgMTI3Ljc0OEMxOTQuMjUyIDE0OC4xOTUgMTg1LjM0MSAxNjYuMjY1IDE2OC41NDQgMTc4Ljk5OEMxNTEuOTQ1IDE5MS41OCAxMjguMTkgMTk4LjU4NSA5OC42OTk2IDE5OC42MDdIOTguNTUyWiIgZmlsbD0iIzYzMzAwMSIvPgo8cGF0aCBkPSJNNjIuOTI2MiA3LjI4ODMzQzUwLjE3MTYgNy4yODgzMyA0NC4zMDA0IDE2LjgwMzcgNDQuMzAwNCAyOS45NjMyQzQ0LjMwMDQgNDAuNDIzMSA1MS4xMjIyIDYxLjM3MTUgNTMuOTIxMiA2OS41MjYzQzU0LjU1MDggNzEuMzYwNSA1My41NjE2IDczLjM3MDEgNTEuNzU3NCA3NC4wODE0QzQxLjUzNTEgNzguMTEyMSAxMS4zNjc5IDkyLjg3IDExLjM2NzkgMTI2LjY2OUMxMS4zNjc5IDE2Mi4yNzIgNDIuMDI0NiAxODkuMTE3IDk4LjU1ODEgMTg5LjE2Qzk4LjU4MDYgMTg5LjE2IDk4LjYwMzEgMTg5LjE1OSA5OC42MjU2IDE4OS4xNTlDOTguNjQ4MSAxODkuMTU5IDk4LjY3MDYgMTg5LjE2IDk4LjY5MzEgMTg5LjE2QzE1NS4yMjcgMTg5LjExNyAxODUuODgzIDE2Mi4yNzIgMTg1Ljg4MyAxMjYuNjY5QzE4NS44ODMgOTIuODcgMTU1LjcxNiA3OC4xMTIxIDE0NS40OTQgNzQuMDgxNEMxNDMuNjkgNzMuMzcwMSAxNDIuNyA3MS4zNjA1IDE0My4zMyA2OS41MjYzQzE0Ni4xMjkgNjEuMzcxNSAxNTIuOTUxIDQwLjQyMzEgMTUyLjk1MSAyOS45NjMyQzE1Mi45NTEgMTYuODAzNyAxNDcuMDggNy4yODgzMyAxMzQuMzI1IDcuMjg4MzNDMTE1Ljk2NSA3LjI4ODMzIDExMS4zODkgMzMuMjk1NSAxMTEuMDYyIDYxLjIwNzVDMTExLjA0IDYzLjA3MDkgMTA5LjUzNCA2NC41ODI4IDEwNy42NyA2NC41ODI4SDg5LjU4MDdDODcuNzE3MiA2NC41ODI4IDg2LjIxMDggNjMuMDcwOSA4Ni4xODkgNjEuMjA3NUM4NS44NjI2IDMzLjI5NTUgODEuMjg2IDcuMjg4MzMgNjIuOTI2MiA3LjI4ODMzWiIgZmlsbD0iI0QxODg0RiIvPgo8cGF0aCBkPSJNOTguNjkzMSAxNzcuNzU1QzU3LjE1NTEgMTc3Ljc1NSAxMS40Mzk3IDE1NS41MiAxMS4zNjgxIDEyNi43MzdDMTEuMzY4IDEyNi43ODEgMTEuMzY3OSAxMjYuODI2IDExLjM2NzkgMTI2Ljg3MUMxMS4zNjc5IDE2Mi41MDMgNDIuMDczNCAxODkuMzYyIDk4LjY5MzEgMTg5LjM2MkMxNTUuMzEzIDE4OS4zNjIgMTg2LjAxOCAxNjIuNTAzIDE4Ni4wMTggMTI2Ljg3MUMxODYuMDE4IDEyNi44MjYgMTg2LjAxOCAxMjYuNzgxIDE4Ni4wMTggMTI2LjczN0MxODUuOTQ2IDE1NS41MiAxNDAuMjMxIDE3Ny43NTUgOTguNjkzMSAxNzcuNzU1WiIgZmlsbD0iI0ZFREM5MCIvPgo8cGF0aCBkPSJNNzUuNjEzNSAxMTcuODk2Qzc1LjYxMzUgMTI3LjYxNCA3MS4wMjEgMTMyLjY3NSA2NS4zNTU4IDEzMi42NzVDNTkuNjkwNyAxMzIuNjc1IDU1LjA5ODEgMTI3LjYxNCA1NS4wOTgxIDExNy44OTZDNTUuMDk4MSAxMDguMTc4IDU5LjY5MDcgMTAzLjExNyA2NS4zNTU4IDEwMy4xMTdDNzEuMDIxIDEwMy4xMTcgNzUuNjEzNSAxMDguMTc4IDc1LjYxMzUgMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPHBhdGggZD0iTTE0Mi4yODggMTE3Ljg5NkMxNDIuMjg4IDEyNy42MTQgMTM3LjY5NiAxMzIuNjc1IDEzMi4wMzEgMTMyLjY3NUMxMjYuMzY1IDEzMi42NzUgMTIxLjc3MyAxMjcuNjE0IDEyMS43NzMgMTE3Ljg5NkMxMjEuNzczIDEwOC4xNzggMTI2LjM2NSAxMDMuMTE3IDEzMi4wMzEgMTAzLjExN0MxMzcuNjk2IDEwMy4xMTcgMTQyLjI4OCAxMDguMTc4IDE0Mi4yODggMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPC9zdmc+Cg==",protocol:"uniswap_v2",slippage:!0,blockchains:["bsc"],bsc:{router:{address:"0x10ED43C718714eb63d5aA57B78B54704E256024E",api:kx.ROUTER},factory:{address:"0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73",api:kx.FACTORY},pair:{api:kx.PAIR}}};var kS=t=>new bx(Object.assign(IS,{scope:t,findPath:t=>kx.findPath({...t,exchange:IS}),pathExists:t=>kx.pathExists({...t,exchange:IS}),getAmounts:t=>kx.getAmounts({...t,exchange:IS}),getPrep:t=>kx.getPrep({...t,exchange:IS}),getTransaction:t=>kx.getTransaction({...t,exchange:IS})}));function LS(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const xS=({blockchain:t,exchange:e,path:n})=>{if(!n)return;let r=n.map(((e,r)=>e===Vp[t].currency.address&&n[r+1]!=Vp[t].wrapped.address&&n[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:e));return r[0]==Vp[t].currency.address&&r[1]==Vp[t].wrapped.address?r.splice(0,1):r[r.length-1]==Vp[t].currency.address&&r[r.length-2]==Vp[t].wrapped.address&&r.splice(r.length-1,1),r},SS=async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,block:o})=>{if((n=xS({blockchain:t,exchange:e,path:n})).length>2)throw"PancakeSwap V3 can only check paths for up to 2 tokens!";try{let o=(await Promise.all(e.fees.map((r=>_E({blockchain:Vp[t].name,address:e[t].factory.address,method:"getPool",api:e[t].factory.api,cache:3600,params:[n[0],n[1],r]}).then((e=>({blockchain:t,address:e,path:n,fee:r,token0:[...n].sort()[0],token1:[...n].sort()[1]}))).catch((()=>{})))))).filter(Boolean);return o=o.filter((e=>e.address!=Vp[t].zero)),o=(await Promise.all(o.map((async t=>{try{let n;return n=r?await(async({exchange:t,pool:e,inputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactInput",params:{path:oE(["address","uint24","address"],[e.path[0],e.fee,e.path[1]]),amountIn:n},cache:5})).amountOut)({exchange:e,pool:t,inputAmount:r}):await(async({exchange:t,pool:e,outputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactOutput",params:{path:oE(["address","uint24","address"],[e.path[1],e.fee,e.path[0]]),amountOut:n},cache:5})).amountIn)({exchange:e,pool:t,outputAmount:i}),{...t,amountIn:r||n,amountOut:i||n}}catch(t){}})))).filter(Boolean),r?o.sort(((t,e)=>e.amountOut.gt(t.amountOut)?1:-1))[0]:o.sort(((t,e)=>e.amountIn.lt(t.amountIn)?1:-1))[0]}catch(t){return}};let jS=({blockchain:t,exchange:e,path:n,pools:r,amountIn:i})=>r[r.length-1].amountOut,CS=async({blockchain:t,exchange:e,path:n,pools:r,amountOut:i,block:o})=>{if(void 0===o)return r[0].amountIn;{let n;2==r.length?n=oE(["address","uint24","address","uint24","address"],[r[1].path[1],r[1].fee,r[0].path[1],r[0].fee,r[0].path[0]]):1==r.length&&(n=oE(["address","uint24","address"],[r[0].path[1],r[0].fee,r[0].path[0]]));return(await _E({block:o,blockchain:t,address:e[t].quoter.address,api:e[t].quoter.api,method:"quoteExactOutput",params:{path:n,amountOut:i}})).amountIn}};var DS={findPath:async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if([n,r].includes(Vp[t].currency.address)&&[n,r].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let u,c=[];if(c=[await SS({exchange:e,blockchain:t,path:[n,r],amountIn:i||a,amountOut:o||s})],c.filter(Boolean).length&&(u=[n,r]),u||n==Vp[t].wrapped.address||r==Vp[t].wrapped.address||(c=[],o||s?(c.push(await SS({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await SS({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountOut:c[0].amountIn}))):(c.push(await SS({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountIn:i||a})),c.filter(Boolean).length&&c.push(await SS({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length&&(u=[n,Vp[t].wrapped.address,r])),!u){c=[];let l=(await Promise.all(Vp[t].stables.usd.map((async u=>{let c=[];if(o||s?(c.push(await SS({exchange:e,blockchain:t,path:[u,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await SS({exchange:e,blockchain:t,path:[n,u],amountOut:c[0].amountIn}))):(c.push(await SS({exchange:e,blockchain:t,path:[n,u],amountIn:i||a})),c.filter(Boolean).length&&c.push(await SS({exchange:e,blockchain:t,path:[u,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length)return[u,c]})))).filter(Boolean)[0];l&&(u=[n,l[0],r],c=l[1])}return LS([u,"optionalAccess",t=>t.length])&&u[0]==Vp[t].currency.address?u.splice(1,0,Vp[t].wrapped.address):LS([u,"optionalAccess",t=>t.length])&&u[u.length-1]==Vp[t].currency.address&&u.splice(u.length-1,0,Vp[t].wrapped.address),u||(c=[]),{path:u,pools:c,exchangePath:xS({blockchain:t,exchange:e,path:u})}},pathExists:async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>{try{return!!await SS({blockchain:t,exchange:e,path:n,amountIn:r||o,amountOut:i||a})}catch(t){return!1}},getAmounts:async({blockchain:t,exchange:e,path:n,pools:r,block:i,tokenIn:o,tokenOut:a,amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l})=>{if(s){if(null==(u=await CS({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:s,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(u){if(null==(s=await jS({blockchain:t,exchange:e,path:n,pools:r,amountIn:u,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}else if(l){if(null==(u=await CS({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:l,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(c){if(null==(s=await jS({blockchain:t,exchange:e,path:n,pools:r,amountIn:c,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}return{amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l}},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i,tokenOut:o})=>{if(n===Vp[e].currency.address)return;let a;a=o===Vp[e].currency.address?t[e].smartRouter.address:t[e].router.address;if((await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,a]})).lt(r)){return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[a,Vp[e].maxInt]}}}},getTransaction:async({blockchain:t,exchange:e,pools:n,path:r,amountIn:i,amountInMax:o,amountOut:a,amountOutMin:s,amountInInput:u,amountOutInput:c,amountInMaxInput:l,amountOutMinInput:h,account:d,inputTokenPushed:p})=>{const f={blockchain:t,from:d},m=Math.floor(Date.now()/1e3)+21600,y=xS({blockchain:t,exchange:e,path:r});if(r[r.length-1]===Vp[t].currency.address){f.to=e[t].smartRouter.address,f.api=e[t].smartRouter.api,f.method="multicall";const r=new Og(e[t].smartRouter.api);if(f.params={data:[]},2===y.length)u||h?f.params.data.push(r.encodeFunctionData("exactInputSingle",[{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:e[t].smartRouter.address,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}])):(c||l)&&f.params.data.push(r.encodeFunctionData("exactOutputSingle",[{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:e[t].smartRouter.address,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}]));else{const d=oE(["address","uint24","address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1],n[1].fee,n[1].path[1]]);u||h?f.params.data.push(r.encodeFunctionData("exactInput",[{path:d,recipient:e[t].smartRouter.address,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString()}])):(c||l)&&f.params.data.push(r.encodeFunctionData("exactOutput",[{path:d,recipient:e[t].smartRouter.address,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString()}]))}f.params.data.push(r.encodeFunctionData("unwrapWETH9",[(s||a).toString(),d]))}else if(f.to=e[t].router.address,f.api=e[t].router.api,r[0]===Vp[t].currency.address&&(f.value=(i||o).toString()),2===y.length)u||h?(f.method="exactInputSingle",f.params={params:{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:d,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}}):(c||l)&&(f.method="exactOutputSingle",f.params={params:{tokenIn:y[0],tokenOut:y[1],fee:n[0].fee,recipient:d,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString(),sqrtPriceLimitX96:Vp[t].zero}});else{const t=oE(["address","uint24","address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1],n[1].fee,n[1].path[1]]);u||h?(f.method="exactInput",f.params={params:{path:t,recipient:d,deadline:m,amountIn:(o||i).toString(),amountOutMinimum:(s||a).toString()}}):(c||l)&&(f.method="exactOutput",f.params={params:{path:t,recipient:d,deadline:m,amountInMaximum:(o||i).toString(),amountOut:(s||a).toString()}})}return f},ROUTER:[{inputs:[{internalType:"address",name:"_deployer",type:"address"},{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"}],internalType:"struct ISwapRouter.ExactInputParams",name:"params",type:"tuple"}],name:"exactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct ISwapRouter.ExactInputSingleParams",name:"params",type:"tuple"}],name:"exactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"}],internalType:"struct ISwapRouter.ExactOutputParams",name:"params",type:"tuple"}],name:"exactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct ISwapRouter.ExactOutputSingleParams",name:"params",type:"tuple"}],name:"exactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"_data",type:"bytes"}],name:"pancakeV3SwapCallback",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"refundETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowed",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowedIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"sweepToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"sweepTokenWithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"unwrapWETH9",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"unwrapWETH9WithFee",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],SMART_ROUTER:[{inputs:[{internalType:"address",name:"_factoryV2",type:"address"},{internalType:"address",name:"_deployer",type:"address"},{internalType:"address",name:"_factoryV3",type:"address"},{internalType:"address",name:"_positionManager",type:"address"},{internalType:"address",name:"_stableFactory",type:"address"},{internalType:"address",name:"_stableInfo",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"factory",type:"address"},{indexed:!0,internalType:"address",name:"info",type:"address"}],name:"SetStableSwap",type:"event"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveMax",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveMaxMinusOne",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveZeroThenMax",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"approveZeroThenMaxMinusOne",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes",name:"data",type:"bytes"}],name:"callPositionManager",outputs:[{internalType:"bytes",name:"result",type:"bytes"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes[]",name:"paths",type:"bytes[]"},{internalType:"uint128[]",name:"amounts",type:"uint128[]"},{internalType:"uint24",name:"maximumTickDivergence",type:"uint24"},{internalType:"uint32",name:"secondsAgo",type:"uint32"}],name:"checkOracleSlippage",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint24",name:"maximumTickDivergence",type:"uint24"},{internalType:"uint32",name:"secondsAgo",type:"uint32"}],name:"checkOracleSlippage",outputs:[],stateMutability:"view",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"}],internalType:"struct IV3SwapRouter.ExactInputParams",name:"params",type:"tuple"}],name:"exactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IV3SwapRouter.ExactInputSingleParams",name:"params",type:"tuple"}],name:"exactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"path",type:"address[]"},{internalType:"uint256[]",name:"flag",type:"uint256[]"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address",name:"to",type:"address"}],name:"exactInputStableSwap",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"}],internalType:"struct IV3SwapRouter.ExactOutputParams",name:"params",type:"tuple"}],name:"exactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IV3SwapRouter.ExactOutputSingleParams",name:"params",type:"tuple"}],name:"exactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"path",type:"address[]"},{internalType:"uint256[]",name:"flag",type:"uint256[]"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address",name:"to",type:"address"}],name:"exactOutputStableSwap",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factoryV2",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"getApprovalType",outputs:[{internalType:"enum IApproveAndCall.ApprovalType",name:"",type:"uint8"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"token0",type:"address"},{internalType:"address",name:"token1",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"amount0Min",type:"uint256"},{internalType:"uint256",name:"amount1Min",type:"uint256"}],internalType:"struct IApproveAndCall.IncreaseLiquidityParams",name:"params",type:"tuple"}],name:"increaseLiquidity",outputs:[{internalType:"bytes",name:"result",type:"bytes"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"token0",type:"address"},{internalType:"address",name:"token1",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint256",name:"amount0Min",type:"uint256"},{internalType:"uint256",name:"amount1Min",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],internalType:"struct IApproveAndCall.MintParams",name:"params",type:"tuple"}],name:"mint",outputs:[{internalType:"bytes",name:"result",type:"bytes"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"previousBlockhash",type:"bytes32"},{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"_data",type:"bytes"}],name:"pancakeV3SwapCallback",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"positionManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"pull",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"refundETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowed",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitAllowedIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"selfPermitIfNecessary",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_info",type:"address"}],name:"setStableSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stableSwapFactory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"stableSwapInfo",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"}],name:"swapExactTokensForTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"address[]",name:"path",type:"address[]"},{internalType:"address",name:"to",type:"address"}],name:"swapTokensForExactTokens",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"sweepToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"}],name:"sweepToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"sweepTokenWithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"sweepTokenWithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"}],name:"unwrapWETH9",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"unwrapWETH9WithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"},{internalType:"uint256",name:"feeBips",type:"uint256"},{internalType:"address",name:"feeRecipient",type:"address"}],name:"unwrapWETH9WithFee",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"value",type:"uint256"}],name:"wrapETH",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[{internalType:"address",name:"_poolDeployer",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!0,internalType:"int24",name:"tickSpacing",type:"int24"}],name:"FeeAmountEnabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"bool",name:"whitelistRequested",type:"bool"},{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"FeeAmountExtraInfoUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"int24",name:"tickSpacing",type:"int24"},{indexed:!1,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"lmPoolDeployer",type:"address"}],name:"SetLmPoolDeployer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"bool",name:"verified",type:"bool"}],name:"WhiteListAdded",type:"event"},{inputs:[{internalType:"address",name:"pool",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"}],name:"createPool",outputs:[{internalType:"address",name:"pool",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],name:"enableFeeAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"",type:"uint24"}],name:"feeAmountTickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"",type:"uint24"}],name:"feeAmountTickSpacingExtraInfo",outputs:[{internalType:"bool",name:"whitelistRequested",type:"bool"},{internalType:"bool",name:"enabled",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint24",name:"",type:"uint24"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"lmPoolDeployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"poolDeployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"bool",name:"whitelistRequested",type:"bool"},{internalType:"bool",name:"enabled",type:"bool"}],name:"setFeeAmountExtraInfo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"},{internalType:"uint32",name:"feeProtocol0",type:"uint32"},{internalType:"uint32",name:"feeProtocol1",type:"uint32"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"},{internalType:"address",name:"lmPool",type:"address"}],name:"setLmPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_lmPoolDeployer",type:"address"}],name:"setLmPoolDeployer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_owner",type:"address"}],name:"setOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"bool",name:"verified",type:"bool"}],name:"setWhiteListAddress",outputs:[],stateMutability:"nonpayable",type:"function"}],POOL:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"feeProtocol0Old",type:"uint32"},{indexed:!1,internalType:"uint32",name:"feeProtocol1Old",type:"uint32"},{indexed:!1,internalType:"uint32",name:"feeProtocol0New",type:"uint32"},{indexed:!1,internalType:"uint32",name:"feeProtocol1New",type:"uint32"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"addr",type:"address"}],name:"SetLmPoolEvent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"},{indexed:!1,internalType:"uint128",name:"protocolFeesToken0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"protocolFeesToken1",type:"uint128"}],name:"Swap",type:"event"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"lmPool",outputs:[{internalType:"contract IPancakeV3LmPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"feeProtocol0",type:"uint32"},{internalType:"uint32",name:"feeProtocol1",type:"uint32"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_lmPool",type:"address"}],name:"setLmPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint32",name:"feeProtocol",type:"uint32"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int16",name:"",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],QUOTER:[{inputs:[{internalType:"address",name:"_deployer",type:"address"},{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"deployer",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"path",type:"bytes"}],name:"pancakeV3SwapCallback",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"quoteExactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactInputSingleParams",name:"params",type:"tuple"}],name:"quoteExactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"quoteExactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactOutputSingleParams",name:"params",type:"tuple"}],name:"quoteExactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"}]};const OS={name:"pancakeswap_v3",label:"PancakeSwap v3",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTk4IiBoZWlnaHQ9IjE5OSIgdmlld0JveD0iMCAwIDE5OCAxOTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguNTUyIDE5OC42MDdDNjkuMDYxMyAxOTguNTg1IDQ1LjMwNiAxOTEuNTggMjguNzA3OSAxNzguOTk4QzExLjkxMDggMTY2LjI2NSAzIDE0OC4xOTUgMyAxMjcuNzQ4QzMgMTA4LjA0NyAxMS44OTEzIDkzLjg0MTEgMjEuOTUxNyA4NC4yMzg1QzI5LjgzNTkgNzYuNzEzMiAzOC41MzYzIDcxLjg5MzYgNDQuNTk0NSA2OS4xMjEzQzQzLjIyNDUgNjQuOTU5NCA0MS41MTUzIDU5LjUxMDggMzkuOTg2MSA1My44ODMyQzM3LjkzOTkgNDYuMzUyNyAzNS45MzI1IDM3LjUxNzQgMzUuOTMyNSAzMS4wNDI5QzM1LjkzMjUgMjMuMzc5NSAzNy42MjA0IDE1LjY4MzMgNDIuMTcxNCA5LjcwMzA2QzQ2Ljk3OTcgMy4zODQ3NiA1NC4yMTgyIDAgNjIuOTI2NCAwQzY5LjczMjIgMCA3NS41MTAzIDIuNDk5MDMgODAuMDMzOSA2LjgxMDExQzg0LjM1NzkgMTAuOTMwOSA4Ny4yMzU3IDE2LjQwMzQgODkuMjIyNyAyMi4xMDgyQzkyLjcxNDMgMzIuMTMyNSA5NC4wNzM4IDQ0LjcyNjQgOTQuNDU1MSA1Ny4yOTQ1SDEwMi43OTZDMTAzLjE3OCA0NC43MjY0IDEwNC41MzcgMzIuMTMyNSAxMDguMDI5IDIyLjEwODJDMTEwLjAxNiAxNi40MDM0IDExMi44OTQgMTAuOTMwOSAxMTcuMjE4IDYuODEwMTFDMTIxLjc0MSAyLjQ5OTAzIDEyNy41MTkgMCAxMzQuMzI1IDBDMTQzLjAzMyAwIDE1MC4yNzIgMy4zODQ3NiAxNTUuMDggOS43MDMwNkMxNTkuNjMxIDE1LjY4MzMgMTYxLjMxOSAyMy4zNzk1IDE2MS4zMTkgMzEuMDQyOUMxNjEuMzE5IDM3LjUxNzQgMTU5LjMxMiA0Ni4zNTI3IDE1Ny4yNjUgNTMuODgzMkMxNTUuNzM2IDU5LjUxMDggMTU0LjAyNyA2NC45NTk0IDE1Mi42NTcgNjkuMTIxM0MxNTguNzE1IDcxLjg5MzYgMTY3LjQxNiA3Ni43MTMyIDE3NS4zIDg0LjIzODVDMTg1LjM2IDkzLjg0MTEgMTk0LjI1MiAxMDguMDQ3IDE5NC4yNTIgMTI3Ljc0OEMxOTQuMjUyIDE0OC4xOTUgMTg1LjM0MSAxNjYuMjY1IDE2OC41NDQgMTc4Ljk5OEMxNTEuOTQ1IDE5MS41OCAxMjguMTkgMTk4LjU4NSA5OC42OTk2IDE5OC42MDdIOTguNTUyWiIgZmlsbD0iIzYzMzAwMSIvPgo8cGF0aCBkPSJNNjIuOTI2MiA3LjI4ODMzQzUwLjE3MTYgNy4yODgzMyA0NC4zMDA0IDE2LjgwMzcgNDQuMzAwNCAyOS45NjMyQzQ0LjMwMDQgNDAuNDIzMSA1MS4xMjIyIDYxLjM3MTUgNTMuOTIxMiA2OS41MjYzQzU0LjU1MDggNzEuMzYwNSA1My41NjE2IDczLjM3MDEgNTEuNzU3NCA3NC4wODE0QzQxLjUzNTEgNzguMTEyMSAxMS4zNjc5IDkyLjg3IDExLjM2NzkgMTI2LjY2OUMxMS4zNjc5IDE2Mi4yNzIgNDIuMDI0NiAxODkuMTE3IDk4LjU1ODEgMTg5LjE2Qzk4LjU4MDYgMTg5LjE2IDk4LjYwMzEgMTg5LjE1OSA5OC42MjU2IDE4OS4xNTlDOTguNjQ4MSAxODkuMTU5IDk4LjY3MDYgMTg5LjE2IDk4LjY5MzEgMTg5LjE2QzE1NS4yMjcgMTg5LjExNyAxODUuODgzIDE2Mi4yNzIgMTg1Ljg4MyAxMjYuNjY5QzE4NS44ODMgOTIuODcgMTU1LjcxNiA3OC4xMTIxIDE0NS40OTQgNzQuMDgxNEMxNDMuNjkgNzMuMzcwMSAxNDIuNyA3MS4zNjA1IDE0My4zMyA2OS41MjYzQzE0Ni4xMjkgNjEuMzcxNSAxNTIuOTUxIDQwLjQyMzEgMTUyLjk1MSAyOS45NjMyQzE1Mi45NTEgMTYuODAzNyAxNDcuMDggNy4yODgzMyAxMzQuMzI1IDcuMjg4MzNDMTE1Ljk2NSA3LjI4ODMzIDExMS4zODkgMzMuMjk1NSAxMTEuMDYyIDYxLjIwNzVDMTExLjA0IDYzLjA3MDkgMTA5LjUzNCA2NC41ODI4IDEwNy42NyA2NC41ODI4SDg5LjU4MDdDODcuNzE3MiA2NC41ODI4IDg2LjIxMDggNjMuMDcwOSA4Ni4xODkgNjEuMjA3NUM4NS44NjI2IDMzLjI5NTUgODEuMjg2IDcuMjg4MzMgNjIuOTI2MiA3LjI4ODMzWiIgZmlsbD0iI0QxODg0RiIvPgo8cGF0aCBkPSJNOTguNjkzMSAxNzcuNzU1QzU3LjE1NTEgMTc3Ljc1NSAxMS40Mzk3IDE1NS41MiAxMS4zNjgxIDEyNi43MzdDMTEuMzY4IDEyNi43ODEgMTEuMzY3OSAxMjYuODI2IDExLjM2NzkgMTI2Ljg3MUMxMS4zNjc5IDE2Mi41MDMgNDIuMDczNCAxODkuMzYyIDk4LjY5MzEgMTg5LjM2MkMxNTUuMzEzIDE4OS4zNjIgMTg2LjAxOCAxNjIuNTAzIDE4Ni4wMTggMTI2Ljg3MUMxODYuMDE4IDEyNi44MjYgMTg2LjAxOCAxMjYuNzgxIDE4Ni4wMTggMTI2LjczN0MxODUuOTQ2IDE1NS41MiAxNDAuMjMxIDE3Ny43NTUgOTguNjkzMSAxNzcuNzU1WiIgZmlsbD0iI0ZFREM5MCIvPgo8cGF0aCBkPSJNNzUuNjEzNSAxMTcuODk2Qzc1LjYxMzUgMTI3LjYxNCA3MS4wMjEgMTMyLjY3NSA2NS4zNTU4IDEzMi42NzVDNTkuNjkwNyAxMzIuNjc1IDU1LjA5ODEgMTI3LjYxNCA1NS4wOTgxIDExNy44OTZDNTUuMDk4MSAxMDguMTc4IDU5LjY5MDcgMTAzLjExNyA2NS4zNTU4IDEwMy4xMTdDNzEuMDIxIDEwMy4xMTcgNzUuNjEzNSAxMDguMTc4IDc1LjYxMzUgMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPHBhdGggZD0iTTE0Mi4yODggMTE3Ljg5NkMxNDIuMjg4IDEyNy42MTQgMTM3LjY5NiAxMzIuNjc1IDEzMi4wMzEgMTMyLjY3NUMxMjYuMzY1IDEzMi42NzUgMTIxLjc3MyAxMjcuNjE0IDEyMS43NzMgMTE3Ljg5NkMxMjEuNzczIDEwOC4xNzggMTI2LjM2NSAxMDMuMTE3IDEzMi4wMzEgMTAzLjExN0MxMzcuNjk2IDEwMy4xMTcgMTQyLjI4OCAxMDguMTc4IDE0Mi4yODggMTE3Ljg5NloiIGZpbGw9IiM2MzMwMDEiLz4KPC9zdmc+Cg==",protocol:"pancakeswap_v3",slippage:!0,fees:[100,500,2500,1e4],blockchains:["bsc"],bsc:{router:{address:"0x1b81D678ffb9C0263b24A97847620C99d213eB14",api:DS.ROUTER},smartRouter:{address:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",api:DS.SMART_ROUTER},factory:{address:"0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865",api:DS.FACTORY},pair:{api:DS.POOL},quoter:{address:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",api:DS.QUOTER}}};var zS=t=>new bx(Object.assign(OS,{scope:t,findPath:t=>DS.findPath({...t,exchange:OS}),pathExists:t=>DS.pathExists({...t,exchange:OS}),getAmounts:t=>DS.getAmounts({...t,exchange:OS}),getPrep:t=>DS.getPrep({...t,exchange:OS}),getTransaction:t=>DS.getTransaction({...t,exchange:OS})}));const _S={name:"quickswap",label:"QuickSwap",logo:"data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNzAyLjQ1IDcwMi40NyI+PGRlZnM+PGNsaXBQYXRoIGlkPSJjbGlwLXBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIj48cmVjdCB3aWR0aD0iNzUwIiBoZWlnaHQ9Ijc1MCIgZmlsbD0ibm9uZSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwLXBhdGgpIj48cGF0aCBkPSJNMzU0Ljc0LDI0LjM3YTM1MS4yNywzNTEuMjcsMCwwLDEsMzYzLjc0LDI3NywzNTQsMzU0LDAsMCwxLDEuMjMsMTQxLjI2QTM1MS43NiwzNTEuNzYsMCwwLDEsNTEwLjEyLDY5OS4zYy03My43NywzMS0xNTguMjUsMzUuMzUtMjM0LjkxLDEyLjU0QTM1MiwzNTIsMCwwLDEsNDYuNTEsNDk5LjU2Yy0yOC03My40NS0zMC4xNi0xNTYuMzgtNi4yNC0yMzEuMjVBMzUwLjg4LDM1MC44OCwwLDAsMSwzNTQuNzQsMjQuMzciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTE1OC44MSwzNDkuNThjMS4zOSw2LjQxLDIuMjMsMTIuOTIsMy42MSwxOS4zNS44NSwzLjkzLDIuMTMsMyw0LjE1LDEuMjgsMy44Ny0zLjI1LDcuNTktNi42OSwxMS45NC05LjMxLDEuMjMuMjQsMS44NiwxLjIyLDIuNTMsMi4xLDExLjM5LDE0Ljg3LDI2LjUzLDI0LDQ0LjM3LDI4Ljk0YTE0Ny4yMywxNDcuMjMsMCwwLDAsMjUuMTcsNC42Nyw0Mi42OCw0Mi42OCwwLDAsMS02LjYxLTkuOTVjLTIuODUtNi40MS0xLjg1LTEyLjE1LDIuOTUtMTcuMjIsNS44Ny02LjE5LDEzLjYyLTguNzYsMjEuNDgtMTAuOCwxNi40OC00LjMsMzMuMjctNC43Myw1MC4xOC0zLjUzQTIwMi4xMSwyMDIuMTEsMCwwLDEsMzU4Ljc1LDM2MmMxMSwzLjA2LDIxLjcyLDYuNzMsMzEuNDQsMTIuODgsMS4zNiwxLjA5LDIuMywyLjYsMy42MSwzLjc0LDEyLjQ5LDEzLjQxLDE5Ljc4LDI5LjI1LDIwLjI4LDQ3LjU1LjM0LDEyLjY1LTMuMTYsMjQuNzItOS41LDM1LjgyLTExLjQyLDIwLTI4LjA5LDM0LjU2LTQ4LDQ1LjcxQTE3MC41LDE3MC41LDAsMCwxLDI5MSw1MjguNDJjLTQxLjI0LDQuNDctNzkuNDUtNC40Ny0xMTQuNTktMjYuMzYtMjkuMjEtMTguMTktNTEuNjUtNDMuMDgtNzAtNzEuOTJhMzM5LjU3LDMzOS41NywwLDAsMS0yMi41Mi00Mi43NWMtLjgxLTEuOC0xLTMuODEtMS44Mi01LjI5LjUyLDEuNzUsMS40OSwzLjczLS40Myw1LjYtLjU4LTcuNDUuMDgtMTQuOS40Ny0yMi4zMWEyODcuMTMsMjg3LjEzLDAsMCwxLDkuNDgtNjAuNTRBMjkyLjkxLDI5Mi45MSwwLDAsMSwyNjYuMDYsMTA5LjA5LDI4Ny4yLDI4Ny4yLDAsMCwxLDM0Ni41OSw4OS45YzQzLjU3LTQsODUuNzksMS43MywxMjcsMTYuMzQtNi4yNywxMS44OS00Miw0My43Mi02OS44LDYyLjE1YTk0LjExLDk0LjExLDAsMCwwLTUuNDQtMjMuNTFjLS4xNC0yLDEuNjYtMi42NSwyLjc4LTMuNjFxOC42Ny03LjQ2LDE3LjQzLTE0Ljc3YTE3LjE0LDE3LjE0LDAsMCwwLDEuNjktMS40OWMuNjYtLjcxLDEuNzctMS4zLDEuNTQtMi40cy0xLjU1LTEuMTUtMi40Ny0xLjNhNDYuODIsNDYuODIsMCwwLDAtOC4xNy0xYy0zLjgxLS40NS03LjU2LTEuMy0xMS40LTEuMzgtMi45NS0uMTgtNS44NS0uOTMtOC44My0uNjlhMjguMjIsMjguMjIsMCwwLDEtNC41LS4zMmMtMi41LS43OS01LjA3LS40NC03LjYxLS40My0xLjUyLDAtMy0uMTEtNC41NiwwLTQuMzUuMjUtOC43My0uNDgtMTMuMDcuMzRhMTIuODcsMTIuODcsMCwwLDEtMy4yMS4zMmMtMS4yNiwwLTIuNTEuMDYtMy43NywwYTEyLjM1LDEyLjM1LDAsMCwwLTQuODcuNDdjLTQuNTkuNDEtOS4xOS43OC0xMy43MywxLjYxLTUuNDgsMS4xNi0xMS4wOSwxLjQ0LTE2LjUzLDIuNzktNSwxLjMtMTAuMTMsMi0xNSwzLjc0LTYuNTEsMS43OS0xMi45NSwzLjg0LTE5LjM1LDYtOS4zNCwzLjcxLTE4LjgyLDcuMS0yNy43MSwxMS44NmEyNDguNzQsMjQ4Ljc0LDAsMCwwLTU1LjY2LDM2Ljk0QTI2Ni41NSwyNjYuNTUsMCwwLDAsMTU5LjY4LDIyN2EyNTQuODcsMjU0Ljg3LDAsMCwwLTE2LjU0LDI2LjE2Yy0zLjE3LDUuOS02LjIyLDExLjg1LTksMTgtMiw0LjcxLTQuNDIsOS4yNy02LDE0LjE4LTIsNC45LTMuNjQsOS45Mi01LjIyLDE1LTEuODgsNS4wNi0zLDEwLjM1LTQuNDUsMTUuNTMtLjYzLDItMSw0LjExLTEuNTMsNi4xOC0uNjMsMi40OS0xLDUtMS40Nyw3LjU1LS43Nyw0LjI1LTEuNDgsOC41LTIuMDksMTIuNzhhMTE4LjY0LDExOC42NCwwLDAsMC0xLjU3LDEzLjI5Yy0uNzQsMi45NC0uMiw2LS43NCw5LS44MiwzLjY5LS4yOCw3LjQ1LS41MiwxMS4xNi0uMTEsMi42MS0uMTYsNS4yMy0uMDksNy44NSwwLDEuMDctLjQ5LDIuNTcuNjQsMy4wOSwxLjI5LjYsMi4yMy0uNzcsMy4xNi0xLjUzLDMuMTgtMi42LDYuMjktNS4yOSw5LjQtOCwxMC40Ny05LDIxLjA3LTE3Ljg4LDMxLjU4LTI2Ljg1LjkxLS43NywxLjktMi43OSwzLjUyLS43MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0MTg5YzkiLz48cGF0aCBkPSJNMzkwLjExLDM3NS43OGMtMTIuMzctNy4zNS0yNS44OS0xMS42My0zOS43Ny0xNC45MmExOTcuMjUsMTk3LjI1LDAsMCwwLTU1LjY4LTUuMWMtMTMuMjEuNjYtMjYuMzEsMi41LTM4LjQ4LDguM2EzMi42MSwzMi42MSwwLDAsMC00LjIxLDIuNDNjLTkuODUsNi42LTExLjM1LDE1LjQtNC4yMywyNC45MSwxLjQ4LDIsMy4xMiwzLjgxLDUuMSw2LjIyLTYuMzksMC0xMi4wNS0xLjE5LTE3LjY5LTIuMzEtMTUuMTItMy0yOS4zMi04LjI0LTQxLjUtMTgtNS44Ni00LjY4LTExLjIyLTkuOTMtMTUuMTQtMTYuNDUsMS42LTIuNjEsNC4yOC0zLjgzLDYuNzgtNS4yNyw0LjgyLTIsOS4xOS00LjkxLDE0LTcuMDlhMjA3LjU1LDIwNy41NSwwLDAsMSw2Ny40LTE4YzkuMzItLjg3LDE4LjY1LTEuNzYsMjgtMS40MUEzMTEuMzgsMzExLjM4LDAsMCwxLDM3NiwzNDMuMjVjNi44LDIuMTIsMTMuNTIsNC40NSwyMC41OSw2Ljg0LDAtMi0xLjE0LTMuMTktMS45LTQuNDhBOTYuMTgsOTYuMTgsMCwwLDAsMzg1LDMzMS44OGMtMS4zMy0xLjU2LTMuMTgtMi45My0zLjE0LTUuMzMsMy43My44NSw3LjQ2LDEuNjgsMTEuMTgsMi41NiwxLC4yMywyLjE3LjgzLDIuODEsMCwuODUtMS4wOC0uNDMtMi0xLTIuODQtNS40OS04LjE5LTEyLjMzLTE1LjE3LTE5LjY3LTIxLjY4LDMuODktMi4yNiw3Ljg5LS40MiwxMS42OC4wNiwzOC44Nyw1LDc0LjI5LDE4LjgxLDEwNS4xOCw0Myw0MC45LDMyLjA5LDY3LjMzLDczLjU0LDc4LjQ3LDEyNC41MUExODAuNTQsMTgwLjU0LDAsMCwxLDU3My44Nyw1MjRjLTIuMTksMzAuMTEtMTEuNjUsNTcuOS0yOS40NSw4Mi41OC0xLjE3LDEuNjItMi43NSwyLjkxLTMuNjEsNC43Ni00LDYtMTAsMTAuMDgtMTUuNDQsMTQuNTItMjkuNTUsMjQtNjQsMzYuNDYtMTAxLjE0LDQyLjI4YTMxMC4zNCwzMTAuMzQsMCwwLDEtODcuMzEsMS41NCwyODguMTcsMjg4LjE3LDAsMCwxLTEyNy4zOS00OC4xNGMtOS4yNy02LjI5LTE4LjM2LTEyLjg1LTI2LjUxLTIwLjYyYS42NS42NSwwLDAsMSwwLTFjMS43NC0uNjksMi44NC41Nyw0LDEuNDNhMTg5LjA4LDE4OS4wOCwwLDAsMCw2NSwzMS41NiwyMjguNDYsMjI4LjQ2LDAsMCwwLDIzLjg3LDQuNzVjMS44Mi42NiwzLjc1LjM1LDUuNjIuNjZhNy41NSw3LjU1LDAsMCwxLDEuMTMuMjNjMTguMjQsMi4xNiwzNi4zNy44OSw1NC4zNi0yLjI4LDM5LjU0LTcsNzQuNjYtMjMuNTUsMTA0Ljc1LTUwLjE1LDIwLjUtMTguMTIsMzYuNjgtMzkuNTMsNDUuMjQtNjUuOTVzNy4zNS01Mi4xLTQuNjctNzcuNDhjLTIuNDcsMTEuMzgtOC40NCwyMC44LTE1LjkxLDI5LjM4YTEwNi4wOSwxMDYuMDksMCwwLDEtMjYuMDcsMjEuMTljLTEuMTQuNjYtMi40LDEuOTEtMy43MS45LTEuMTMtLjg2LS40NS0yLjM3LS4xLTMuNTFhMTM5LjY0LDEzOS42NCwwLDAsMCw0Ljk0LTI0LjJjMy41LTM0LjUxLTkuODItNjEuMzctMzcuMy04MS43NGExMTkuOCwxMTkuOCwwLDAsMC0xNC4wNi05IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzI2MmY3MSIvPjxwYXRoIGQ9Ik0yNzYuMDgsNjM4LjQxYTE1MS4xNiwxNTEuMTYsMCwwLDEtMjkuODYtNi4xQTE5OC41MywxOTguNTMsMCwwLDEsMTk0LjM1LDYwOGMtMy44My0yLjUxLTcuMDctNS44Ni0xMS4yNC03Ljg5LTIuMzktLjM0LTMuMzktMi42OC01LjMtMy43LTQwLjM4LTM1LjktNjgtODAtODMuODMtMTMxLjQ4QTI4MC41NCwyODAuNTQsMCwwLDEsODEuNjMsMzg3LjdjLjEtMiwuMi0zLjkzLjM2LTcsMiw0LjM2LDMuNDgsNy44Miw1LjA1LDExLjI2LDE0LjUzLDMxLjg2LDMzLjEzLDYwLjkzLDU4Ljc0LDg1LjEyQzE3Myw1MDIuODIsMjA0LjY4LDUyMCwyNDIsNTI2YzQzLjcxLDcuMTEsODQuNjEtLjUxLDEyMi4yMi0yNC4wNiwxOC43NS0xMS43NSwzNC4xNC0yNi45NCw0My00Ny42NSwxMC43Mi0yNS4xMSw2LjY4LTQ4LjQ0LTkuNjUtNjkuOTUtMS40My0xLjg4LTIuOTUtMy42OS00LjQzLTUuNTQsMS45NC0xLjY2LDMsLjI2LDQuMDcsMS4xOGE4My4yMiw4My4yMiwwLDAsMSwyMi42LDI5LjksODgsODgsMCwwLDEsNy44NSwzNS4xOSw3OS43NSw3OS43NSwwLDAsMS04LDM1Ljg3LDUuMzksNS4zOSwwLDAsMCwzLjI0LTEuMTcsOTguMzQsOTguMzQsMCwwLDAsMTQuNjUtMTAuMzVjMS40Mi0xLjIzLDIuNjctMy4wOCw1LTIuOGExNjUuMywxNjUuMywwLDAsMS02LjA5LDI3Ljc1LDEzMS43NCwxMzEuNzQsMCwwLDAsMTcuMjctMTEuNDhjNC4zMy0zLjM4LDcuODMtNy42MiwxMi4wOC0xMS4wNiwxLjgxLjc3LDEuODEsMi41NiwyLjIzLDQuMDgsNi45MiwyNSwxLjkxLDQ4LjI4LTEwLjQyLDcwLjMtMTUsMjYuNy0zNyw0Ni41Ny02Mi42Miw2Mi42NWEyMTMuMzMsMjEzLjMzLDAsMCwxLTY3LjI3LDI3LjU1LDE0Mi4yLDE0Mi4yLDAsMCwxLTQ1LjY3LDIuNjloMGMtMS45LTEtNC4wNy4xOS02LS43MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMxNjFmNDIiLz48cGF0aCBkPSJNNjU0LjE3LDQ1My4wN2EyMTIsMjEyLDAsMCwwLTIwLjc3LTgyLjM1QTIxOC45LDIxOC45LDAsMCwwLDYwMywzMjRjLTEwLjktMTIuOTEtMjMuNDItMjMuOTMtMzYuNTYtMzQuMzgsMS4yMy0xLjIxLDIuNzYtMSw0LjI0LS44YTIzNi4yOCwyMzYuMjgsMCwwLDEsNTMuNzksMTIuNzhBODAuMiw4MC4yLDAsMCwxLDYzNywzMDcuNDNhNDAuMzgsNDAuMzgsMCwwLDEsNC4xNiwyLjQ0Yy4zNC4xOS41My42OSwxLC41OGExLjI3LDEuMjcsMCwwLDEtLjIxLTEuMzdjLTExLjg0LTE1LjQyLTI2LjE1LTI4LjI4LTQxLjE3LTQwLjVhMzAyLDMwMiwwLDAsMC01OC4xOC0zNi45LDI4Ny42NCwyODcuNjQsMCwwLDAtOTEuNTctMjcuNDVjLTIuODMtLjM1LTUuNzUsMC04LjUxLTEtLjI0LTEuODksMS4zNS0yLjUyLDIuNDUtMy40NCwxOC42Ny0xNS41NSwzMy42OS0zNCw0NC4yOC01NS45NGExNTcuMSwxNTcuMSwwLDAsMCw4LjE0LTIwLjUzYy42NC0yLDEtNC4xNywzLTUuNDRhMjg4LjE2LDI4OC4xNiwwLDAsMSw4OC40Nyw2NiwyOTIuMSwyOTIuMSwwLDAsMSw2Ni42NCwyNzBjLS44NC40Ni0xLS4yNi0xLjM0LS43NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0MTg5YzkiLz48cGF0aCBkPSJNNTQwLjgxLDYxMS4zN2MwLTIuOTQsMi4zNC00LjYsMy43OS02LjY2LDEzLjY2LTE5LjUxLDIyLTQxLjEyLDI2LjMxLTY0LjQ4LDIuNjctMTQuNDcsMi45LTI5LjA4LDItNDMuNTctMS40Ny0yMi4zNC03LjE4LTQzLjgzLTE2LjE5LTY0LjQyYTIxMi4yNSwyMTIuMjUsMCwwLDAtMjQuNzMtNDIuNTcsMjIxLjI0LDIyMS4yNCwwLDAsMC0zNi4xNi0zNy42MkEyMDcuNTYsMjA3LjU2LDAsMCwwLDQyNS4xOSwzMTRhMTk4LjEsMTk4LjEsMCwwLDAtNDIuMjUtOC42OWMtMi41OS0uMjMtNS4xNS0uODUtNy43OC0uNjktOS4xMy02LjczLTE4LjM5LTEzLjI0LTI4Ljc5LTE3Ljk0LDAtLjMzLDAtLjY3LjA3LTEsMy43NCwwLDcuNDkuMDYsMTEuMjMsMCw1Mi40My0uOTQsMTAwLjc1LDExLjkxLDE0Myw0My44NEM1NDQuNCwzNjIuNTksNTcxLjc0LDQwNi4zMiw1ODIsNDYwLjNjOC43Myw0Ni4wNSwyLDg5LjU0LTIzLjU2LDEyOS40NC01LDcuODUtMTAuNTMsMTUuNDEtMTcuNjEsMjEuNjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjMTYxZjQyIi8+PHBhdGggZD0iTTUwMC40LDExNy45MWMtNS4yNSwxNi4wNS0xMS44NCwzMS40Ny0yMS4yNyw0NS41OWExNzIuNzgsMTcyLjc4LDAsMCwxLTM0LjQyLDM3LjczYy0uNzYuNjMtMS40NSwxLjM1LTIuMTcsMi00LjU4LDIuMzMtOC4zNSw1Ljg1LTEyLjU5LDguNjhhMjY3LjY4LDI2Ny42OCwwLDAsMS00OS4zOSwyNS41Myw4LjA5LDguMDksMCwwLDEtMS4yOS4zMmMtLjc2LTEuMTIuMTQtMS41My42LTIsOS44Mi05LjM1LDE1LjkxLTIwLjkyLDIwLTMzLjY2YTUsNSwwLDAsMSwzLjE3LTMuNjVjMzAuNTEtMTIuMDgsNTQuODYtMzIuMTUsNzQuOC01Ny45LDEuODEtMi4zNCwzLjU4LTQuNzEsNS44Mi03LjY2LTYuMTctLjEyLTEwLjksMy0xNi4xMiwzLjgyLTEsLjA2LTIuMjcuODgtMi41LTFhMjE1LjI3LDIxNS4yNywwLDAsMCw0MS44NC03NS42NWMuNTUtMS43OCwwLTQuMjMsMi40OC01LjEzYS40NC40NCwwLDAsMSwuMjUuNDVjMCwuMTgtLjA4LjI2LS4xMy4yNmEyMzAuNDksMjMwLjQ5LDAsMCwxLTguMzUsNTguNTYsMzYuODgsMzYuODgsMCwwLDAtLjY5LDMuNjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjMTYxZjQyIi8+PHBhdGggZD0iTTM4MS44MiwzMjYuNTRhMTIwLDEyMCwwLDAsMSwxNi4wNiwyMi40Yy40My43OSwxLjU0LDEuNjguNTUsMi42MS0uNzUuNy0xLjYyLS4xNi0yLjQxLS40NmEzNDksMzQ5LDAsMCwwLTYyLjU2LTE3Yy0xMC43NS0xLjg1LTIxLjY2LTIuNjYtMzIuNTgtMy40NWExOTQuMDksMTk0LjA5LDAsMCwwLTI5LjQ1LjQyYy0yMi40MiwxLjgtNDQuMjQsNi41OS02NSwxNS41Ni02LjQsMi43Ny0xMi45NCw1LjI1LTE4Ljg5LDktLjY4LjQzLTEuNDksMS4xMy0yLjI3LjA2YTE5OS41OSwxOTkuNTksMCwwLDEsNTkuMi0yOC40MWMyOS4xNS04LjcsNTguOTMtMTAuODQsODkuMTUtOC40NmEzMjguNDIsMzI4LjQyLDAsMCwxLDQ1Ljc0LDYuOTUsMjEuOTIsMjEuOTIsMCwwLDEsMi40NC44MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMxNjFmNDIiLz48cGF0aCBkPSJNMzc0LjMyLDExNi4zOGg0LjVjMi40MiwxLDUuMDctLjI4LDcuNS43NGg0LjQ5Yy4zOCwyLjE3LTEuNDEsMy4wOC0yLjY1LDQuMTMtMjAuNzgsMTcuNTYtNDEuNDEsMzUuMjktNjIuMiw1Mi44My02Ljg3LDUuNzktMTMuNjgsMTEuNjUtMjAuNTQsMTcuNDVhNi4xNCw2LjE0LDAsMCwwLTIuMzUsMi44M2MtOSwzLjM3LTE3LjM2LDcuNi0yNCwxNC45NC0zLjEzLDMuNDgtNS4xOCw3LjUtNy40NCwxMS40Ni02LjE3LDQtMTEuMzYsOS4yNi0xNywxNC0xNC43NywxMi40Mi0yOS4zNSwyNS4wNi00NC4xNiwzNy40My0xLjI1LDEtMi4wNywyLjUtMy41MiwzLjMxLTIuNTUtMy44LTItOC0xLjM5LTEyLjEyLDEuODYtMy4wNiw0LjgtNSw3LjQ0LTcuMjhxMjEuNTQtMTguMjcsNDMtMzYuNTljMTQtMTEuODUsMjcuOTItMjMuNzcsNDEuOS0zNS42M3EyNC4xMi0yMC40NSw0OC4xNy00MWM4LjkzLTcuNiwxNy44LTE1LjI2LDI2Ljg2LTIyLjcxLDEuMzctMS4xMywyLjMzLTIsMS4yOC0zLjgxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzVjOTRjZSIvPjxwYXRoIGQ9Ik02MzcuNTEsMzA4LjQxYy0xNy42My04LjU2LTM2LjI3LTEzLjc4LTU1LjU0LTE2LjktNS4xNS0uODQtMTAuMy0xLjg3LTE1LjU1LTEuOTEtNi43Mi00LjI1LTEzLjMxLTguNzMtMjAuMTktMTIuN2EyMDkuNzMsMjA5LjczLDAsMCwwLTcyLjE4LTI1Ljc1LDkuMDksOS4wOSwwLDAsMS0xLjY1LS42NGM3LjY1LTEuNCwzMy42OSwyLjUxLDUxLjcyLDcuNDdhMjQzLjA3LDI0My4wNywwLDAsMSw0OC40NywxOWMtMS42Mi00Ljg1LTQuNTgtOC4xMy02LjM5LTEyLS4xOC0xLTEuNjMtMS45NC0uNjYtM3MyLjA3LjA4LDMsLjQ5YzIuNiwxLjE4LDUuMDgsMi42MSw3LjY5LDMuNzdhMzQ3LjUyLDM0Ny41MiwwLDAsMSw2MS40LDQwLjQ5YzEuMDYsMS40LDEuMDYsMS40LS4xMSwxLjY5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzE2MWY0MiIvPjxwYXRoIGQ9Ik0zNzQuMzIsMTE2LjM4Yy40NiwxLjEsMS45Mi4zLDIuNjEsMS41My00LjE4LDMuNjItOC4zNiw3LjMtMTIuNjEsMTAuOTFxLTExLjUxLDkuNzgtMjMuMDcsMTkuNDhRMzI0Ljg3LDE2Mi4xMywzMDguNSwxNzZjLTcuNTgsNi40NC0xNS4wNSwxMy0yMi42MywxOS40Ni05LjE4LDcuOC0xOC40NSwxNS41MS0yNy42NSwyMy4zLTcuMyw2LjE5LTE0LjUzLDEyLjQ3LTIxLjgyLDE4LjY4LTcuNjcsNi41Mi0xNS4zNywxMy0yMy4wNiwxOS40OWwtNy43MSw2LjQ3LDIuMTktOS43NmMtMS4yNC0zLjE5LDEuMzUtNC42MywzLjEzLTYuMSw3LTUuODQsMTMuODgtMTEuODEsMjAuODMtMTcuNzFxMjQuMjUtMjAuNTgsNDguNDktNDEuMjIsMjAuODQtMTcuNyw0MS42Ni0zNS4zOWMxMi45Mi0xMSwyNS45My0yMS45MSwzOC43Mi0zMy4wNywxLS44NiwyLjg1LTEuODcuMTUtMyw0LjQzLTEuNjEsOS0uMzMsMTMuNTItLjczIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzY0OTdkMCIvPjxwYXRoIGQ9Ik0zNjAuOCwxMTcuMTFjMS4wNS4xOSwyLjItLjM3LDMuMy40OS0yLjY1LDMuOS02LjU1LDYuNDUtMTAsOS40NC05LjgyLDguNTYtMTkuNzksMTctMjkuNzQsMjUuMzctOS4xLDcuNjgtMTguMjksMTUuMjYtMjcuMzcsMjNzLTE4LjIzLDE1Ljc0LTI3LjQsMjMuNTQtMTguMjksMTUuMjctMjcuMzYsMjNTMjI0LDIzNy41OCwyMTQuODcsMjQ1LjQ1Yy0yLjc0LDIuMzctNi4zNyw0LTcuMDUsOC4xNS00Ljg0LjU1LTcuNCw0LjY0LTEwLjk0LDcuMTYtNS41OSw0LTkuODQsOS40Ny0xNSwxMy45NS01LjE5LDMuNjktOS43Nyw4LjEtMTQuNjEsMTIuMi0xNC4zOCwxMi4xOS0yOC43LDI0LjQ2LTQzLjEzLDM2LjU5LTIsMS42OC0zLjc3LDMuNjYtNiw1LjA2LTEsLjYyLTEuOTEsMS43OS0zLjMyLjgxYTE2LjksMTYuOSwwLDAsMSwxLjUxLTcuNTFjNy4xOS00LjU5LDEzLjE3LTEwLjY3LDE5LjY2LTE2LjEsMTcuODgtMTUsMzUuNjEtMzAuMTYsNTMuMzgtNDUuMjlzMzUuMy0zMC4xMyw1My00NS4xNXEyNi0yMiw1MS45NC00NC4wOGMxNy42OC0xNSwzNS40NC0zMCw1My00NS4xNSwzLjQ5LTMsNy4xNi01LjgzLDEwLjU2LTloMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2ODlhZDEiLz48cGF0aCBkPSJNMzk5LjgxLDExNy44N2M0LjA3LS4wNSw4LDEsMTIsMS41LDEuMDksMi4zOS0xLDMuMzItMi4yMyw0LjQzLTUsNC4zNy0xMC4yMyw4LjQ4LTE1LjEsMTMtLjUyLS42OS0xLjA4LTEuMzYtMS41Ni0yLjA5LTEuMTEtMS42NS0xLjg5LTEuMjEtMi42MS4zMy01LjksMTIuNjYtMTYuMDUsMjEuNDYtMjcuMSwyOS4zYTIwMi4xNCwyMDIuMTQsMCwwLDEtMzkuODcsMjEuNzljLS43Ni0xLjQ0LS44My0xLjUuNDctMi44NCwyLjY5LTIuNzgsNS43Ny01LjE0LDguNzItNy42NCwyMS4yOS0xOC4xLDQyLjY0LTM2LjEyLDYzLjgxLTU0LjM3LDEuMjMtMS4wNywyLjI5LTIuMywzLjQ3LTMuNDEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNGU4ZmNjIi8+PHBhdGggZD0iTTM5OS44MSwxMTcuODdhNC41NSw0LjU1LDAsMCwxLTEuNzUsMy4xNHEtMjAuNiwxNy40My00MS4xMywzNC45My0xNS43MiwxMy40LTMxLjM2LDI2Ljg5Yy0uOTQuODItMi43MSwxLjQtMi4yMywzLjNhMTg3LjQsMTg3LjQsMCwwLDEtMjAuMjcsOC4yNGMtMi4zMy0uNjQtLjQtMS40NywwLTEuODUsNC4wOS0zLjYyLDguMjMtNy4xOCwxMi4zOS0xMC43MnExMS40Ny05Ljc1LDIzLTE5LjQ3YzcuNTctNi40LDE1LjE4LTEyLjc3LDIyLjczLTE5LjE5czE1LjEyLTEyLjg3LDIyLjU3LTE5LjQyYzIuNDEtMi4xMiw1LjM2LTMuNjgsNy02LjU5LDMuMDYtLjQ0LDYsLjYsOSwuNzQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNTU5MWNkIi8+PHBhdGggZD0iTTM0Ni42MSwyMDhjNy45Mi0zLjkyLDE2LjE5LTcuMjEsMjMuMS0xMi45MywxLjQ0LS4wNiwxLjI4Ljc2Ljk0LDEuNjktNi4zOCwyNi40Mi0yNi40Miw0My43Ny01My41Miw0Ni4zLTUuMjIuNDktMTAuNDMsMS4wOS0xNS42OS41OS42OC0xLjkzLDIuNTEtMS43Niw0LTIuMTcsNS44OC0xLjYsMTEuNzEtMy4zMSwxNy4xNi02LjEzLDEwLjIyLTUuMjgsMTcuNzEtMTMuMDcsMjItMjMuODRhOC4yMiw4LjIyLDAsMCwxLDIuMDUtMy41MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMxNjFmNDIiLz48cGF0aCBkPSJNMzQ2LjYxLDIwOGMtMy4yNiwxMi42LTExLjI5LDIxLjMxLTIyLjM5LDI3LjU1LTcuMTMsNC0xNSw1Ljg2LTIyLjc3LDguMS0xLjkxLTUuNTkuMTYtMTAuMzIsMy41Mi0xNC41NywzLjk0LTUsOS4zLTguMDgsMTUtMTAuNjlBMjc3LjA4LDI3Ny4wOCwwLDAsMSwzNDYuNjEsMjA4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQxOGFjOSIvPjxwYXRoIGQ9Ik0xMTQuOCwzMjkuMzdjNC40NS0xLjY1LDcuMzEtNS40MSwxMC44MS04LjI4LDExLjI5LTkuMjcsMjIuMzgtMTguNzgsMzMuNTEtMjguMjQsNS44NS01LDExLjYxLTEwLjA1LDE3LjQxLTE1LjA4LDEuNTgtMS4zNywzLjA1LTIuOTQsNS4zNC0zLjA2LTYsNy41Mi0xMS43MywxNS4yNC0xNiwyMy45M3EtMTcuMjUsMTQuNi0zNC40NCwyOS4yN2MtNS4zLDQuNTMtMTAuNzEsOC45NC0xNS45MywxMy41Ny0uOC43MS0xLjcsMS42LTIuOTQuNjRhNTQuMTMsNTQuMTMsMCwwLDEsMi4yNC0xMi43NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2NDk3ZDAiLz48cGF0aCBkPSJNMTU4LjgxLDM0OS41OGMtMy41NC4yNy01LjE0LDMuNDQtNy40OCw1LjMzLTkuODUsNy45NS0xOS40NSwxNi4yMi0yOSwyNC40OS0zLjIsMi43Ni02LjMsNS42Mi05LjY5LDguMTYtMi4yMywxLjY4LTMuMDcsMS0zLTEuNTgsMC0zLjEyLDAtNi4yNCwwLTkuMzYsMy40Ni0zLjc1LDcuNjEtNi43MiwxMS40OC0xMCwxMS4xNy05LjQ4LDIyLjIzLTE5LjEsMzMuNTUtMjguNDIsMS0uOCwxLjc5LTIuMjYsMy40Ni0xLjMxbC43NSwxMi42OSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0NjhjY2EiLz48cGF0aCBkPSJNMjA3LDI3NS40OGE0LjE3LDQuMTcsMCwwLDEsMS45MS0zLjA4YzktNy42LDE4LTE1LjE1LDI3LTIyLjc2LDcuMzktNi4yNSwxNC43Mi0xMi41NiwyMi4wNy0xOC44NywzLjg2LTMuMzEsNy42OS02LjY2LDExLjUyLTEwLC43My0uNjQsMS40MS0xLjEyLDIuMTIsMC0uODMsMy40MS0xLjgyLDYuNzktMS43MiwxMC4zNS00LDQuNDMtOC44OSw3LjkzLTEzLjQyLDExLjgtMTQsMTItMjcuOTUsMjMuOTMtNDIsMzUuNzZhMTEuMzQsMTEuMzQsMCwwLDAtMS40OCwxLjY4LDcuOTMsNy45MywwLDAsMS02LTQuODgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNTU5MWNkIi8+PHBhdGggZD0iTTExMi41NiwzNDIuMTJjMy4yNC0xLDUuMTMtMy44MSw3LjU2LTUuODIsMTMuMTctMTAuODksMjYuMTMtMjIsMzkuMTctMzMuMDgsMi4wNS0xLjczLDMuNDktNC4zMyw2LjU4LTQuNThhMTUwLjg5LDE1MC44OSwwLDAsMC02LDE4Yy0yLjM0LS4yMy0zLjUzLDEuNjQtNSwyLjg4LTEzLjU4LDExLjY3LTI3LjI4LDIzLjItNDAuOTIsMzQuOC0uODIuNjktMS41NSwxLjcxLTIuODksMS4yNmE0NC44OCw0NC44OCwwLDAsMSwxLjUtMTMuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM1Yzk0Y2UiLz48cGF0aCBkPSJNMjEzLDI4MC4zNmMtLjkzLTEuNjguNjUtMi4yMywxLjQ3LTIuOTNxMTcuMi0xNC43MSwzNC40OS0yOS4zNCw5Ljc3LTguMjgsMTkuNTktMTYuNDlhNC4xNiw0LjE2LDAsMCwxLDEuMzgtLjQ3LDI5LjkyLDI5LjkyLDAsMCwwLDEuMzgsOWMtMy45Myw0LjU2LTguODcsOC0xMy4zOSwxMS44NnEtMTUuMTMsMTMtMzAuNDUsMjUuOTNhMy41LDMuNSwwLDAsMC0xLjU0LDJjLTQuMjYsMS41OC04LjU2LDIuMjEtMTIuOTMuNDEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNGU4ZmNjIi8+PHBhdGggZD0iTTE1OC4wNiwzMzYuODljLTQuMjEsMi40MS03LjU3LDUuOTEtMTEuMjcsOS05Ljc2LDgtMTkuMzcsMTYuMjUtMjguOTQsMjQuNS0yLjY0LDIuMjgtNSw0LjgyLTguMjgsNi4yNy4zOS00LS44NC04LjA4Ljc0LTEycTIyLjE3LTE4Ljk0LDQ0LjQ2LTM3Ljc2YzEtLjg2LDIuMDYtMS45MSwzLjY0LTEuMjMtLjEyLDMuNzUtLjIzLDcuNS0uMzUsMTEuMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNGU4ZmNjIi8+PHBhdGggZD0iTTE1OC40MSwzMjUuNjNjLTQuNzUsMi41NS04LjQyLDYuNS0xMi41Miw5Ljg4LTkuNjgsNy45NS0xOS4xNCwxNi4xNi0yOC43MywyNC4yMi0yLjE0LDEuODEtMy42NCw0LjU2LTYuODUsNC44OS4zOC0zLS44LTYuMTEuNzUtOXExNC0xMiwyOC4wNi0yMy45MmM2LjM0LTUuMzksMTIuNzQtMTAuNzEsMTkuMDctMTYuMSwyLTEuNzIsMS40Ny4xNywxLjY1LDEuMDhaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzU1OTFjZCIvPjxwYXRoIGQ9Ik0yMjYsMjgwYy0xLjM4LTEtLjQxLTEuNzQuMzItMi4zNSw4LjgyLTcuNCwxNy42OC0xNC43NSwyNi40OS0yMi4xNiw1LjUtNC42MywxMC45My05LjM0LDE2LjM3LTE0YTMuNjYsMy42NiwwLDAsMSwyLjItMS4yOGwyLjI1LDQuNDljLTEuNzMsMi42Ny00LjUsNC4zMy02LjQ1LDYuNzktMTAuODMsMTItMjIuOTUsMjIuMTQtMzguMjksMjcuOTFBMTkuNTMsMTkuNTMsMCwwLDEsMjI2LDI4MCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0ODhkY2EiLz48cGF0aCBkPSJNMzk0LjQ4LDEzNi44YzEuMzYtNC4yNSw1Ljc3LTUuNDcsOC4zOC04LjQ3LDIuNzgtMy4xOSw3LjMzLTQuNjEsOC45NS05LDMuMjYsMCw2LjM4Ljg2LDkuNTUsMS40NSwyLjc0LjUxLDIuODYsMS43LDEsMy4zOS00LjA4LDMuNjQtOC4yLDcuMjYtMTIuMzQsMTAuODItMy44NiwzLjMyLTcuNzgsNi41Ny0xMS42OCw5Ljg1WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM0NjhjY2EiLz48cGF0aCBkPSJNMjA5LjM3LDMwNy44MWMuNjYsMS42Ni0xLjMzLDIuNDktMS4xLDQtMS00LjU2LTMuNTEtNi4zMy04LjA4LTUuNDJhMjMuNjUsMjMuNjUsMCwwLDAtMTIuNjQsNy4zNWMtLjk0LDEtMiwxLjg5LTMsMi44NC0uODItMSwwLTEuODcuMzMtMi43NiwyLTYuNTEsNi4zOS0xMS4xNCwxMS45My0xNC44M2ExMi41NywxMi41NywwLDAsMSw0LjA2LTEuODVjNi40Mi0xLjUzLDkuOTQsMS42MSw5LjA2LDguMTJhOC4yOCw4LjI4LDAsMCwxLS42MSwyLjUzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQyOGFjOSIvPjxwYXRoIGQ9Ik0yMDkuMzcsMzA3LjgxYzAtMSwuMDYtMiwuMDctMywuMTEtNi41NC0zLjYtOS05LjY3LTYuMjUtNywzLjItMTEuNDIsOC45Mi0xNC40OSwxNS43OS0uNzEuMTMtMS4wOC0uMDctLjg2LS44NiwyLjIxLTguMTYsNi40Ny0xNC45MiwxMy41Ni0xOS43M2ExNC44MiwxNC44MiwwLDAsMSw1Ljg1LTIuMjgsNi4yNSw2LjI1LDAsMCwxLDcuNDEsNC42MSwxNC44OCwxNC44OCwwLDAsMS0xLjg3LDExLjciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjMTgyMTQ0Ii8+PHBhdGggZD0iTTI2Ny4xMywyNTEuNDFjLTEuMjYtMS0uMTUtMS40LjUyLTEuODcsMi4xMS0xLjQ3LDMuMjctNC4xLDUuOTMtNC45MiwzLjQsNS4zOCw4LjgzLDcuNzUsMTQuNDksOS43NywxLjE0LjQxLDIuMzMuNjcsNC4xOSwxLjE5LTguNzIsMi4yNy0xNi4yNCwxLjM5LTIzLjE1LTMuMzNhMywzLDAsMCwwLTItLjg0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQ1OGNjYSIvPjxwYXRoIGQ9Ik01NzYuMjIsMjY2LjIzYy0yLjc1LS4zMi00Ljg0LTIuMi03LjM0LTMuMTMtMS0uMzYtMS44OS0xLjY0LTIuOTItLjgtLjg1LjcuNTQsMS43NC4yNCwyLjcxLTEuNTMtMS4zNC0yLjA2LTMuMjYtMi44Ni01LjIxLDQuNDYsMS44NSw4LjkxLDMuNjQsMTIuODgsNi40MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2MzY1N2QiLz48cGF0aCBkPSJNNjM3LjUxLDMwOC40MWMuODEtLjUxLDAtMS4xMy4xMS0xLjY5bDQuMzUsMi4zNiwyLjM0LDNjLTIuODUtLjc2LTQuNzgtMi4zMS02LjgtMy42NyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMyNjMxNTQiLz48cGF0aCBkPSJNNDY1LjE5LDI0OS4yNmExNC4yNiwxNC4yNiwwLDAsMSw2LC40NWMtMi4zMiwxLjI2LTMuOTIsMS4wOS02LS40NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiNhMDlhYTkiLz48cGF0aCBkPSJNMTc3LjgxLDU5Ni4zNmMyLjMzLjQyLDMuMzksMi42Nyw1LjMsMy43TDE4Myw2MDFhMTQuMjIsMTQuMjIsMCwwLDEtNS4yMS00LjU5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzQyNGE3ZiIvPjxwYXRoIGQ9Ik02NTQuMTcsNDUzLjA3bDEuMzQuNzVjLjE5LDEuNTEtLjQ1LDIuNzUtMS4zNCw0LjZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzhjYjdkZSIvPjxwYXRoIGQ9Ik00NjUsMTM1Ljc5Yy41MSwxLjE1LDEuNjYuNjgsMi41LDFsLTQsMS41NWMtLjMxLTEuNTkuNzctMS45NSwxLjUxLTIuNTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNWE1ZDc2Ii8+PHBhdGggZD0iTTE4NC40MiwzMTMuNTFsLjg2Ljg2Yy0uMjMuNzQtLjQ1LDEuNDktLjY4LDIuMjNMMTgzLDMxOC42N2MuNDgtMi40Mi41MS0zLjksMS40My01LjE2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzRmNjY4YSIvPjxwYXRoIGQ9Ik0zNzAuNjUsMTk2LjczYy0uMjItLjYyLS4xMy0xLjQtLjk0LTEuNjkuMjQtLjU4Ljg5LTEuMzksMS4xOS0xLjEuOS44Ny41MiwxLjkxLS4yNSwyLjc5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzU1NWE3MyIvPjxwYXRoIGQ9Ik0xMTcuOCwzMTUuODZhNjEuNDQsNjEuNDQsMCwwLDEsNC41LTE1Ljc3YzguODItNi4xNSwxNi41OC0xMy42LDI0Ljc5LTIwLjVxMjEuMzUtMTgsNDIuNTMtMzYuMTQsMTkuMzUtMTYuNTUsMzguNzktMzMsMjEtMTcuOCw0Mi0zNS42NmMxMi43NC0xMC44MywyNS41Mi0yMS42MywzOC4yMS0zMi41Myw4LjktNy42NSwxOC0xNS4wNywyNi43NC0yMi44OGE1Myw1MywwLDAsMSwxNC4yNC0xLjUyLDEuNDQsMS40NCwwLDAsMSwxLjU0LS4xOGMxLjA2LDEuODEtLjI5LDIuODQtMS4zOSwzLjc2cS0xOC4xMywxNS4zNi0zNi4xOSwzMC44MVEyOTQuMjgsMTY4LjYzLDI3NSwxODVxLTE3Ljc5LDE1LjE4LTM1LjY0LDMwLjI5UTIxNy43LDIzMy42NywxOTYsMjUyLjFjLTE4LDE1LjI1LTM1Ljg4LDMwLjU5LTUzLjksNDUuNzktNyw1Ljg3LTEzLjgxLDExLjg4LTIwLjg3LDE3LjYzLS44OC43MS0yLjA3LDMtMy40Ny4zNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2ZDljZDIiLz48cGF0aCBkPSJNMzM1LjMxLDExOS4zOGMtMS4yNiw0LjIxLTUuMzMsNS43OS04LjIyLDguMzYtOS40Nyw4LjQyLTE5LjI2LDE2LjQ5LTI4Ljk0LDI0LjY3LTEwLjgzLDkuMTMtMjEuNzIsMTguMi0zMi41MSwyNy4zOC05LjM4LDgtMTguNjIsMTYuMTEtMjgsMjQuMS05LjA5LDcuNzQtMTguMjksMTUuMzQtMjcuMzgsMjMuMDZzLTE4LjExLDE1LjU1LTI3LjIxLDIzLjI4LTE4LjI1LDE1LjM3LTI3LjM1LDIzLjA5Yy03LjQ5LDYuMzYtMTQuOTIsMTIuNzktMjIuMzksMTkuMTYtMywyLjU4LTYuMTEsNS4xLTkuMTYsNy42NS0uNjYuNTUtMS4yNi44Mi0xLjg2LDBhNjAsNjAsMCwwLDEsNS4yNS0xNWM2LjktNC4zNSwxMi42Ny0xMC4xLDE4Ljg2LTE1LjMycTIxLjMzLTE4LDQyLjUxLTM2LjEzLDIxLjkyLTE4Ljc1LDQzLjkyLTM3LjM5LDE4LjEtMTUuNDIsMzYuMjUtMzAuNzljMTUuNzMtMTMuMywzMS4zMy0yNi43Niw0Ny4xMy00MGE2Ljk0LDYuOTQsMCwwLDAsMi41OC0zLjEzYzUuMzEtMi4wNiwxMS0xLjkzLDE2LjUxLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjNzI5ZmQ0Ii8+PHBhdGggZD0iTTMxOC44LDEyMi4zNmMyLjMzLjYxLjQzLDEuNDYsMCwxLjg1LTQuMjUsMy44Mi04LjU0LDcuNjEtMTIuODksMTEuMzEtNy41Nyw2LjQzLTE1LjIsMTIuNzktMjIuNzksMTkuMnEtMTYuNjcsMTQtMzMuMjksMjguMTNjLTkuMDksNy43My0xOC4wOCwxNS41Ni0yNy4xNiwyMy4yOS05LjM2LDgtMTguNzksMTUuODUtMjguMTYsMjMuODItOS4wOCw3LjczLTE4LjA5LDE1LjU0LTI3LjE3LDIzLjI3UzE0OS4xLDI2OC42MSwxNDAsMjc2LjI5Yy0zLjMzLDIuOC02LjY0LDUuNjItMTAsOC4zNy0uNjYuNTQtMS4zNywxLjc2LTIuNDQuNDQsMS01LjE2LDMuNzItOS42MSw2LTE0LjI0LDEyLjMzLTEwLjU0LDI0LjcyLTIxLDM3LjA2LTMxLjU2cTE5LjA4LTE2LjI5LDM4LjIxLTMyLjUyLDE4LjI1LTE1LjUzLDM2LjUzLTMxUTI2NC42LDE1OS4zOSwyODMuODYsMTQzYzYuNjUtNS42NCwxMy4wOS0xMS41NCwxOS45NS0xNyw0Ljc1LTIuMjEsOS45LTIuODMsMTUtMy43MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM3OGEyZDUiLz48cGF0aCBkPSJNMzAzLjgxLDEyNi4wN2MtNC43Niw2LjE5LTExLjIyLDEwLjU1LTE3LDE1LjYzLTcuNTcsNi42NC0xNS4zMiwxMy4wNS0yMywxOS41NS03LjQ5LDYuMzQtMTUsMTIuNjUtMjIuNDksMTlTMjI2LjM5LDE5MywyMTguOSwxOTkuNHMtMTUuMjEsMTIuOC0yMi43OSwxOS4yM2MtNy4zOSw2LjI4LTE0LjcxLDEyLjYzLTIyLjEsMTguOTFxLTE0LjA2LDEyLTI4LjE3LDIzLjg1Yy0zLjMyLDIuODEtNi42Niw1LjYtMTAsOC40YTMuNDMsMy40MywwLDAsMS0yLjMyLDEuMDcsOTkuOTMsOTkuOTMsMCwwLDEsOS0xOGMxNy4xMi0xMy45MSwzMy43Ny0yOC40LDUwLjU3LTQyLjcsMTkuNDUtMTYuNTcsMzktMzMsNTguMzQtNDkuNzMsMTAuOTQtOS40NSwyMi4zLTE4LjQxLDMyLjg1LTI4LjMyYTExMy40MywxMTMuNDMsMCwwLDEsMTkuNS02IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzdkYTVkNiIvPjxwYXRoIGQ9Ik0yODQuMzEsMTMyLjExYy43NSwxLjM0LS42LDEuNzQtMS4xOCwyLjI2cS0xMi40OCwxMC45NC0yNS4wNiwyMS43M2MtNy4zNSw2LjMxLTE0Ljc3LDEyLjU0LTIyLjE2LDE4LjhxLTEzLjc4LDExLjY3LTI3LjU4LDIzLjM0Yy03LjQ3LDYuMzUtMTQuOSwxMi43Ni0yMi4zOCwxOS4xMS05LjM3LDgtMTguNzgsMTUuODctMjguMTUsMjMuODJxLTUuODQsNS0xMS42MSwxMGE2LjQ1LDYuNDUsMCwwLDEtMy42NCwxLjc0LDE1OS4yNiwxNTkuMjYsMCwwLDEsMTYuNTItMjYuMjRjNS44LTQuMjcsMTEuMS05LjE2LDE2LjU5LTEzLjgxcTIxLjM5LTE4LjEyLDQyLjcyLTM2LjMyLDE2LjUtMTQuMDYsMzMtMjguMTRjMS43LTEuNDUsMy44My0yLjM4LDUuMTMtNC4yOSw4LjcyLTUuMjgsMTguMy04LjUzLDI3LjgyLTExLjk1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzgxYTdkOCIvPjxwYXRoIGQ9Ik00NDIuNTUsNDY2LjY0Yy03LjU1LDYuMTYtMTQuOTUsMTIuNTQtMjUsMTYuODFhODguODYsODguODYsMCwwLDAsNi42My0xOC4yNGM1LjkyLTI2LC40My00OS42Ni0xNC44Ny03MS4yNC0zLjc4LTUuMzItOC44Ni05LjQ0LTEzLjM2LTE0LjA5LS43My0uNzUtMS41Mi0xLjY5LTIuODMtMS4wNi0xLjM1LS42Ni0yLTItMy0zLC42NS0uODMsMS4zMi0uMzcsMiwwLDE4LjEzLDEwLjI4LDMzLjI0LDIzLjYyLDQyLjQ3LDQyLjY5YTg1LjIzLDg1LjIzLDAsMCwxLDguMTgsMzAsODYuODYsODYuODYsMCwwLDEtLjE3LDE4LjE3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMuNzggLTIzLjc3KSIgZmlsbD0iIzBlMWY2NiIvPjxwYXRoIGQ9Ik0xMTcuOCwzMTUuODZjMywxLjA4LDQtMS45MSw1LjU0LTMuMTQsMTUuMjEtMTIuNTksMzAuMjEtMjUuNDQsNDUuMjMtMzguMjYsMTQuMTctMTIuMSwyOC4yNS0yNC4zMSw0Mi40NS0zNi4zOCwxNS44MS0xMy40MywzMS43NC0yNi43LDQ3LjU1LTQwLjEzLDE0LjItMTIuMDcsMjguMjgtMjQuMjcsNDIuNDQtMzYuMzhRMzI0LDE0MiwzNDcsMTIyLjRjMS41Ny0xLjM0LDMuODMtMiw0LjExLTQuNTMuODYtLjgyLDIuMTMuMDgsMy0uNzNsMy43NiwwYy0xLjE1LDQtNSw1LjM5LTcuNyw3LjgxLTcuNzYsNy0xNS44NSwxMy41OS0yMy44MiwyMC4zMy05LjExLDcuNy0xOC4yNiwxNS4zNi0yNy4zNiwyMy4wOC03LjM5LDYuMjctMTQuNzIsMTIuNjItMjIuMTIsMTguOS0xMC45LDkuMjQtMjEuODUsMTguNDItMzIuNzQsMjcuNjctNy40LDYuMjgtMTQuNzIsMTIuNjQtMjIuMSwxOC45Mi05LjM4LDgtMTguOCwxNS44OC0yOC4xOCwyMy44NS03LjM5LDYuMjgtMTQuNzEsMTIuNjQtMjIuMSwxOC45Mi03LjU3LDYuNDQtMTUuMjEsMTIuODEtMjIuNzgsMTkuMjVzLTE1LjA4LDEzLTIyLjY1LDE5LjQzYy0yLjY0LDIuMjUtNS4zOCw0LjQtOC4wOCw2LjYtLjY0LjUyLTEuMjUuODUtMS44NywwYTExLjc1LDExLjc1LDAsMCwxLDEuNDktNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2OTlhZDEiLz48cGF0aCBkPSJNMjU2LjQ5LDE0NC4wNmMtLjYzLDMuNTUtNC4wOSw0LjQ4LTYuMjksNi40Ni03LjY2LDYuODktMTUuNjMsMTMuNDMtMjMuNDksMjAuMDgtOS4yLDcuNzctMTguNDIsMTUuNS0yNy42LDIzLjI5LTcuMzksNi4yNi0xNC43MywxMi41OS0yMi4wOCwxOC44OXEtOC4wNiw2LjktMTYuMSwxMy44M2MtLjYzLjU0LTEuMjQuODctMS44NiwwYTE0MS43MiwxNDEuNzIsMCwwLDEsMTMuMTQtMTcuMTFjMTcuNjUtMjAuNSwzNy43LTM4LjMsNjAuNzMtNTIuNiw3LjYtNC43MSwxNS4xNC05LjYsMjMuNTUtMTIuODUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43OCAtMjMuNzcpIiBmaWxsPSIjODhhYmQ5Ii8+PHBhdGggZD0iTTM4Ni4zMiwxMTcuMTJjLTIuNDktLjMzLTUuMTMuNzctNy41LS43NCwyLjQ5LjMyLDUuMTItLjc4LDcuNS43NCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM1NTkxY2QiLz48cGF0aCBkPSJNMzU0LjA1LDExNy4xNGMtLjc5LDEuMDctMiwuNjItMywuNzNoLTEuNTFjMS4zMy0xLjMsMy0uNTIsNC41LS43MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiM2ODlhZDEiLz48cGF0aCBkPSJNMjgyLjA2LDYzOS4xMmExODIuMywxODIuMywwLDAsMCw3MS44MS0xMS4zMSwyMTQsMjE0LDAsMCwwLDYxLjYxLTM0LjY3YzE4LjA5LTE0LjY4LDMzLjY2LTMxLjUzLDQ0LjA2LTUyLjYxYTEwMS4zNiwxMDEuMzYsMCwwLDAsMTAuMjItMzZjMS0xMS4zMS0uODgtMjItMy45NS0zMi42NC4zNC0yLjYxLDIuNzItMy44LDQuMTEtNS42Myw1LjM4LTcuMDcsOS4zNS0xNC42OSwxMS0yMy40NmEyNy40MywyNy40MywwLDAsMSwxLjIxLTMuNDMsMTExLDExMSwwLDAsMSw4LDIxLjE2YzIuNjMsMTAuMzEsNC4xMSwyMC44LDMuMzMsMzEuNGExMjMuMzEsMTIzLjMxLDAsMCwxLTE2LjA2LDUyLjMyYy05LjE2LDE2LjE1LTIxLDMwLTM0LjYsNDIuMzdhMTk5Ljg5LDE5OS44OSwwLDAsMS0zOS4zNywyNy41NCwyMTkuNSwyMTkuNSwwLDAsMS01NC4yNiwyMC43MSwyMDkuMjcsMjA5LjI3LDAsMCwxLTM2LjA1LDUuMmMtNS44NS4zMy0xMS43MS44My0xNy41Mi40Ni00LjUxLS4yOS05LjE0LDAtMTMuNTYtMS4zNyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjc4IC0yMy43NykiIGZpbGw9IiMwZTFmNjYiLz48L2c+PC9zdmc+",protocol:"uniswap_v2",slippage:!0,blockchains:["polygon"],polygon:{router:{address:"0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff",api:kx.ROUTER},factory:{address:"0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32",api:kx.FACTORY},pair:{api:kx.PAIR}}};var PS=t=>new bx(Object.assign(_S,{scope:t,findPath:t=>kx.findPath({...t,exchange:_S}),pathExists:t=>kx.pathExists({...t,exchange:_S}),getAmounts:t=>kx.getAmounts({...t,exchange:_S}),getPrep:t=>kx.getPrep({...t,exchange:_S}),getTransaction:t=>kx.getTransaction({...t,exchange:_S})}));const BS={name:"spookyswap",label:"SpookySwap",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNjQxIDY0MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQxIDY0MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGZpbGw9IiMxMjExMjIiIGQ9Ik0zNC4yLDMyMGMwLDE1OC41LDEyOC41LDI4Ni4zLDI4Ni4zLDI4Ni4zYzE1OC41LDAsMjg2LjMtMTI4LjUsMjg2LjMtMjg2LjNjMC0xNTguNS0xMjguNS0yODYuMy0yODYuMy0yODYuMwoJCUMxNjIuNywzMy43LDM0LjIsMTYyLjIsMzQuMiwzMjBMMzQuMiwzMjB6Ii8+Cgk8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI0YyRjRGOCIgZD0iTTEyMC45LDI0Ny42Yy0zLjMsMjIuMiwwLjcsNDUuNyw0LjYsNjcuOGMyLDMuMyw1LjIsNS45LDkuOCw3LjJjLTkuMSwxOS42LTE0LjMsNDAuNC0xNC4zLDYyLjYKCQljMCw5My4zLDkwLDE2OC45LDIwMS41LDE2OC45UzUyNCw0NzguNSw1MjQsMzg1LjJjMC0yMS41LTUuMi00My0xNC4zLTYyLjZjMy45LTEuMyw2LjUtMy45LDcuOC03LjJjNC42LTIyLjIsOC41LTQ1LjcsNS4yLTY3LjgKCQljLTMuMy0zMC0xMy43LTM5LjgtNDUtMzJjLTE1LjcsMy45LTM2LjUsMTMtNTIuOCwyNC4xYy0zMC0xNS02NS4yLTIzLjUtMTAyLjQtMjMuNWMtMzcuOCwwLTczLjcsOS4xLTEwMy43LDI0LjEKCQljLTE2LjMtMTEuMS0zNy4yLTIwLjktNTMuNS0yNC44QzEzNCwyMDcuOCwxMjQuMiwyMTcuNiwxMjAuOSwyNDcuNkwxMjAuOSwyNDcuNnogTTIzOC4zLDM4MC43Yy0yMy41LTEwLjQtNjMuOS03LjgtNjMuOS03LjgKCQlzMiwzNy44LDI0LjgsNTAuOWMyNy40LDE1LDc4LjksNy44LDc4LjksNy44UzI3My41LDM5Ni4zLDIzOC4zLDM4MC43TDIzOC4zLDM4MC43eiBNMzY5LjQsNDMyLjJjMCwwLDUwLjksNy44LDc4LjktNy44CgkJYzIzLjUtMTMsMjQuOC01MC45LDI0LjgtNTAuOXMtNDAuNC0yLjYtNjMuOSw3LjhDMzc0LDM5Ni4zLDM2OS40LDQzMS41LDM2OS40LDQzMi4yTDM2OS40LDQzMi4yeiBNMzEyLjcsNDU4LjkKCQljMCwyLjYsNS4yLDUuMiwxMS43LDUuMnMxMS43LTIsMTEuNy01LjJjMC0yLjYtNS4yLTUuMi0xMS43LTUuMkMzMTcuOSw0NTMuNywzMTIuNyw0NTUuNywzMTIuNyw0NTguOUwzMTIuNyw0NTguOXoiLz4KCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRjJGNEY4IiBkPSJNNTUyLjcsNDM1LjRjLTE4LjktNy4yLTM5LjEtMTEuMS01OS4zLTExLjFjLTUuMiwwLTUuMi03LjgsMC03LjhjMjAuOSwwLDQxLjcsMy45LDYxLjMsMTEuNwoJCWMyLDAuNywzLjMsMi42LDIuNiw0LjZDNTU2LjYsNDM0LjgsNTU0LjYsNDM2LjEsNTUyLjcsNDM1LjRMNTUyLjcsNDM1LjR6IE05Mi4yLDQyNy42YzE5LjYtNy44LDQwLjQtMTEuMSw2MS4zLTExLjcKCQljNS4yLDAsNS4yLDcuOCwwLDcuOGMtMjAuMiwwLTQwLjQsMy45LTU5LjMsMTEuMWMtMiwwLjctNC42LTAuNy01LjItMi42Qzg5LDQzMC45LDkwLjMsNDI4LjMsOTIuMiw0MjcuNkw5Mi4yLDQyNy42eiBNMTMyLjcsNDUwLjQKCQljOS44LTMuMywyMC4yLTQuNiwzMC01LjJjNS4yLDAsNS4yLDcuOCwwLDcuOGMtOS4xLDAtMTguOSwyLTI3LjQsNC42Yy04LjUsMi42LTE3LjYsNS45LTI0LjEsMTEuN2MtMy45LDMuMy05LjEtMi01LjktNS45CgkJQzExMy4xLDQ1NywxMjMuNSw0NTMuNywxMzIuNyw0NTAuNEwxMzIuNyw0NTAuNHogTTE3MS44LDQ2NS40Yy03LjgsMy4zLTE1LjcsNy44LTIyLjgsMTIuNGMtNy4yLDQuNi0xMy43LDEwLjQtMTguOSwxNwoJCWMtMS4zLDItMC43LDQuNiwxLjMsNS4yYzIsMS4zLDQuNiwwLjcsNS4yLTEuM2M0LjYtNS45LDExLjEtMTEuMSwxNy0xNWM3LjItNC42LDE0LjMtOC41LDIxLjUtMTEuN2MyLTEuMywyLjYtMy4zLDEuMy01LjIKCQlDMTc2LjQsNDY0LjgsMTczLjgsNDY0LjEsMTcxLjgsNDY1LjRMMTcxLjgsNDY1LjR6IE00ODMuNSw0NTMuN2M5LjEsMCwxOC45LDIsMjcuNCw0LjZjNC42LDEuMyw5LjEsMy4zLDEzLjcsNS4yCgkJYzMuOSwxLjMsNy4yLDMuOSwxMC40LDYuNWMzLjksMy4zLDkuMS0yLDUuOS01LjljLTcuMi02LjUtMTcuNi0xMC40LTI2LjctMTNjLTkuOC0zLjMtMjAuMi00LjYtMzAtNS4yCgkJQzQ3OSw0NDUuMiw0NzksNDUzLjcsNDgzLjUsNDUzLjdMNDgzLjUsNDUzLjd6IE00OTIuNyw0ODMuN2MtNy4yLTQuNi0xNC4zLTcuOC0yMS41LTExLjFsMCwwYy0yLTEuMy0yLjYtMy4zLTEuMy01LjIKCQljMS4zLTIsMy4zLTIuNiw1LjItMS4zYzE1LjcsNi41LDMyLDE1LjcsNDEuNywyOS4zYzEuMywyLDAuNyw0LjYtMS4zLDUuMmMtMiwxLjMtNC42LDAuNy01LjItMS4zCgkJQzUwNS43LDQ5Mi44LDQ5OS4yLDQ4Ny42LDQ5Mi43LDQ4My43TDQ5Mi43LDQ4My43eiIvPgoJPHBhdGggZmlsbD0iIzY2NjVERCIgZD0iTTYyLjIsMzM1LjdjMy45LTUuOSwzNS45LTIyLjgsNzUuNy0zMy4zYzguNS0yNC44LDE5LjYtNDguMywzMi03MS4xbDMyLTU4Yy05LjEtMy45LTE4LjMtOS4xLTI2LjctMTUKCQljLTEuMy0xLjMtMi42LTIuNi0zLjktMy45Yy0wLjctMS4zLTEuMy0zLjMtMS4zLTQuNnMyLTMuOSwyLjYtNC42YzItMi42LDQuNi00LjYsNy4yLTcuMmM1LjktNS4yLDEyLjQtOS44LDE5LjYtMTMuNwoJCWMzLjMtMiw2LjUtMy45LDkuOC02LjVjMjIuOC0xNC4zLDM1LjktMjUuNCw1Ni43LTM3LjhjMjAuMi0xMS43LDMwLTE4LjMsNTIuOC0xNy42YzI5LjMsMCwxMDEuNyw5Mi42LDEzNC4zLDE0MC4yCgkJYzE5LjYsMjguNyw0Ni4zLDgwLjIsNTYuMSw5OS44YzIsMC43LDQuNiwxLjMsNi41LDJjMzAsOS4xLDU4LjcsMjIuMiw2NS45LDMwLjdjNi41LDcuMi0yMS41LDEwLjQtNDguOSwxNS43CgkJYy0yNy40LDQuNi0xMjAuNyw3LjItMjEwLDcuOGMtODkuMywwLjctMTkzLjctMi42LTIxNi41LTUuOUM4My4xLDM0OS4zLDU3LjcsMzQyLjgsNjIuMiwzMzUuN0w2Mi4yLDMzNS43eiIvPgoJPHBhdGggZmlsbD0iI0ZGOTlBNSIgZD0iTTQ4My41LDI1Ni4xYzAsMC01OC43LTE1LTE2Mi40LTE1Yy0xMTEuNSwwLTE2NSwxNy0xNjUsMTdzLTYuNSwxMi40LTkuMSwxOC45Yy0yLjYsNy4yLTkuMSwyNS40LTkuMSwyNS40CgkJUzIxOC44LDI4OCwzMjIuNSwyODhjNjIuNiwwLDEyNC42LDUuMiwxODYuNSwxNS43YzAsMC05LjEtMjIuMi0xNS0zMS4zQzQ5MC43LDI2Ny4yLDQ4Ny41LDI2MS4zLDQ4My41LDI1Ni4xTDQ4My41LDI1Ni4xeiIvPgoJPHBhdGggZmlsbD0iI0ZGRTYwMCIgZD0iTTEzMy4zLDEzMS41YzYuNS0wLjcsMTUuNywxOS42LDE1LjcsMTkuNnMyMC45LTUuOSwyNC44LDBjMy4zLDUuOS0xNSwxOS42LTE1LDE5LjZzMTEuMSwxOS42LDcuMiwyMy41CgkJYy0zLjMsMy45LTIyLjgtOC41LTIyLjgtOC41cy0xNSwxNy0xOS42LDE0LjNjLTUuMi0yLjYsMC43LTI0LjgsMC43LTI0LjhzLTIxLjUtOS4xLTE5LjYtMTQuM2MxLjMtNS4yLDIzLjUtNy4yLDIzLjUtNy4yCgkJUzEyNi44LDEzMi44LDEzMy4zLDEzMS41TDEzMy4zLDEzMS41eiIvPgo8L2c+Cjwvc3ZnPgo=",protocol:"uniswap_v2",slippage:!0,blockchains:["fantom"],fantom:{router:{address:"0xF491e7B69E4244ad4002BC14e878a34207E38c29",api:kx.ROUTER},factory:{address:"0x152eE697f2E276fA89E96742e9bB9aB1F2E61bE3",api:kx.FACTORY},pair:{api:kx.PAIR}}};var RS=t=>new bx(Object.assign(BS,{scope:t,findPath:t=>kx.findPath({...t,exchange:BS}),pathExists:t=>kx.pathExists({...t,exchange:BS}),getAmounts:t=>kx.getAmounts({...t,exchange:BS}),getPrep:t=>kx.getPrep({...t,exchange:BS}),getTransaction:t=>kx.getTransaction({...t,exchange:BS})}));function US(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const WS=({blockchain:t,path:e})=>{if(!e)return;let n=e.map(((n,r)=>n===Vp[t].currency.address&&e[r+1]!=Vp[t].wrapped.address&&e[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:n));return n[0]==Vp[t].currency.address&&n[1]==Vp[t].wrapped.address?n.splice(0,1):n[n.length-1]==Vp[t].currency.address&&n[n.length-2]==Vp[t].wrapped.address&&n.splice(n.length-1,1),n},QS=async({exchange:t,blockchain:e,path:n,amountIn:r,amountOut:i,block:o})=>{let a;if(n=WS({blockchain:e,path:n}),a=r?await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountIn",api:t[e].quoter.api,cache:5,block:o,params:{route:n,amountIn:r}}).catch((()=>{})):await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountOut",api:t[e].quoter.api,cache:5,block:o,params:{route:n,amountOut:i}}).catch((()=>{})),a&&!a.virtualAmountsWithoutSlippage.some((t=>"0"===t.toString())))return a};let YS=async({exchange:t,blockchain:e,path:n,pools:r,amountIn:i})=>{let o=await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountIn",api:t[e].quoter.api,cache:5,params:{route:WS({blockchain:e,path:n}),amountIn:i}}).catch((()=>{}));if(o)return o.virtualAmountsWithoutSlippage[o.virtualAmountsWithoutSlippage.length-1]},FS=async({exchange:t,blockchain:e,path:n,pools:r,amountOut:i,block:o})=>{let a=await _E({blockchain:Vp[e].name,address:t[e].quoter.address,method:"findBestPathFromAmountOut",api:t[e].quoter.api,cache:5,block:o,params:{route:WS({blockchain:e,path:n}),amountOut:i}}).catch((()=>{}));if(a)return a.virtualAmountsWithoutSlippage[0]};var VS={findPath:async({exchange:t,blockchain:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if([n,r].includes(Vp[e].currency.address)&&[n,r].includes(Vp[e].wrapped.address))return{path:void 0,exchangePath:void 0};let u,c=[];if(c=[await QS({exchange:t,blockchain:e,path:[n,r],amountIn:i||a,amountOut:o||s})],c.filter(Boolean).length&&(u=[n,r]),u||n==Vp[e].wrapped.address||r==Vp[e].wrapped.address||(c=[],o||s?(c.push(await QS({exchange:t,blockchain:e,path:[Vp[e].wrapped.address,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await QS({exchange:t,blockchain:e,path:[n,Vp[e].wrapped.address],amountOut:c[0].virtualAmountsWithoutSlippage[0]}))):(c.push(await QS({exchange:t,blockchain:e,path:[n,Vp[e].wrapped.address],amountIn:i||a})),c.filter(Boolean).length&&c.push(await QS({exchange:t,blockchain:e,path:[Vp[e].wrapped.address,r],amountIn:c[0].virtualAmountsWithoutSlippage[1]}))),2===c.filter(Boolean).length&&(u=[n,Vp[e].wrapped.address,r])),!u){c=[];let l=(await Promise.all(Vp[e].stables.usd.map((async u=>{let c=[];if(o||s?(c.push(await QS({exchange:t,blockchain:e,path:[u,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await QS({exchange:t,blockchain:e,path:[n,u],amountOut:c[0].virtualAmountsWithoutSlippage[0]}))):(c.push(await QS({exchange:t,blockchain:e,path:[n,u],amountIn:i||a})),c.filter(Boolean).length&&c.push(await QS({exchange:t,blockchain:e,path:[u,r],amountIn:c[0].virtualAmountsWithoutSlippage[1]}))),2===c.filter(Boolean).length)return[u,c]})))).filter(Boolean)[0];l&&(u=[n,l[0],r],c=l[1])}return US([u,"optionalAccess",t=>t.length])&&u[0]==Vp[e].currency.address?u.splice(1,0,Vp[e].wrapped.address):US([u,"optionalAccess",t=>t.length])&&u[u.length-1]==Vp[e].currency.address&&u.splice(u.length-1,0,Vp[e].wrapped.address),u||(c=[]),{path:u,pools:c,exchangePath:WS({blockchain:e,path:u})}},pathExists:async({exchange:t,blockchain:e,path:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>!!await QS({exchange:t,blockchain:e,path:n,amountIn:r||o,amountOut:i||a}),getAmounts:async({exchange:t,blockchain:e,path:n,pools:r,block:i,tokenIn:o,tokenOut:a,amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l})=>{if(s){if(null==(u=await FS({exchange:t,blockchain:e,block:i,path:n,pools:r,amountOut:s,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(u){if(null==(s=await YS({exchange:t,blockchain:e,path:n,pools:r,amountIn:u,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}else if(l){if(null==(u=await FS({exchange:t,blockchain:e,block:i,path:n,pools:r,amountOut:l,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(c){if(null==(s=await YS({exchange:t,blockchain:e,path:n,pools:r,amountIn:c,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}return{amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l}},getTransaction:async({exchange:t,blockchain:e,pools:n,path:r,amountIn:i,amountInMax:o,amountOut:a,amountOutMin:s,amountInInput:u,amountOutInput:c,amountInMaxInput:l,amountOutMinInput:h,account:d})=>{const p={blockchain:e,from:d,to:t[e].router.address,api:t[e].router.api},f=Math.round(Date.now()/1e3)+86400,m=[n.map((t=>t.binSteps[0])),n.map((t=>t.versions[0])),WS({blockchain:e,path:r})];return r[0]===Vp[e].currency.address?l?(p.method="swapNATIVEForExactTokens",p.params={amountOut:a,path:m,to:d,deadline:f},p.value=o):(p.method="swapExactNATIVEForTokens",p.params={amountOutMin:s||a,path:m,to:d,deadline:f},p.value=i):r[r.length-1]===Vp[e].currency.address?l?(p.method="swapTokensForExactNATIVE",p.params={amountNATIVEOut:a,amountInMax:o,path:m,to:d,deadline:f}):(p.method="swapExactTokensForNATIVE",p.params={amountIn:i,amountOutMinNATIVE:s||a,path:m,to:d,deadline:f}):l?(p.method="swapTokensForExactTokens",p.params={amountOut:a,amountInMax:o,path:m,to:d,deadline:f}):(p.method="swapExactTokensForTokens",p.params={amountIn:i,amountOutMin:s||a,path:m,to:d,deadline:f}),p},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i})=>{if(n===Vp[e].currency.address)return;const o=await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,t[e].router.address]});if(o.gte(r))return;return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[t[e].router.address,r.sub(o)]}}},ROUTER:[{inputs:[{internalType:"contract ILBFactory",name:"factory",type:"address"},{internalType:"contract IJoeFactory",name:"factoryV1",type:"address"},{internalType:"contract ILBLegacyFactory",name:"legacyFactory",type:"address"},{internalType:"contract ILBLegacyRouter",name:"legacyRouter",type:"address"},{internalType:"contract IWNATIVE",name:"wnative",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AddressHelper__CallFailed",type:"error"},{inputs:[],name:"AddressHelper__NonContract",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientAmount",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientLiquidity",type:"error"},{inputs:[{internalType:"uint256",name:"amountSlippage",type:"uint256"}],name:"LBRouter__AmountSlippageBPTooBig",type:"error"},{inputs:[{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"}],name:"LBRouter__AmountSlippageCaught",type:"error"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"LBRouter__BinReserveOverflows",type:"error"},{inputs:[],name:"LBRouter__BrokenSwapSafetyCheck",type:"error"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"currentTimestamp",type:"uint256"}],name:"LBRouter__DeadlineExceeded",type:"error"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"LBRouter__FailedToSendNATIVE",type:"error"},{inputs:[{internalType:"uint256",name:"idDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"}],name:"LBRouter__IdDesiredOverflows",type:"error"},{inputs:[{internalType:"int256",name:"id",type:"int256"}],name:"LBRouter__IdOverflows",type:"error"},{inputs:[{internalType:"uint256",name:"activeIdDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"},{internalType:"uint256",name:"activeId",type:"uint256"}],name:"LBRouter__IdSlippageCaught",type:"error"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"LBRouter__InsufficientAmountOut",type:"error"},{inputs:[{internalType:"address",name:"wrongToken",type:"address"}],name:"LBRouter__InvalidTokenPath",type:"error"},{inputs:[{internalType:"uint256",name:"version",type:"uint256"}],name:"LBRouter__InvalidVersion",type:"error"},{inputs:[],name:"LBRouter__LengthsMismatch",type:"error"},{inputs:[{internalType:"uint256",name:"amountInMax",type:"uint256"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"LBRouter__MaxAmountInExceeded",type:"error"},{inputs:[],name:"LBRouter__NotFactoryOwner",type:"error"},{inputs:[{internalType:"address",name:"tokenX",type:"address"},{internalType:"address",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBRouter__PairNotCreated",type:"error"},{inputs:[],name:"LBRouter__SenderIsNotWNATIVE",type:"error"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"LBRouter__SwapOverflows",type:"error"},{inputs:[{internalType:"uint256",name:"excess",type:"uint256"}],name:"LBRouter__TooMuchTokensIn",type:"error"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"reserve",type:"uint256"}],name:"LBRouter__WrongAmounts",type:"error"},{inputs:[{internalType:"address",name:"tokenX",type:"address"},{internalType:"address",name:"tokenY",type:"address"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"},{internalType:"uint256",name:"msgValue",type:"uint256"}],name:"LBRouter__WrongNativeLiquidityParameters",type:"error"},{inputs:[],name:"LBRouter__WrongTokenOrder",type:"error"},{inputs:[],name:"TokenHelper__TransferFailed",type:"error"},{inputs:[{components:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"},{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256",name:"activeIdDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"},{internalType:"int256[]",name:"deltaIds",type:"int256[]"},{internalType:"uint256[]",name:"distributionX",type:"uint256[]"},{internalType:"uint256[]",name:"distributionY",type:"uint256[]"},{internalType:"address",name:"to",type:"address"},{internalType:"address",name:"refundTo",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ILBRouter.LiquidityParameters",name:"liquidityParameters",type:"tuple"}],name:"addLiquidity",outputs:[{internalType:"uint256",name:"amountXAdded",type:"uint256"},{internalType:"uint256",name:"amountYAdded",type:"uint256"},{internalType:"uint256",name:"amountXLeft",type:"uint256"},{internalType:"uint256",name:"amountYLeft",type:"uint256"},{internalType:"uint256[]",name:"depositIds",type:"uint256[]"},{internalType:"uint256[]",name:"liquidityMinted",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"},{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"},{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256",name:"activeIdDesired",type:"uint256"},{internalType:"uint256",name:"idSlippage",type:"uint256"},{internalType:"int256[]",name:"deltaIds",type:"int256[]"},{internalType:"uint256[]",name:"distributionX",type:"uint256[]"},{internalType:"uint256[]",name:"distributionY",type:"uint256[]"},{internalType:"address",name:"to",type:"address"},{internalType:"address",name:"refundTo",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ILBRouter.LiquidityParameters",name:"liquidityParameters",type:"tuple"}],name:"addLiquidityNATIVE",outputs:[{internalType:"uint256",name:"amountXAdded",type:"uint256"},{internalType:"uint256",name:"amountYAdded",type:"uint256"},{internalType:"uint256",name:"amountXLeft",type:"uint256"},{internalType:"uint256",name:"amountYLeft",type:"uint256"},{internalType:"uint256[]",name:"depositIds",type:"uint256[]"},{internalType:"uint256[]",name:"liquidityMinted",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint24",name:"activeId",type:"uint24"},{internalType:"uint16",name:"binStep",type:"uint16"}],name:"createLBPair",outputs:[{internalType:"contract ILBPair",name:"pair",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getFactory",outputs:[{internalType:"contract ILBFactory",name:"lbFactory",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint256",name:"price",type:"uint256"}],name:"getIdFromPrice",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyFactory",outputs:[{internalType:"contract ILBLegacyFactory",name:"legacyLBfactory",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyRouter",outputs:[{internalType:"contract ILBLegacyRouter",name:"legacyRouter",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint24",name:"id",type:"uint24"}],name:"getPriceFromId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapIn",outputs:[{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"uint128",name:"amountOutLeft",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"},{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapOut",outputs:[{internalType:"uint128",name:"amountInLeft",type:"uint128"},{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getV1Factory",outputs:[{internalType:"contract IJoeFactory",name:"factoryV1",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWNATIVE",outputs:[{internalType:"contract IWNATIVE",name:"wnative",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint256",name:"amountXMin",type:"uint256"},{internalType:"uint256",name:"amountYMin",type:"uint256"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidity",outputs:[{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"amountY",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint256",name:"amountTokenMin",type:"uint256"},{internalType:"uint256",name:"amountNATIVEMin",type:"uint256"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"removeLiquidityNATIVE",outputs:[{internalType:"uint256",name:"amountToken",type:"uint256"},{internalType:"uint256",name:"amountNATIVE",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactNATIVEForTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactNATIVEForTokensSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinNATIVE",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForNATIVE",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinNATIVE",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForNATIVESupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMin",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapExactTokensForTokensSupportingFeeOnTransferTokens",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapNATIVEForExactTokens",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amountNATIVEOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address payable",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactNATIVE",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMax",type:"uint256"},{components:[{internalType:"uint256[]",name:"pairBinSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"contract IERC20[]",name:"tokenPath",type:"address[]"}],internalType:"struct ILBRouter.Path",name:"path",type:"tuple"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swapTokensForExactTokens",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"sweep",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ILBToken",name:"lbToken",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"sweepLBToken",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[{internalType:"address",name:"feeRecipient",type:"address"},{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"LBFactory__AddressZero",type:"error"},{inputs:[{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__BinStepHasNoPreset",type:"error"},{inputs:[{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__BinStepTooLow",type:"error"},{inputs:[{internalType:"uint256",name:"fees",type:"uint256"},{internalType:"uint256",name:"maxFees",type:"uint256"}],name:"LBFactory__FlashLoanFeeAboveMax",type:"error"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"LBFactory__IdenticalAddresses",type:"error"},{inputs:[],name:"LBFactory__ImplementationNotSet",type:"error"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"_binStep",type:"uint256"}],name:"LBFactory__LBPairAlreadyExists",type:"error"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__LBPairDoesNotExist",type:"error"},{inputs:[],name:"LBFactory__LBPairIgnoredIsAlreadyInTheSameState",type:"error"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__LBPairNotCreated",type:"error"},{inputs:[{internalType:"address",name:"LBPairImplementation",type:"address"}],name:"LBFactory__LBPairSafetyCheckFailed",type:"error"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"LBFactory__PresetIsLockedForUsers",type:"error"},{inputs:[],name:"LBFactory__PresetOpenStateIsAlreadyInTheSameState",type:"error"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"LBFactory__QuoteAssetAlreadyWhitelisted",type:"error"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"LBFactory__QuoteAssetNotWhitelisted",type:"error"},{inputs:[{internalType:"address",name:"feeRecipient",type:"address"}],name:"LBFactory__SameFeeRecipient",type:"error"},{inputs:[{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],name:"LBFactory__SameFlashLoanFee",type:"error"},{inputs:[{internalType:"address",name:"LBPairImplementation",type:"address"}],name:"LBFactory__SameImplementation",type:"error"},{inputs:[],name:"PairParametersHelper__InvalidParameter",type:"error"},{inputs:[],name:"PendingOwnable__AddressZero",type:"error"},{inputs:[],name:"PendingOwnable__NoPendingOwner",type:"error"},{inputs:[],name:"PendingOwnable__NotOwner",type:"error"},{inputs:[],name:"PendingOwnable__NotPendingOwner",type:"error"},{inputs:[],name:"PendingOwnable__PendingOwnerAlreadySet",type:"error"},{inputs:[],name:"SafeCast__Exceeds16Bits",type:"error"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"int256",name:"y",type:"int256"}],name:"Uint128x128Math__PowUnderflow",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldRecipient",type:"address"},{indexed:!1,internalType:"address",name:"newRecipient",type:"address"}],name:"FeeRecipientSet",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldFlashLoanFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newFlashLoanFee",type:"uint256"}],name:"FlashLoanFeeSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"tokenX",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"tokenY",type:"address"},{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"},{indexed:!1,internalType:"contract ILBPair",name:"LBPair",type:"address"},{indexed:!1,internalType:"uint256",name:"pid",type:"uint256"}],name:"LBPairCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract ILBPair",name:"LBPair",type:"address"},{indexed:!1,internalType:"bool",name:"ignored",type:"bool"}],name:"LBPairIgnoredStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldLBPairImplementation",type:"address"},{indexed:!1,internalType:"address",name:"LBPairImplementation",type:"address"}],name:"LBPairImplementationSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pendingOwner",type:"address"}],name:"PendingOwnerSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"},{indexed:!0,internalType:"bool",name:"isOpen",type:"bool"}],name:"PresetOpenStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"}],name:"PresetRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"binStep",type:"uint256"},{indexed:!1,internalType:"uint256",name:"baseFactor",type:"uint256"},{indexed:!1,internalType:"uint256",name:"filterPeriod",type:"uint256"},{indexed:!1,internalType:"uint256",name:"decayPeriod",type:"uint256"},{indexed:!1,internalType:"uint256",name:"reductionFactor",type:"uint256"},{indexed:!1,internalType:"uint256",name:"variableFeeControl",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolShare",type:"uint256"},{indexed:!1,internalType:"uint256",name:"maxVolatilityAccumulator",type:"uint256"}],name:"PresetSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"QuoteAssetAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"QuoteAssetRemoved",type:"event"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"addQuoteAsset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"becomeOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint24",name:"activeId",type:"uint24"},{internalType:"uint16",name:"binStep",type:"uint16"}],name:"createLBPair",outputs:[{internalType:"contract ILBPair",name:"pair",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ILBPair",name:"pair",type:"address"}],name:"forceDecay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getAllBinSteps",outputs:[{internalType:"uint256[]",name:"binStepWithPreset",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"}],name:"getAllLBPairs",outputs:[{components:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"contract ILBPair",name:"LBPair",type:"address"},{internalType:"bool",name:"createdByOwner",type:"bool"},{internalType:"bool",name:"ignoredForRouting",type:"bool"}],internalType:"struct ILBFactory.LBPairInformation[]",name:"lbPairsAvailable",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFeeRecipient",outputs:[{internalType:"address",name:"feeRecipient",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFlashLoanFee",outputs:[{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getLBPairAtIndex",outputs:[{internalType:"contract ILBPair",name:"lbPair",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLBPairImplementation",outputs:[{internalType:"address",name:"lbPairImplementation",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenA",type:"address"},{internalType:"contract IERC20",name:"tokenB",type:"address"},{internalType:"uint256",name:"binStep",type:"uint256"}],name:"getLBPairInformation",outputs:[{components:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"contract ILBPair",name:"LBPair",type:"address"},{internalType:"bool",name:"createdByOwner",type:"bool"},{internalType:"bool",name:"ignoredForRouting",type:"bool"}],internalType:"struct ILBFactory.LBPairInformation",name:"lbPairInformation",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMaxFlashLoanFee",outputs:[{internalType:"uint256",name:"maxFee",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getMinBinStep",outputs:[{internalType:"uint256",name:"minBinStep",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getNumberOfLBPairs",outputs:[{internalType:"uint256",name:"lbPairNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNumberOfQuoteAssets",outputs:[{internalType:"uint256",name:"numberOfQuoteAssets",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOpenBinSteps",outputs:[{internalType:"uint256[]",name:"openBinStep",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"binStep",type:"uint256"}],name:"getPreset",outputs:[{internalType:"uint256",name:"baseFactor",type:"uint256"},{internalType:"uint256",name:"filterPeriod",type:"uint256"},{internalType:"uint256",name:"decayPeriod",type:"uint256"},{internalType:"uint256",name:"reductionFactor",type:"uint256"},{internalType:"uint256",name:"variableFeeControl",type:"uint256"},{internalType:"uint256",name:"protocolShare",type:"uint256"},{internalType:"uint256",name:"maxVolatilityAccumulator",type:"uint256"},{internalType:"bool",name:"isOpen",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getQuoteAssetAtIndex",outputs:[{internalType:"contract IERC20",name:"asset",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"isQuoteAsset",outputs:[{internalType:"bool",name:"isQuote",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint16",name:"binStep",type:"uint16"}],name:"removePreset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"quoteAsset",type:"address"}],name:"removeQuoteAsset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"revokePendingOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeRecipient",type:"address"}],name:"setFeeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],name:"setFeesParametersOnPair",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"flashLoanFee",type:"uint256"}],name:"setFlashLoanFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"},{internalType:"contract IERC20",name:"tokenY",type:"address"},{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"bool",name:"ignored",type:"bool"}],name:"setLBPairIgnored",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newLBPairImplementation",type:"address"}],name:"setLBPairImplementation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"pendingOwner_",type:"address"}],name:"setPendingOwner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"},{internalType:"bool",name:"isOpen",type:"bool"}],name:"setPreset",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"binStep",type:"uint16"},{internalType:"bool",name:"isOpen",type:"bool"}],name:"setPresetOpenState",outputs:[],stateMutability:"nonpayable",type:"function"}],PAIR:[{inputs:[{internalType:"contract ILBFactory",name:"factory_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AddressHelper__CallFailed",type:"error"},{inputs:[],name:"AddressHelper__NonContract",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"BinHelper__CompositionFactorFlawed",type:"error"},{inputs:[],name:"BinHelper__LiquidityOverflow",type:"error"},{inputs:[],name:"FeeHelper__FeeTooLarge",type:"error"},{inputs:[],name:"LBPair__AddressZero",type:"error"},{inputs:[],name:"LBPair__AlreadyInitialized",type:"error"},{inputs:[],name:"LBPair__EmptyMarketConfigs",type:"error"},{inputs:[],name:"LBPair__FlashLoanCallbackFailed",type:"error"},{inputs:[],name:"LBPair__FlashLoanInsufficientAmount",type:"error"},{inputs:[],name:"LBPair__InsufficientAmountIn",type:"error"},{inputs:[],name:"LBPair__InsufficientAmountOut",type:"error"},{inputs:[],name:"LBPair__InvalidInput",type:"error"},{inputs:[],name:"LBPair__InvalidStaticFeeParameters",type:"error"},{inputs:[],name:"LBPair__MaxTotalFeeExceeded",type:"error"},{inputs:[],name:"LBPair__OnlyFactory",type:"error"},{inputs:[],name:"LBPair__OnlyProtocolFeeRecipient",type:"error"},{inputs:[],name:"LBPair__OutOfLiquidity",type:"error"},{inputs:[],name:"LBPair__TokenNotSupported",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"LBPair__ZeroAmount",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"LBPair__ZeroAmountsOut",type:"error"},{inputs:[],name:"LBPair__ZeroBorrowAmount",type:"error"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"LBPair__ZeroShares",type:"error"},{inputs:[],name:"LBToken__AddressThisOrZero",type:"error"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"LBToken__BurnExceedsBalance",type:"error"},{inputs:[],name:"LBToken__InvalidLength",type:"error"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"LBToken__SelfApproval",type:"error"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"LBToken__SpenderNotApproved",type:"error"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"LBToken__TransferExceedsBalance",type:"error"},{inputs:[],name:"LiquidityConfigurations__InvalidConfig",type:"error"},{inputs:[],name:"OracleHelper__InvalidOracleId",type:"error"},{inputs:[],name:"OracleHelper__LookUpTimestampTooOld",type:"error"},{inputs:[],name:"OracleHelper__NewLengthTooSmall",type:"error"},{inputs:[],name:"PackedUint128Math__AddOverflow",type:"error"},{inputs:[],name:"PackedUint128Math__MultiplierTooLarge",type:"error"},{inputs:[],name:"PackedUint128Math__SubUnderflow",type:"error"},{inputs:[],name:"PairParametersHelper__InvalidParameter",type:"error"},{inputs:[],name:"ReentrancyGuard__ReentrantCall",type:"error"},{inputs:[],name:"SafeCast__Exceeds128Bits",type:"error"},{inputs:[],name:"SafeCast__Exceeds24Bits",type:"error"},{inputs:[],name:"SafeCast__Exceeds40Bits",type:"error"},{inputs:[],name:"TokenHelper__TransferFailed",type:"error"},{inputs:[],name:"Uint128x128Math__LogUnderflow",type:"error"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"int256",name:"y",type:"int256"}],name:"Uint128x128Math__PowUnderflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulDivOverflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulShiftOverflow",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"feeRecipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"CollectedProtocolFees",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint24",name:"id",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"totalFees",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"CompositionFees",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"bytes32[]",name:"amounts",type:"bytes32[]"}],name:"DepositedToBins",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"contract ILBFlashLoanCallback",name:"receiver",type:"address"},{indexed:!1,internalType:"uint24",name:"activeId",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"amounts",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"totalFees",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"FlashLoan",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint24",name:"idReference",type:"uint24"},{indexed:!1,internalType:"uint24",name:"volatilityReference",type:"uint24"}],name:"ForcedDecay",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint16",name:"oracleLength",type:"uint16"}],name:"OracleLengthIncreased",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint16",name:"baseFactor",type:"uint16"},{indexed:!1,internalType:"uint16",name:"filterPeriod",type:"uint16"},{indexed:!1,internalType:"uint16",name:"decayPeriod",type:"uint16"},{indexed:!1,internalType:"uint16",name:"reductionFactor",type:"uint16"},{indexed:!1,internalType:"uint24",name:"variableFeeControl",type:"uint24"},{indexed:!1,internalType:"uint16",name:"protocolShare",type:"uint16"},{indexed:!1,internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],name:"StaticFeeParametersSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint24",name:"id",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"amountsIn",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"amountsOut",type:"bytes32"},{indexed:!1,internalType:"uint24",name:"volatilityAccumulator",type:"uint24"},{indexed:!1,internalType:"bytes32",name:"totalFees",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"protocolFees",type:"bytes32"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"TransferBatch",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"bytes32[]",name:"amounts",type:"bytes32[]"}],name:"WithdrawnFromBins",type:"event"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"approveForAll",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"id",type:"uint256"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"accounts",type:"address[]"},{internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"balanceOfBatch",outputs:[{internalType:"uint256[]",name:"batchBalances",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"batchTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amountsToBurn",type:"uint256[]"}],name:"burn",outputs:[{internalType:"bytes32[]",name:"amounts",type:"bytes32[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"collectProtocolFees",outputs:[{internalType:"bytes32",name:"collectedProtocolFees",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ILBFlashLoanCallback",name:"receiver",type:"address"},{internalType:"bytes32",name:"amounts",type:"bytes32"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flashLoan",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"forceDecay",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getActiveId",outputs:[{internalType:"uint24",name:"activeId",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"getBin",outputs:[{internalType:"uint128",name:"binReserveX",type:"uint128"},{internalType:"uint128",name:"binReserveY",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBinStep",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getFactory",outputs:[{internalType:"contract ILBFactory",name:"factory",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"price",type:"uint256"}],name:"getIdFromPrice",outputs:[{internalType:"uint24",name:"id",type:"uint24"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"bool",name:"swapForY",type:"bool"},{internalType:"uint24",name:"id",type:"uint24"}],name:"getNextNonEmptyBin",outputs:[{internalType:"uint24",name:"nextId",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOracleParameters",outputs:[{internalType:"uint8",name:"sampleLifetime",type:"uint8"},{internalType:"uint16",name:"size",type:"uint16"},{internalType:"uint16",name:"activeSize",type:"uint16"},{internalType:"uint40",name:"lastUpdated",type:"uint40"},{internalType:"uint40",name:"firstTimestamp",type:"uint40"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint40",name:"lookupTimestamp",type:"uint40"}],name:"getOracleSampleAt",outputs:[{internalType:"uint64",name:"cumulativeId",type:"uint64"},{internalType:"uint64",name:"cumulativeVolatility",type:"uint64"},{internalType:"uint64",name:"cumulativeBinCrossed",type:"uint64"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint24",name:"id",type:"uint24"}],name:"getPriceFromId",outputs:[{internalType:"uint256",name:"price",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getProtocolFees",outputs:[{internalType:"uint128",name:"protocolFeeX",type:"uint128"},{internalType:"uint128",name:"protocolFeeY",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getReserves",outputs:[{internalType:"uint128",name:"reserveX",type:"uint128"},{internalType:"uint128",name:"reserveY",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getStaticFeeParameters",outputs:[{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapIn",outputs:[{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"uint128",name:"amountOutLeft",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint128",name:"amountIn",type:"uint128"},{internalType:"bool",name:"swapForY",type:"bool"}],name:"getSwapOut",outputs:[{internalType:"uint128",name:"amountInLeft",type:"uint128"},{internalType:"uint128",name:"amountOut",type:"uint128"},{internalType:"uint128",name:"fee",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTokenX",outputs:[{internalType:"contract IERC20",name:"tokenX",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getTokenY",outputs:[{internalType:"contract IERC20",name:"tokenY",type:"address"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getVariableFeeParameters",outputs:[{internalType:"uint24",name:"volatilityAccumulator",type:"uint24"},{internalType:"uint24",name:"volatilityReference",type:"uint24"},{internalType:"uint24",name:"idReference",type:"uint24"},{internalType:"uint40",name:"timeOfLastUpdate",type:"uint40"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint16",name:"newLength",type:"uint16"}],name:"increaseOracleLength",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"},{internalType:"uint24",name:"activeId",type:"uint24"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"bytes32[]",name:"liquidityConfigs",type:"bytes32[]"},{internalType:"address",name:"refundTo",type:"address"}],name:"mint",outputs:[{internalType:"bytes32",name:"amountsReceived",type:"bytes32"},{internalType:"bytes32",name:"amountsLeft",type:"bytes32"},{internalType:"uint256[]",name:"liquidityMinted",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint16",name:"baseFactor",type:"uint16"},{internalType:"uint16",name:"filterPeriod",type:"uint16"},{internalType:"uint16",name:"decayPeriod",type:"uint16"},{internalType:"uint16",name:"reductionFactor",type:"uint16"},{internalType:"uint24",name:"variableFeeControl",type:"uint24"},{internalType:"uint16",name:"protocolShare",type:"uint16"},{internalType:"uint24",name:"maxVolatilityAccumulator",type:"uint24"}],name:"setStaticFeeParameters",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"swapForY",type:"bool"},{internalType:"address",name:"to",type:"address"}],name:"swap",outputs:[{internalType:"bytes32",name:"amountsOut",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}],QUOTER:[{inputs:[{internalType:"address",name:"factoryV1",type:"address"},{internalType:"address",name:"legacyFactoryV2",type:"address"},{internalType:"address",name:"factoryV2",type:"address"},{internalType:"address",name:"legacyRouterV2",type:"address"},{internalType:"address",name:"routerV2",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"JoeLibrary__AddressZero",type:"error"},{inputs:[],name:"JoeLibrary__IdenticalAddresses",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientAmount",type:"error"},{inputs:[],name:"JoeLibrary__InsufficientLiquidity",type:"error"},{inputs:[],name:"LBQuoter_InvalidLength",type:"error"},{inputs:[],name:"SafeCast__Exceeds128Bits",type:"error"},{inputs:[],name:"SafeCast__Exceeds24Bits",type:"error"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"int256",name:"y",type:"int256"}],name:"Uint128x128Math__PowUnderflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulDivOverflow",type:"error"},{inputs:[],name:"Uint256x256Math__MulShiftOverflow",type:"error"},{inputs:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"uint128",name:"amountIn",type:"uint128"}],name:"findBestPathFromAmountIn",outputs:[{components:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"address[]",name:"pairs",type:"address[]"},{internalType:"uint256[]",name:"binSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"uint128[]",name:"amounts",type:"uint128[]"},{internalType:"uint128[]",name:"virtualAmountsWithoutSlippage",type:"uint128[]"},{internalType:"uint128[]",name:"fees",type:"uint128[]"}],internalType:"struct LBQuoter.Quote",name:"quote",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"uint128",name:"amountOut",type:"uint128"}],name:"findBestPathFromAmountOut",outputs:[{components:[{internalType:"address[]",name:"route",type:"address[]"},{internalType:"address[]",name:"pairs",type:"address[]"},{internalType:"uint256[]",name:"binSteps",type:"uint256[]"},{internalType:"enum ILBRouter.Version[]",name:"versions",type:"uint8[]"},{internalType:"uint128[]",name:"amounts",type:"uint128[]"},{internalType:"uint128[]",name:"virtualAmountsWithoutSlippage",type:"uint128[]"},{internalType:"uint128[]",name:"fees",type:"uint128[]"}],internalType:"struct LBQuoter.Quote",name:"quote",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFactoryV1",outputs:[{internalType:"address",name:"factoryV1",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getFactoryV2",outputs:[{internalType:"address",name:"factoryV2",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyFactoryV2",outputs:[{internalType:"address",name:"legacyFactoryV2",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLegacyRouterV2",outputs:[{internalType:"address",name:"legacyRouterV2",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRouterV2",outputs:[{internalType:"address",name:"routerV2",type:"address"}],stateMutability:"view",type:"function"}]};const HS={name:"trader_joe_v2_1",label:"Trader Joe v2.1",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABvCAYAAAA0YEQFAAABAGlDQ1BpY2MAABiVY2BgPMEABCwGDAy5eSVFQe5OChGRUQrsDxgYgRAMEpOLCxhwA6Cqb9cgai/r4lGHC3CmpBYnA+kPQKxSBLQcaKQIkC2SDmFrgNhJELYNiF1eUlACZAeA2EUhQc5AdgqQrZGOxE5CYicXFIHU9wDZNrk5pckIdzPwpOaFBgNpDiCWYShmCGJwZ3AC+R+iJH8RA4PFVwYG5gkIsaSZDAzbWxkYJG4hxFQWMDDwtzAwbDuPEEOESUFiUSJYiAWImdLSGBg+LWdg4I1kYBC+wMDAFQ0LCBxuUwC7zZ0hHwjTGXIYUoEingx5DMkMekCWEYMBgyGDGQCm1j8/yRb+6wAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAABPXpUWHRSYXcgcHJvZmlsZSB0eXBlIGljYwAAKJGdU9mtxCAM/KeKLcH4JOUkJEiv/waeuaJslP3YHYkgOWbGHkz4yzm8Klg0QEXMCSaY2qa7HsaGgmyMCJJkkRUB7GgnxjoRNCoZGfyIRlZcNVyZd8L9V8bwZf6irGKkvX8oI4wc3IXWfS808qiY1a5xTGf8LZ/yjAcztxSsE0SB+cMF2I3uylGHACYXeIwH/XTAL8BwCqShTNl9zSaztRNxepRV9BCRmTBbcQLzmPi9e+HAeI7BBVpWbESUSu+JFnhMxGWp+2ZJeoH7es8L3fPuHZTUWtk0lyfCOi9wGxcDjYYar9c//AFURzuIa5/UXVpFkcaYrbLdPPLJ/mDe2G/ezQqrd9UzLWOZV6QeVOlJ7Mrqj6kS49Fj5J/KQ05OGv4BiF6+ZwMoFgoAADX7SURBVHja7b17mB1XdSf6W2vvqjrv02+13tZblmyDLFu2wYAdwiMQM4GJHJhkbgjMmHxwYZJw79xMEi7tzP0yk3wkMxnu5Bu45INkJpCRZpLwGJyEEAmMjTGW8Uuy9bDe6m71u8/7VNXe6/5RVefRaj1stS0leH9q9TmnT1Xt2r+91v6tx15FeK29Yk0AwsgIAft57EDeTSvlSqUix2dna7cdOBAsxTXoWt/kP8YWA6fOHjzouKWpzWpi6qdC07jLMvrY2mkY2RMUlv3l6u9/v36113oNwCVsAhB27+ZJTKbTyO8yfviAP3ruJ4Og3FdO+Wh6DThiUZjSZ90g9QunC0Pfv1pJ1Nf6pv+xNBkZYUwczJTm5U2psOdfmND8RFibL856ZYz3zqOe8sFOCMcJIZIa7htV963J158UICRAXu51XwPwKpuI0NwvvbdYOXnknWT5X7CYt4Shr2szozJuzsv5YpXENYAOCWxhlUijELCcC28cHDN0NeABrwH4spuMjHDthReGK//bz71HU+qfM8utAqTCRgXzEyfkrDsjc8UGWW2IlIBYABIIAcICYdixXNlcbT9eA/AlNhkZ4ZkXfrSyfOzZ97PLHyLwRlJKwxoElTlMT7woJ9w51LM+GWWJlAWzgEnADDAJVMiARWl5vScERq+qP3ytB2RJBlWEZGTkFb2XkZERLn/gvu2lI8/8oaedH7LS/46Us4W01oCgWZ7FxORRe8SZRzkVwichwwCIAAKICJpFFAOqQdaCzmL79h9PCRQB4UsjHmbH+88/8tyqI3fe+Lra2HT/D4sZMlZsaGQqNOGpQPhskMud+6mZmfLLWWsEoGMf/yl3YNLZ5hx75mOkvQ8QqwwRA8QROCIIqiWMT78oR3WZ6q6BkBAAaAEsACUQJgFYABHohmpSiOexd6+92rH4B2NGiIDw4AhhZW2LhX1fc2LqvtH/9cMbJg+e7KlXGo61lmwEkgjBCtA0QAWCow7Rn4XWfuVdQOnKriWEBx90KkeeeSOA3yLmNxCzB1YUjVgMHgTN6jzGzh+Vw5hF2QlB2hKxQCkLrS2UsvCUEVdZuNqCA8HwM/kzuZL7vhWnpw5c7bj8gwBQRka4OTyzQSvnQRK8q/rCyczzX/obXZ2tkhGJUANgAElet44FIARfQD8wIp94L/AsRYKx6HVqo8eW2Wr1fTDyy9DqRtaOiiQtHiqmGDzAL8/J6fPP4yCVUFUWpC0xCxQLtDbQSuBpK642SCkDrSwwS1j2bP7bGv0/u+H48fmrHZvrWoWKgLD3D1K2fO4Xteh/Q5Dh6vOn1HOf+19crTaoE6z4NdkFnxEgELgCuZuI/uqrIu8B8GzXdR54wKmcP7+p8sJT7yfgg+zolXA1g1Q8JaITgbjVsWZpFmcnj+IZKaPMFswWDBFAoFiIYyFlEjhsobQIhQI97ogXqIfWnjleXooxum4BFBHClx4sGnPuPxHRPyURR6p1PvqVfVytNlpAESJxSsDsFK0E1PgtschaQ/Q7nxN539jIiPnlRx8d0J68ozR59p+zp98Ix8mQ40ZSJtQGDzF4BIgImrMTcnr6OA5IBRVloZVACAIWsIqOsQJyCKLYgpUIQSDzhOy8cw7s/OXFtMA/CgBFhOpf/OQqV+iPCHgbRDRMiKnvH6S58dkuKUtoXOdnyfsLzguQZnrzW7du+mDPI3//OpXP/ox23eWkNZPWgNaIiLkk/QCBWkxSrEVt8qwcnT8tP7J1qkfgiSGBQ2IViRDAIJAiEa0MlGNFsQiaIG/UNZma+58fP33+9FKN1XUHoIgQ/vQ3+lxLf0xEbwJEQSzQDHD+B4fRueYt/AHaEhkD1l7kiVAs5mXV+rXZ/lXDn9XptEuOJlIxcMTxt+MzWQuiZL0jWBOgMnlKDlfG5QlTp5AtNAtEAMUSKiWiInuPmGGVEtZaxGERMkLuaW2KU+n/Wsgt/6P7MXvV5sN1CaCIED77CdfmUp8iojdBrANrAWvhj8+hND5zUXXZOkcHYAwgnUphcPmgDKwcpuLQAGnXUVBKgTkCTukWKWmfVABumwnGr2Fu8pQcrk/LM0GNfBLRLAQWYRLLJFYRDLMlxYBWolhbcZQRDi3SJ5xqcSz9X4fQ85u9hw5VlnLMrisAgQfJpJ2fI2s/DEBHnEAAK6iPTSMIDHUSlE7QWiqUCFopDAz1yfIbVlFhsB9OyiNSCmACsQKYIYohxCBIpCo7T8yR1EEEQb2MuelT8lR9Vg6HDfJhRUVLpAgAIhFmGKVsoBRIKSsOi0rrQNzAhvnT7rHi+fTv1qreX/SeP1ld6hG7bgCUkRHGl+bWkPC/BsOFMZE1BwuIoD4+E2GJtmokAEKRaaYVI1vIYXjNCgysHEaqkCPSDqhF+zniJUQtdUkxYJH8xWeMtaiIhV+ZlqmZs3jaL8nRoE4BIKQgloSYRYhElIJhFsMsVrF1XW2Up8IJrylP95xO/a0edb++8czciaUiLdclgLHhzKFPH2HCBhijYAUQC9hIAmuTc7Cx3BEi15TSCinPRbGvKD1DfSgMDUAXsmQVxJcAsCFIOLlGzCojMCmJA4iF2BCw8doqFiJG/EYJk80qPd6YlwkTUkiwIAhDLDEJE0JX29Bzw6arw5qnTNVR9qgi+9ew9jvDwNltP6jXCPVXBLjrCkDcfz/jHRtuYMsfgNi26jSxeFiLoFKHBYiY4TgK+WwGub4CUsP9cAYL5HsKY0oh1AEEBrBEEICtBVkLismPslaUWHLEgolFFEEIqJsm6n5DAmOoag2NBU2cqNelbgRakWFCQ5FUlcKsVjitIIc9x55xdHA+44bjFIYnzpVw+hMPwcdVhoj+QQEYR7FhZx//BTCWQYRaNCXWmdII4GbS8HIZ8Yp56GKG9Loh+JtWwgz3wikW4BT6kM0PQKdyYC9LVmdgVWwWWAMThPCrJfhnDhJLCOs4sLF7xRiDqdGz8p3vPSLVStU3Ydg0QIUI55n5HAHHteLnlQRnmflshpyzU33Fcnn7ofDTI5CrjeldTbvmrjQBaPI/fzTbr7zvAnIzxFLEPAUILaQZIqg0MXZ2FmPzFZZ8ivK33ACvNw92XeRXbUFh/Q5wKgd2PIiNSEl0cxILsMBai8bMJGae3QcFiRkmINZAjIFYi9FzZ0vfe/TR35ienn40DZ5oVoO50p2r/M99/sBVRc1fyXbtARwZYayo3mIl3Adr8jA2Up1BCEsa4YqNUh9eR/VsD00ffJQ8qhIxoLRCz5ZdyK69GazTiNCIjO2WCo7NALEC4/uYeO4R+NNn4LguEpYp1sTCLmj6FjZV/O/pFRv/z41veceZaz02V9KuuQoFAMtyN3ybgrFAaABokdXbxWy9DVi2ll3W3Dh7mNJeAFgGxCK3chNya28BlAsJmgiqVYR+AzYMQaygtAtSDGtChM065k8eQmP8OBzFIM8DENkBzBoWQGAI6bWb4Q2seK9yU2smz537pcGVKw9f67G5XLv2AC5friQ8ejuFohBCZGidNdvvgl22limdYwui2uQo1U/8EAQLEQs3V0B+zU2wfoDy2BGUzh6BX5mHNSEoZpoUx6rFhoBYkAkgfgDjKOhMvsMOAYyxcJZvhdO3AkLsWhPemVLqQRH5IBE1rvUQXapdcwBL6vF81i9shpOxdscbrVm7TSGVUeRlyJKioDpP9fPHgKAWGdzM8HqGUZuZwPyJv4NtRp870mEGJOtgbCbACkwQRhrVWMAaQDmIAhWCcsOAqyFmZg4j3z+IXP8gBc3m28rl8u0AHr7WY3Spdk0BFBGn+e2v7ILfGAxvuMXY3iEX2iNol0hpQhggbFRhSpPJEQAIlbETkPHTERACkBWIWFgbrXdhELYFTAB0rYuAiAFBgwAEocXh54/Af+IpMDPShV7csOMurLp5ZyHd378BrwG4aKOJg/uyZ7/2mQ8K86/q/MBwLpP1HJ0iaA2wIhsGZAI/kjrrR75N1pCYrMAaWCuo1nycODOJyal5lKs+XK3heimsHO5Bf28BygZw4mQiLQBIWk5qsYJSuQK/WoWKPTrwGxh97nEUe3spPzhcFBEiouuSgQLXAEARoZPf+PyW0nN//x8lqL0VJKpZGiOVGxCV7YNiJdYaMqGPsF5DOHcO8KPYp8TM0VqgVPVRV3l859HncOjwSRCAFcuGMTDUh3ve//PIFQpgsajPTmH80I+Q9meQcwQAQ4yNgnUCzM7MR+YGEZTWMGEIv1rD6DOPNdGsvbj53buvW/CAVxlAgdChvQ8uc4P6n8CGt4kVBgMgQVidjdxaImRNiMbkSTTOPgtTm4OYsBVbtRYwBpieq8NdNoyJuSqstchnc/j5X/0VkBX0L1uGZq2ObP9y9K/eACedxejDXwO5iEmOAMQQhGg0GrGqJYxNVTA+PYeefBaOdpWET15rfC7bXlUADx3c67hP1f4fmHCnWGGBAJbiCHi0TlljqDlzBrXj34cEPsTaOFEhdv/HDudlAznUK2exfW0fTL2Cas3HN7/85+AghOd6KBbyeM8nfi0iNY0SMi4iu48QrZ1xdkTghxAR/Oj4KM5Ol7B25RqsuflWpFIIxZSva+kDXkUARYQO/c9/ux1if8aISHlu3tarVeoZ7CcvlQIpN+Ijfg21k09CAh8ARYZ5zPeJFaxE8QhXKzjZNN5wy3psXT2Ic+fncOL0OOZKPtKeg51vej8IgkZpFvXTh+AqaRMb2w4fERFCIxifLWHj1u3YduM2OFrB68kGbtVfkryVV7K9agDu379frTT+T0MoX6tWaXpskppNn9K5LLx0GuzlCCDUzx+Dqc0iTkdCJCqRQ1+S6JKJzARrozWtr6eAnkIOm9Yuw8xcFexmsWwgg/njT6M6fgphaRrKUJSgGXtfKPaMKa3AADylMHX6FJ6emsJNu26D6nHnqF4vX+8kRr0aFxGAmu97c1Y1Jz8p1mwozc5TebbM1lgU+3uQyhWQW7MDKtuD+rmDsLV5RJ6S2KZDlLpgrYVYC2Ns9Dp2kwWBgTUCZoVs2kNaA9XzZ1AZPYGwNANXUxSjFYkyxZSCyuQgAtSqNZTmS8i6DsSEKHiEDBpQtbmU9YP1L/79Nw5s/Mn7Zvbv339dgviqpNYTgGUFVgCtEhHy6z5FKpHgpVNQqTx0ti/yWSbgWWn7NePX1liYWPpMaBH6IcIghLWC0Bj4fhCBC4okNDRIpzW8tAPHVVAcO7BDHzAhWCkUiwUAwFBvFttuGMTaFb3IKJF6reqVG413hDb403vDsQ24DvzG1wxAACKhL5bYEyEyYUgCIFfMQ7sunMIysJOCtSFgwlZEXCSWvvgk1ghMaBAGJgKKNESlAScL6BTCUNCoNeHXmzChgesxPE8j0gECUgQiwBoL22yCFCOXz0I7TjQYzGAioThUH4YB1Rr+rZUg+Ff7Rj7oyXUI4qu1BtIsAAiFzEAml5FqqUK5njyYNVL9NwDsgElAjgv41Ygxttxh0XonIoDScAt9yAytg1PohxAjDAL4jRrCWgWN+WmUzryIsFZCLptFEleM0gMZlgSwFqZeBWdycFIu+gZ6MTE2AREBE0EgZEFgiBhjOAjDfwqk/t/9Ix88uW//yfDe/fsNrpPw0quzBoqQf+yQajTmfxoSrFMOi4hQsb+X3OIQCjfcDnIzINYIqjMwlZnowGSdA8FagUrlUFj3euRvuAmZwRVwMnkoLw12XSjXg3LTcPI9cIr9qFercNGE56qOhKU439MKSAxUKgOlXWhmTJyfitdIQvQPoCQTm8jNpHM/DOs47t40lNq97S77Z48//oqmSlxXAI6MjNDcRE1J8/wG69fvZiKkMmkorSmz6iakhzbG6X0AkUY4Px7lsxCB4rCsk+9HYeMuZJfdAC9bADtuO5eTFUg5IMcBs4JyXKQLPfAbPhxpgCMrsiUzBIK1NjIrUmm4rotapYZqtRbBFduazATWGm6uIIPbbzf9m7efDUr+rE4L79iWtw89fuyag/jqALh9u2quXu2Sl3qjPz96l1hfEYN0ukiF9W+EThdBrKKUZu1AiCIpFAsQoNNF5DfsQrp3OZTrxV6UyLiIVCtAzGClQNqBdlwo7UKUi3qlCmWb4NgUiRaxOPgbBmDtgl0P6bSHqYkZWGNAABRrKa5cT2vuvJdW7XyTyq5Yu11l8z+XHlymBXPPEHL++x5YEe7de+iaqtJXBcAVP/mT+uZB7YXp4gMGzrBUJjJETKnVr0dm+RYopVvqiiDQ6SI4nYeYAMwKmbW3wusdBmsnckIDre1dEkf+IgcZgVmBlAY7LpTjwbJGrVyBY5tgktiRE8NoJGKjngfHdUDMmJudByuNFTffTuvvfjsyfQNQXgqsHWLtOOyldjipnoni7OgLwFDwJ1/dH15LAF9xFioi1NvbS75T6COd3ub0rw2ameVNLi6X9PBWsHJBlMwjArEGKRde7yrk1u9CduOd8HqXg5UTSx6BlAIzg4hBTLCxnQi0wWXtwM3lkVu2GunlG1GnbJRm2kqXB0ACG/gozc2iVJpHvpCB1hrDN+7A6h1vgHJcsONBOR5Yq8h+dNyUKvR9OCwMFcPzdS9Ou7lm7dVgobR9+3ZYqr+OQEUmcrMrtvqpTNFxsr3EHEseRbYbmEFQABEUMRw320p/FxBYRV221kJIEJoQvh9GPlNEnhXiiIWQ0nCzOeSWr8Fcs4bmxFGkbD1JLAVACECoVBstf2vv6g1YveMu6HQW2ktFqplV7EwQWGOJlV6dXrn+pjW12vSevbv5fuxdsr0O1xWAIkKf//zn1e6d69ON7LKfEoijWLvZ4rDnZAusHBeEFuWL4nRATCDibczxVi8hQMVSSBBYiWzCeqWKY0/9CC8eOojQWty483as374d2nUiEqQc6HQOhdUbUQ6bMJOHwbHj3IBQDiTKZATB6hzW7rgbXr4IlUqDdUyKlIoz2wIQkYhopbzU0Jhv3Nz4sEZ7k9Sr3l5pFUo7d+5EWQ+uEqI7CVaTYsVuSmk3BW7T9PhXtDpxvL5BqUhtEoE5GkzW0Z6GaHOC4Id/9y18879/BSeOHcWWHbdBaQcnX3gBzVpUxUoAkNZwMnnkbtgGWrYZwg4sMSqhwAhBhBDCxcC2O5AbGoZOZaC1A8UaSukIRK2glANWKt45yGEmM4C02uqMvMIFFi7VXjEJHBkZ4b1799KOHTtYB/V7mGhYrGhiR2vHI2YVSV+8kYQWlLwhVmjtWlDR+hNJlILYENYazJw/j7mZaazbsAkz83PYsuNWZLJ5BM0Gmn69bccxwI4HN98DXnsLgv6VCObGwbMzcAVgL4P8ys3ILFsR2ZPKAbMGJ2utUiBrAQ1IYCFCDZbwfE/amszAKvr0Rz+KkZGRf/gAtlxNIth7//20fvly9srlfqSd+8CcI2il3JRyXA+aNSgqnAISQCj2liQbTJKtehTvKCKK1zZupUQ06nXc8RNvw6nnD+Lct/8O506ewKbtt8DxPLDWEdASObqhFJgIOl+ESqfh9i5DZo2Jz6vBXgrK8aCUhtIaRAqsGMTJxNFgQGwYComMKsE5k81COQ7t3bv3mhGZpZXAyJMhIw8+yG/56Edpol7nIVe9BUQ3A6ydVE45jktJzmYERnJsLI0xzZfYREh2yCbrpCQJuyAMLF+OMLRYXq9jePkKPPY3D+GGzTfCcR0wMywUWBgQRH5WYijtQJQGu1GkA2IjG1RHxzArMOsIOKb4fdRXa0OIiHXSqbEQTrky06T6qgqtXz/LuEbr4JLp7iRuJiK0bds2AoCtfX09IPoZYu5hpUgpxUo54JiwRIBxS7oiKhgnxBODmBPXVntLWEJ4mJEtFJHN59G3ciVuueNO1GZn8Njf/Q3CIOwiRaw0WEVraJT0Gxn72nGh4p8EtOg7HIPH8V7QuFCFiCjtmFxP/42ZzZt3ecWiBXqvBW5LC2AMHoAocAtA5fN50hnvToLcBZBiZiZW0feS3a/olEC09qJHZVhiczvezxf9ojg7jePB1dCOi1Quh7U33Yxd99yLZx99GN/52l+gUasD4Jb0MKsYSI1ERxMrsHLi3wzF0d+JGIzomFafABARpbI5h1gtZ+X9X/ldt24Ig/Oyc+cD18yldtWeGBGhB4loPyAjIyO8rLxMF9cVbQ+VC6l0/tesyE6ttVbaYaUdYqUi9QmOLIRkh2xiYCeSQ21yQ7HEtdGmOEgRHSdWQEohW+hBb28vjj33LM4cfxF9Q4NIZ3Nd52ivodwiUUwKrHUshRzbfhxLHrXsxvZnUETcJ6L6OD/wN/39/Uu6bfqltKtdAykWvdbOyTPeGbvzCCh7xx1vsdbeA2KHmCMB5EStRYdY25IFtCQzBig6OUfSyAqt7bQxU2LFkS1nAeU40GKRLuSxZtt29C1fjtNHjuCRh76B/uEVWLt5C3oHh5BKp9tslggWUTKwCXxIU5DKZOAoHUstdXQldgwwAwKOpJe1Vs67e3I9nzpz8MynV29fPXMtALxa9sQjGMGn5dPy4IMP0raD22jwo4O0eWBguS/NLxhj36K1o9O5PLmux452I4bHSUWIeGBioNBhF9ICSWz1NA4JtbKwjYUNDYIgQBj4sGEIYy2sCRE0fcxNTWLi3Dk06jUoreG6HrxMBql0Gtrz4HkessUeFHr7oHWkPkkl3qEkpJQw4IRZRRPQhAa+36yKmD+cmpv591u3bn3Vk6CuRgKjIR0BvvGNb6R37eozlW0IV9XrKpTmL4VBuEus1eylwMzExLF3pT1nEkKCWDKFEtaJLpXaWf1jYQ+YI8ml5PxaRwu7uHBTaWSLRazcsDFmohbWGhAxtBOZCxzbmwlY1NGHqE5MV5e71HikUZAVwcf7i/3N8fHx3x8eHl7yQgavCIAjAI3E5xgcHNT1es5Pp0FOLrfN98OfD0I/S0qRjmJ0xCpmmy0CEa1BUeWI5G+dc6Nr1NoIxqZEp90vMcFhpUEsMeYdBQvi322JTrw98bkTppuo8uT7aHOrjo50dIuhWEFE8gL5pLZspqenP9vf339FRfWuFYCt0d2zZw8Vi0UnfzrfuAOn5dzNa3saDfvrzVp9bTNoqN6eQdHa4WjhbxvgXa8XSCVwwduLdiPqSJwWH18D6KiudMGoU1zysR2KotYXOulwAhy1NsjQwvkEgATQKsqnCYKgIIRfl2a4ZXR09LdWrFixZNWYLtVethmxbfduAuDm83l7EAfNQ7mcrlbsR/xG451zpVlXQHAzaWJW1Ar9tIBDh51GCwSuY6Q6KPwFIHPbf8rMYM1gFQd1YxdY9D5yhUHFXp/EdEnUJbftxU493dWdmEDJAjUukeMWSms4jgMIcgL6gAv3/xs7dWq7iFzRVHy1AaTdu3cT7trtFosNPnv2rD84OEgb+nveFfrNX5mcGMuVyyX09A6I43iUOIM7Z3oLSOYLgEtUWXvgusegu/5ch5kR+0ujH449PYkkdqxlnIDXnhPdsHWbL93qtd2d1jGxe09pB67rgmCVRfhW18t9fWps6gNy5kz6lQTwJc+Q3bt3q1/dvdttDg4qAI17ABzNujf5gf/lqanzm48cfV7tvP2NdvmqtXAcj13XhU6oecvTodrgJSDFeqptvNOiAEbZanH8EBJt2ERUE8gmCMeZbC1lKJ2HL8KGOr5CHRLfpV5b62o3o5J4coiJ3HJh4KNerwNM4nmpuTBofrEy3/jsDVtvOE1ES27wvyQJFIA++q53OcXBQXXkyJEmABxKq81BGHxubm5m09PPPqX6B5fZwWUroZXDWuuOtYlic4FbAdfu6DgtUFsLiUy7da1pMWOlyLqO3XRoGfotPNEpvR1iFFuw1MF82+67topvseP4aGmB3hFNAUFpB6lUCjYMqVqa7wXUv8r35L4xcWb8l1984oniUqvVKwZQRGj/F7/oDd1wg8bkpD82NiarHGeLCcPfn5me2PHMM0/qQqEoN998m6TSGXZcF1o7bWoeu6uYqRu4hai0Bo0Wwa/9txbFb4Wk4n6250PbHYf2KbskqEMDJKBRp1Zo4Ucdxyffb58m2sIRM2vFcBwX6XQWYgVz05PKBP52x3P+Q2HFqq9Onh7ffeqZU70isiRuzCueDXv27HG3Dw66GSD84eRksLk/PUza+6Pp6Yl3Pf/CIW0guPvNbw1XrdnIruOyVgqcOKSZo5CNUh21y9DSnC1Wl7xoObnRITaJ1EirLEjynpnjilxx2oMgSsfv+E5ymeijWHa6vC3o7EiyIrcBi7FvCXF8nfahSXGi6NrWGjTrdcxMT6E8P4/+wSFkiwUBcRnGfN8E9svloPrXTz755PT999//siMZVwTgvn37dJ/ve+MA3v72tzd++M1vDnLK/MH05OTPHn3xmNP0m9h5+xvCrdt3kOumlOc6bUcwYs9+zAzb7rIYwNbLLtG5iAQirnYnsRTadoZZ/HGSwS1dmd1t0LrvvgPARJV2I9hhU3ZMoNY8ko7jbHuSxH00JkSjVsPo2dOYPD+OoeEV6B0YRLSdTjVJ7DFr7TfYBP+zXi6/uGpiooR77jEdk+uyKYuXBXDPnj1qFVa52S1lDh476fONq3ua1cbnxsdH33Py9EllrcWWG7eFO3bejUw2rx3HgUqi6Uk4iNuUHZ2mxMLB7Mwa44t0rbWYLWSn0WDaZN2zFlY6ddzCk3RKW7ckJkSqzYgTe7BdybcNZrx7I9nGmKRHxlnlJvRRLpdx8sUjOHf6NIrFHvT2D6K3vx/pTBbKcYRBJQs5BsFThPDA+dFTj5899qOj7/qFT1zWIXBJQ35kZIQHBwedIprq4OF5f83qgWWV85N/cG7s7D+Znp6GcvTM2nUbajfdcsdAJpvzWuB1UvBWTC9ZsS4cw04ic4VW/ALrOmaCHWAkZSijXbkL3HdygcjFf0u8ROj6W+dm0Bbr7HTRmJjxCrUFlaJMA1YOMpks1qxdj/LcPMZHz2FifAyO5yKdySCTyZHneQVifr014abA92+sVmYrdGzm+SsZhouOlojQsYcecrNDQ+p7x4+HXrO0pl6b+y8TkxOvbwbBiUw6+/CGDVsqW7bd8v5CsW+DE697iaM6CYomALbSI7qYZ/JfO8oOoF1w9WK9W7TqawRIi3HGW9LiGDG6tmhSW4qoY52LLk0LVPuCF8n6K+1OWGu7TZFkmRABxf7XZqOBmZlJPP/0U6XRM6enQhMSWVtnpefZ4ZNk7DEmfrruV55wBteMfuQjH7mix9ItOkQjIyP89m3bPKwC/vZvDzW3YZuu9h9bf2b0zLLSrD/d01+YvfctP7F91ep1v5PLF16nHVfr2MaLNE4c8+N2xSQkOS/JzcXSIgl4CYDRptsrl8QFllWn1pQOwiMLV9suSWwPRedVW1vyF3YlVtOJCjVhxEEoyRoXtCMaSaEhE6Jeq6FSKZXOnTj+rw8+/fRD5cZkTSpUL5RK/tiKFWZkZOQl24kXjNLIyAh/+O1v90pnz5ptu3cH8fbils756h//bm54w86bVixf/rupdPYurR2ltSbVSkWI7L5u53Xb+I7WtwVTekEc8KIE5mKtRVTQkoT2285NLdH/CW4tUDsO6Lpspym60NvWsR4aYxD6fmw2UfteE3dfUvc78NGo11Apl06MnTn94eCxxx6+d2TkqlLzL4jI79+/H8XVq839H/tY+OCDD7ZuZffu3eoLXxjxVq+59fVDQ8O/l0ql79DaUcyKiJmilAUVbzJpkxVWsZSJtEyILnusa92jlw7ewlGnhW873G1E8TqJlgboOn6h5uaLXKNzOhBAxDAmSnWM9nm0swU6yRC319herd3b5z338fU33jh2Ndu3r2SoCAA98fWvp4Y3rn1dKlP4fVJqJzPrKMquIn9nC7wkVYFjdRLta0+iEF0ZZq0rXJ7EWGMjqb5U65Ak6ViTFosntr0ycgFJXbQHnYuhLBT3KMW/Uasim81F+xlNvMZyh9FvLawxaDbraDTqUpqd2Vebnf3QrW9966mXC+ClRoQA0J49u/mJr389Nbxty71etvinynFud7TjuNplR7vkOFGUnVWUvcwcVYc3YQDTqMGvVWGNaQ/wRQfr4nNJRNCoNyCXm6fU/XJRxnvBF+jys7jrCwvYUDwZFStAgEa9Cq1VpIUgceG9+ByxPew4HjwvRblC8e5sT8//sW/fvtTLBXAxM4KAaFMmAH7bpn+SM/29HyNWv+I4bp9izZFLLM5Y7jAVQNEDMkyzCeP7sGJhxMJTGox47etaS7op/kVBFKBULkEphpe+zL12WAidQdnOz4CFQtn97gK8F6WkbRYrcUzSdT2Mj56B0i5S6QxCCeLUD4BUYlYJtFYgeIBYV6z54Apjnn3ic5/74m1XyDwvCmDiaL3//vt5165dete2beutps+4TuodjuMoTthlkjeiEm+LRLko9TpCvwljwpj5xfZth1HeokQxtW+N6yXWvjAMETSbKJdKcD2v63wXBRAXas5FNGnH32KJudR5k5edWhRt9qldF6lMFmdOvoj1W7ZCOxphGMZ1bdpEO1pmFERSgCBnrfk3uO225wF87xJdXLR1kZhDhw6p3btBb33rJ7LrBvo+4LjeF7xUdqfjuqy0BmsNav2o1i5X22ggqFcRNJswxrTAS+7b9TJdUtqeyB3mwyUAbDaaKM3PAyJwXC8Knl5K7y1up18IxIL3nW8vdRwkYtcXMFYQtNI4d+o4IEChtxesuP1MvA7exorBxHHpE+qxYm68/773/MUf/7f/9pKeLa+BWPL27uWzd93lVsbp3VkPn+J88SZWipMQkCQMUgQ2CGADHyYIYMKwDZpE5TxaZUEg0EoLqST7MLnpTj2HFju8WKtVqwjCAI7rolqpQGsNx3MufWedIHZ61Bao0sUPuoQaRfcq0GK0Mb11XRfFnn6cOXUcmVwOvUND0E5UBVGsdPWLHQWIhuu5CG1m1/CqFf/+iSee+Nhtt912xapUiwhPHT6cLbz57vuGU96vkvZeT9rRrQcdxixSmkGkJk0Ia6JK7zb2SNgOoza6sWioxNiq9hwmUKYjA6U9DIk5cQnwjDEol0qo12rwXBehcVCtVlBweqLQ1KUAvAhgnTb8BfZ8vKpdeD5qr9vo2IjT4dAGIi9M38CgjJ49RedOn0Qqk0Emn4eChsQ1TpMZRQDYceBaiyAI2Hrpf9YXmG8B+B+4QlWqQSQDImE4O3sKjveX1oR+UKlvBWwOVrSIMBLHsACC2G3U4Y1vxb6jBc4KMGWNfViTPO54qV8HUYYW1VVdXHHR1mw0UK/X4Ad+tJ5YC9/30ajVkMlmr0yVom12LuYLX+ge7TYVkhbrvm60u126AMCMdDZHuXxeJsZHiUBYv/VGZPL5aPu4FUAMOk0R5blIWQMrNg3m337yu9/df+ub3zyJK2gLtQRhzx4+f+ut/Y5S66FoGxHfKNauBaMfQjnA9gAoEMiVyIvcFGBGrD1FpJ4ByRN+YA94E2bWW5P+kJsv/B4p7VAc30s8/clP4nRebLqJCKYmJjB67hyajQZ6enuQzxeh45IkhZ5eeCn30nfYaRsCXQLTiYUsduBCBpS8WBAHbIe0Yo0UGoyPnrNPPv49Tnkp9A8OYf2WregZGGz7hWMNFjnGLcQIGtUK/MA31XL5yyfOn//Qvffee1kvTRcLJUAQBRcn4p8fxE5fPnbsmM7n8zrVbLohcyYwxtVK+WZuLnQymcZYo1E/uG2b2Q1YIpIzBw/2Zdzi64kjiwhdaqdDfV6ihWGISqWKMAi6UyII0fOUymVoVYRyLhFU6VClCWgJE75AlS48kDpAXChqrc+pG1xEarSnt5dcx5NypUwgQRgEWLthE4ZWrgQrBWgFNtHyRGBAWXjpNKy1KpPL7d5I9Fci8lUiumSw93J5oRIHFk380wRQBTB7yYNEeG701FqlnR0Uh9a73FaL0b8LTgJUK1XUa9VWCSzT4RAQAIHvo1KpolAsXN60WABi559kkdeLfqFrYNoTocMyamkV10tR/9CwmX7hOSUCGCPwfR/z83NYs2490rkckGTOWQsIQzkOUpksUKumkM///qmjR58XkcOXSoZ6RfZ279+/30276TtYqXXdGdedA3NpAIMwxNzsLALfb41kFLaxLSQEQL1WRaNWXzzb7CJAXta06Hp3cZJ1UZuSIo/L8PKVZEXEbzZRrdYwNzeL08eO4bknD2BybCxipUyAVpFZphjac5HOZuFqvbaQzX154syZdZfKn1nyPfIiQtPTZ/uV9t4GVtmOaAba9h5d7hwol0qo1SpRSazYf2qtbWVUSEucBKXSHJRWcFPepcHr7kk79BN/sHjmxSJk5gpcyESEnr4+cl1PqpUyJSGtMDTwwwC1ShnLVq7GyjVrkSsU4tipAligyINrLQW+/zpi/vyZ5449ICInFpPEJZfAvXv3cl5n7iStdlGS49da+jqc1pdovh+gXJqHCaI1PAkS26R+aMxMRCwAhjEW83Oz0c7cl9AWavJ2lOKCb10cs0UtjmiSul6K+geWWd/34fs+/KYP32+iXq9jdn4eLx45jAPffwTPP/0UpsbGEfjN1sNN3EwaXiZNjuvemx8ofGn6xInbjh49esEMXXIAb9+0KU/a+WkwL2tTTbTtPb6M9FmL0vwcatUqjLVxDc9opKLdRUlwNhlpC2KC7/soz8/HZZgvhdiVgXjpTsol9Gf7t9Iaq9esMbV6E34QIAxDhIGB3wzQqDdQrdcxMzuLY0eP4MAPHsOPHvsBzhw/jmqpDGMslOvCSaXIS3l3O7n8n/dmMv/yzMGDfSKiRkZGWABa0lppMjLC2fe86yZm/UlSqh8JAQXa26ovKX2CarmKmakpNBp1JCqXEO3CtVaQTqehdLIBkzoIbQSiYobrehcHoYMIXwDaAmHripRcJMfiAqml5E6iNxqQhx99pNRs+g4ROLGbrbEw1sAag9DYSOuUS5gcP4+JsTFUKxWYMIzj3QyldK9ifqeTytw5Pz3FG9dsHf+LW29uLNkaKCI0M3Msl7f8z+DwKihFLe5PV7b21Wt1TE1OoF6vRZgTwYqNJI4JEprYdadiL26SYyOxcDPKpRKIGNlc9rLXW+j4BjrMig7m2nrcAeQCQ771nQTE+E9MBEsCL53VG9et/+tvfutbY4MD/XcN9PRsTmfSvZ7jstYOlFJQ3N7TwaxQqdYwNT0DrY8glUrBdT1RWhsAvmIayGayG4w46c1jm2UpSQwV3OHXk1LvgdKRo5I6wesesIUt8H3MTE2iVqu2iAti/KXDcDbGwJrIdkpyf5MAMXFEdCrleTAT0tnsFfS6u08LCU13OuhFXd0XOLYTraAdTZvWb+wZm/zyvztx7Mzn1qxbsXpoaOj2Qia71Us5y1zXHdJKDzJRXintaVaktAYAw8R1MNeJ6CRgDxhrH/N9/wdqNDv28f/0cZ/eSksDoIjQ3NxcIe86v0hKrYrqFndMy8sY7YEfYHJiAuVSGcaErXR8G9fNTiSNiBGayA1lrQGDIHHFpxbjJ4IxFuX5eRAzUqnUlUkiLgRyoTTKJda9VpbhAs8OEaHYU1y/7YZN+rtPfO3E//irx4/u3Lnzu/fddx/19fXR6dOndY4oz8z92nX7WCkjgWkyuTVrTN3J5SrMXC2VSkGc9CQA5BOf/QSApTMjVMZ17yFHvRsqLifYGQa4yAAKgGaziemJCZRK8whMgM4dQEmEgwQt8mNM2DqfjR9THpXlas96IkFoDebnZkE9vfDSV7jD6xLS2ML4Qu25SFip00wRZHO55W+849b0f/nTP64BkAMHDgQHDhygkZER+sxnPuMDqAEY7zqsY95cqstXzUKjtW9muVLqfwfxQPf9LGALHURARFCv1jA1Po5yaR5hGCIpTB5FOCKmR3FRO4CEiIIwDKcBCKsoHmmNgRXTZcgnmzhNaDA3O4tGrYbL52N0A3DBR/G8Wrih+HK+dAIhk82lV61YsR7dSZDSKVELRiiZN5ft9NWbEWNj6Z5c5hfBdFcc32nTs4sEG6yNDPXpqfOoVCux2mwhGyfmIp6GJCIwInaCCH8Eaz9ujDmWLK3RE1yiJ3vaJJBMreLlMMagNDeHZuMlPIhzkX53mhddm0M7v7dguKOtIQwvlVLZfH7dVY/1Iu2qzAjZs0c1b7rpzcrRv0PMPWiVB1zsy9EvYwzmpqdRmptFrVaN0i/aaERpGK11RACiQKx9WhR/cmJq6gt13z/U29f3rKPUu4k5I7G0tpfZ7lo0BIEYg6bfhOu4kYa/vCOlA7UFbxf4Ilq0ZlHThOInhlqqVSpHhlat+uZSPwHmZa+BIkLNUmm99tzfBPEgRPiSAyMCv+ljfm4WlWoZzUYjck4nMznO3kr2/QGwpNS8GNljQ/rDZ5576liSbi4i+04dP/6LrPjPWHExeYy4BSLTU9rqK0HWmBBzM9Po7euHk3oJSWCXWRcvRWwgaO3M0kqvQueDoJaovWwVOj8/38Pp1G8S0RsQBYYvEtQDbGhRq5QxPT2BUnkezUY9SjWkuLCddBcQIKBJpJ4Ua3+dmvVPPfPCM8ceeOCBVliFiOza9esfQmh+hUCTzBzvSIoM5KT8cmJMS5wJHgYhZmdn4DeaL+1mL7MuLprWmjiL4qw9VrRm2+Dgy04fXDIAI2f1dCGbzf6WIt4NUHdEtSP13IYhaqV5TJ4fxcTEeZRL82g267DWQJham0Raj7YV8Ql4HuD/W3z87PmpqT/Z8aY3TX3kIx8JFjpyiciu3rDhT3xr3w8r56JE4ujJZBI/JCvhAdRB6YJmEzNTkxGxeakgLqJSLyh8sNBfQVEVDddLLwM3i0sN4MtRoalsNvsAET0A4AJ+LtYibDbRqNdQb9TRaNTR9P0ol6YlaSxiheKNJyIC31o5CcifK+av3HLbrS8CMJd77Ftc3nLfcwcOfCiVyfxH7TpbrDEskOiZuDZOV2w9tTMa4TAMMDs9jaKxSOeyHWVGXl7rijEucLklTgblOG5K5XoAnHvVAWxtzB8bS9sgeEAr9RuwNicxYMYYmMBHs9FAs9lA0/cRhpHz1hjTofQj21CMNSKoCHDaWnmSrH0Y1n5XXPfU615CRlYC4p49e769YmDFeweGen7P89x3W2uVRdgqwdXygnXEi4wJMT83A7/ZQL6nB7H348rQag3MAhBxoUEPRBl3qVTK6evt7VtK8K4YQERsVXzXXduYn79XjJk1Yo01YSoMjWutUUEYUmgCBKGBtdZGoR4ARIZAgYg0IJiAkSMCeoyIfijMx2XMTNz607c3rqYER7zH/PBjjz32QNGmfttzvZ+3BhmxlpglrgbVMeiSgGhQrVYQhCEKPT1wU6krJqhdqHW8Bbpdf4kHyUunHLenZ3CpAbyi/naUxuCTJ0/mfX8+mwlNusmZorbBUGCp3yDIh0ZSzAoWxrfWhgQVWIsSEM6yqElOmYmJiercd77zHf/l7IW7kvbEE084Web3OKnUb4OwiQhOUoW344bapZtje1FrF4VC8eWr1MUSoBKRtBZBo25PPvP0L9/45jd/AVdgoF9puzrlH5+jwwuy2Pmitf1Vfozpi88/v1lgP0ZC7wZhLTHrVlmtJL3QJmsjRVnSSiFfjMo4dwF+JW2xQH0HoTNBgHOHX/jUuq997XdoCSfvUgB43bajR4961vdvVyT/kojeTsRDxO1K60kxBMRPjImCx4x0Nouevr7WjuOraolTwhjMnjv7h4Pr1//aUlZselUfQ/5qt02bNjUBfO+Jb33r2Z4Vy94AkV8Sxfcyc1+UyxcZ+mIjb401URjLzM8j8H0UenqQymSujqW2DHqGl8sNff7zn1dYQmP+H7UELmwn9u1LhQMDdxLTB4jonazUShFR8fN2244gAjFHRWFTqTTy+QK8qzU3BAgazUcPHn7+bbfddttLNEIv3n6sAEzavn379Oq+vq2i+YMs+BkAayGWbRiK5bjCAhERxZWGtUImm0UmGz8yXeuXC+YppdTtRHRFafNX0n4sAUzaiAh/+OnvL28a771Q/D4huYVEstZC2WiPC8fZGsSOhoqfNZHNZpDO5uCkvJdKduaNMW/wPO/QUt3DjzWAne3gwYMuyuWNjsN3MPE91srtRDRsjc1StLmOhcCsHSjtRLuKUilkslmkokfwXD7yD4QA3qe1/vpS9fs1ABdpIkIvfPvbfZxKbSPGHZbVbQTZAivLiFBkJo+Vw6QdUo4TPfbA9eClU/AyGSjPjYupX3hqa+0nXdf9D0vV19cAvEyLnRj6kUceSS3TQTFs8hqxwRom3iZMNzLzBlZ6kB2voBydUo6rteOSk/LIy+bgpqIHcVE71v1nDz/88AfvvYKdR1fSXgPwKlpUCBDuULGYb6bTA47COiu8iR21WbFew1qvIKX7tdY5N51yUpksa9edViZ8pzcwcEW10C7XXgNwaVvkldq/X50ENHp6Us1qNQMgT46TMlapdCbtmGZ1dOOuXWeW5ILX+o5/TFprnBMfLC2RP/T/B96QkmdPWpSQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA3LTA3VDA5OjE5OjA4KzAwOjAwC8IICQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNy0wN1QwOToxOTowOCswMDowMHqfsLUAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMtMDctMDdUMDk6MTk6MDgrMDA6MDAtipFqAAAAHnRFWHRpY2M6Y29weXJpZ2h0AEdvb2dsZSBJbmMuIDIwMTasCzM4AAAAFHRFWHRpY2M6ZGVzY3JpcHRpb24Ac1JHQrqQcwcAAAAASUVORK5CYII=",protocol:"trader_joe_v2_1",slippage:!0,blockchains:["avalanche"],avalanche:{router:{address:"0xb4315e873dBcf96Ffd0acd8EA43f689D8c20fB30",api:VS.ROUTER},factory:{address:"0x8e42f2F4101563bF679975178e880FD87d3eFd4e",api:VS.FACTORY},pair:{api:VS.PAIR},quoter:{address:"0x64b57F4249aA99a812212cee7DAEFEDC40B203cD",api:VS.QUOTER}}};var GS=t=>new bx(Object.assign(HS,{scope:t,findPath:t=>VS.findPath({...t,exchange:HS}),pathExists:t=>VS.pathExists({...t,exchange:HS}),getAmounts:t=>VS.getAmounts({...t,exchange:HS}),getPrep:t=>VS.getPrep({...t,exchange:HS}),getTransaction:t=>VS.getTransaction({...t,exchange:HS})}));const qS={name:"uniswap_v2",label:"Uniswap v2",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQxIiBoZWlnaHQ9IjY0MCIgdmlld0JveD0iMCAwIDY0MSA2NDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yMjQuNTM0IDEyMy4yMjZDMjE4LjY5MiAxMjIuMzIgMjE4LjQ0NSAxMjIuMjEzIDIyMS4xOTUgMTIxLjc5MUMyMjYuNDY0IDEyMC45OCAyMzguOTA1IDEyMi4wODUgMjQ3LjQ3OSAxMjQuMTIzQzI2Ny40OTQgMTI4Ljg4MSAyODUuNzA3IDE0MS4wNjkgMzA1LjE0OCAxNjIuNzE0TDMxMC4zMTMgMTY4LjQ2NUwzMTcuNzAxIDE2Ny4yNzdDMzQ4LjgyOCAxNjIuMjc1IDM4MC40OTMgMTY2LjI1IDQwNi45NzggMTc4LjQ4NUM0MTQuMjY0IDE4MS44NTEgNDI1Ljc1MiAxODguNTUyIDQyNy4xODcgMTkwLjI3NEM0MjcuNjQ1IDE5MC44MjIgNDI4LjQ4NSAxOTQuMzU1IDQyOS4wNTMgMTk4LjEyNEM0MzEuMDIgMjExLjE2NCA0MzAuMDM2IDIyMS4xNiA0MjYuMDQ3IDIyOC42MjVDNDIzLjg3NyAyMzIuNjg4IDQyMy43NTYgMjMzLjk3NSA0MjUuMjE1IDIzNy40NTJDNDI2LjM4IDI0MC4yMjcgNDI5LjYyNyAyNDIuMjggNDMyLjg0MyAyNDIuMjc2QzQzOS40MjUgMjQyLjI2NyA0NDYuNTA5IDIzMS42MjcgNDQ5Ljc5MSAyMTYuODIzTDQ1MS4wOTUgMjEwLjk0M0w0NTMuNjc4IDIxMy44NjhDNDY3Ljg0NiAyMjkuOTIgNDc4Ljk3NCAyNTEuODExIDQ4MC44ODUgMjY3LjM5M0w0ODEuMzgzIDI3MS40NTVMNDc5LjAwMiAyNjcuNzYyQzQ3NC45MDMgMjYxLjQwNyA0NzAuNzg1IDI1Ny4wOCA0NjUuNTEyIDI1My41OTFDNDU2LjAwNiAyNDcuMzAxIDQ0NS45NTUgMjQ1LjE2MSA0MTkuMzM3IDI0My43NThDMzk1LjI5NiAyNDIuNDkxIDM4MS42OSAyNDAuNDM4IDM2OC4xOTggMjM2LjAzOEMzNDUuMjQ0IDIyOC41NTQgMzMzLjY3MiAyMTguNTg3IDMwNi40MDUgMTgyLjgxMkMyOTQuMjk0IDE2Ni45MjMgMjg2LjgwOCAxNTguMTMxIDI3OS4zNjIgMTUxLjA1MUMyNjIuNDQyIDEzNC45NjQgMjQ1LjgxNiAxMjYuNTI3IDIyNC41MzQgMTIzLjIyNloiIGZpbGw9IiNGRjAwN0EiLz4KPHBhdGggZD0iTTQzMi42MSAxNTguNzA0QzQzMy4yMTUgMTQ4LjA1NyA0MzQuNjU5IDE0MS4wMzMgNDM3LjU2MiAxMzQuNjJDNDM4LjcxMSAxMzIuMDgxIDQzOS43ODggMTMwLjAwMyA0MzkuOTU0IDEzMC4wMDNDNDQwLjEyIDEzMC4wMDMgNDM5LjYyMSAxMzEuODc3IDQzOC44NDQgMTM0LjE2N0M0MzYuNzMzIDE0MC4zOTIgNDM2LjM4NyAxNDguOTA1IDQzNy44NCAxNTguODExQzQzOS42ODYgMTcxLjM3OSA0NDAuNzM1IDE3My4xOTIgNDU0LjAxOSAxODYuNzY5QzQ2MC4yNSAxOTMuMTM3IDQ2Ny40OTcgMjAxLjE2OCA0NzAuMTI0IDIwNC42MTZMNDc0LjkwMSAyMTAuODg2TDQ3MC4xMjQgMjA2LjQwNUM0NjQuMjgyIDIwMC45MjYgNDUwLjg0NyAxOTAuMjQgNDQ3Ljg3OSAxODguNzEyQzQ0NS44OSAxODcuNjg4IDQ0NS41OTQgMTg3LjcwNSA0NDQuMzY2IDE4OC45MjdDNDQzLjIzNSAxOTAuMDUzIDQ0Mi45OTcgMTkxLjc0NCA0NDIuODQgMTk5Ljc0MUM0NDIuNTk2IDIxMi4yMDQgNDQwLjg5NyAyMjAuMjA0IDQzNi43OTcgMjI4LjIwM0M0MzQuNTggMjMyLjUyOSA0MzQuMjMgMjMxLjYwNiA0MzYuMjM3IDIyNi43MjNDNDM3LjczNSAyMjMuMDc3IDQzNy44ODcgMjIxLjQ3NCA0MzcuODc2IDIwOS40MDhDNDM3Ljg1MyAxODUuMTY3IDQzNC45NzUgMTc5LjMzOSA0MTguMDk3IDE2OS4zNTVDNDEzLjgyMSAxNjYuODI2IDQwNi43NzYgMTYzLjE3OCA0MDIuNDQyIDE2MS4yNDlDMzk4LjEwNyAxNTkuMzIgMzk0LjY2NCAxNTcuNjM5IDM5NC43ODkgMTU3LjUxNEMzOTUuMjY3IDE1Ny4wMzggNDExLjcyNyAxNjEuODQyIDQxOC4zNTIgMTY0LjM5QzQyOC4yMDYgMTY4LjE4MSA0MjkuODMzIDE2OC42NzIgNDMxLjAzIDE2OC4yMTVDNDMxLjgzMiAxNjcuOTA5IDQzMi4yMiAxNjUuNTcyIDQzMi42MSAxNTguNzA0WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBkPSJNMjM1Ljg4MyAyMDAuMTc1QzIyNC4wMjIgMTgzLjg0NiAyMTYuNjg0IDE1OC44MDkgMjE4LjI3MiAxNDAuMDkzTDIxOC43NjQgMTM0LjMwMUwyMjEuNDYzIDEzNC43OTRDMjI2LjUzNCAxMzUuNzE5IDIzNS4yNzUgMTM4Ljk3MyAyMzkuMzY5IDE0MS40NTlDMjUwLjYwMiAxNDguMjgxIDI1NS40NjUgMTU3LjI2MyAyNjAuNDEzIDE4MC4zMjhDMjYxLjg2MiAxODcuMDgzIDI2My43NjMgMTk0LjcyOCAyNjQuNjM4IDE5Ny4zMTdDMjY2LjA0NyAyMDEuNDgzIDI3MS4zNjkgMjExLjIxNCAyNzUuNjk2IDIxNy41MzRDMjc4LjgxMyAyMjIuMDg1IDI3Ni43NDMgMjI0LjI0MiAyNjkuODUzIDIyMy42MkMyNTkuMzMxIDIyMi42NyAyNDUuMDc4IDIxMi44MzQgMjM1Ljg4MyAyMDAuMTc1WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBkPSJNNDE4LjIyMyAzMjEuNzA3QzM2Mi43OTMgMjk5LjM4OSAzNDMuMjcxIDI4MC4wMTcgMzQzLjI3MSAyNDcuMzMxQzM0My4yNzEgMjQyLjUyMSAzNDMuNDM3IDIzOC41ODUgMzQzLjYzOCAyMzguNTg1QzM0My44NCAyMzguNTg1IDM0NS45ODUgMjQwLjE3MyAzNDguNDA0IDI0Mi4xMTNDMzU5LjY0NCAyNTEuMTI4IDM3Mi4yMzEgMjU0Ljk3OSA0MDcuMDc2IDI2MC4wNjJDNDI3LjU4IDI2My4wNTQgNDM5LjExOSAyNjUuNDcgNDQ5Ljc2MyAyNjlDNDgzLjU5NSAyODAuMjIgNTA0LjUyNyAzMDIuOTkgNTA5LjUxOCAzMzQuMDA0QzUxMC45NjkgMzQzLjAxNiA1MTAuMTE4IDM1OS45MTUgNTA3Ljc2NiAzNjguODIyQzUwNS45MSAzNzUuODU3IDUwMC4yNDUgMzg4LjUzNyA0OTguNzQyIDM4OS4wMjNDNDk4LjMyNSAzODkuMTU4IDQ5Ny45MTcgMzg3LjU2MiA0OTcuODEgMzg1LjM4OUM0OTcuMjQgMzczLjc0NCA0OTEuMzU1IDM2Mi40MDYgNDgxLjQ3MiAzNTMuOTEzQzQ3MC4yMzUgMzQ0LjI1NyA0NTUuMTM3IDMzNi41NjkgNDE4LjIyMyAzMjEuNzA3WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBkPSJNMzc5LjMxIDMzMC45NzhDMzc4LjYxNSAzMjYuODQ2IDM3Ny40MTEgMzIxLjU2OCAzNzYuNjMzIDMxOS4yNUwzNzUuMjE5IDMxNS4wMzZMMzc3Ljg0NiAzMTcuOTg1QzM4MS40ODEgMzIyLjA2NSAzODQuMzU0IDMyNy4yODcgMzg2Ljc4OSAzMzQuMjQxQzM4OC42NDcgMzM5LjU0OSAzODguODU2IDM0MS4xMjcgMzg4Ljg0MiAzNDkuNzUzQzM4OC44MjggMzU4LjIyMSAzODguNTk2IDM1OS45OTYgMzg2Ljg4IDM2NC43NzNDMzg0LjE3NCAzNzIuMzA3IDM4MC44MTYgMzc3LjY0OSAzNzUuMTgxIDM4My4zODNDMzY1LjA1NiAzOTMuNjg4IDM1Mi4wMzggMzk5LjM5MyAzMzMuMjUzIDQwMS43NkMzMjkuOTg3IDQwMi4xNzEgMzIwLjQ3IDQwMi44NjQgMzEyLjEwMyA0MDMuMjk5QzI5MS4wMTYgNDA0LjM5NSAyNzcuMTM4IDQwNi42NjEgMjY0LjY2OCA0MTEuMDRDMjYyLjg3NSA0MTEuNjcgMjYxLjI3NCA0MTIuMDUyIDI2MS4xMTIgNDExLjg5QzI2MC42MDcgNDExLjM4OCAyNjkuMDk4IDQwNi4zMjYgMjc2LjExMSA0MDIuOTQ4QzI4NS45OTkgMzk4LjE4NSAyOTUuODQyIDM5NS41ODYgMzE3Ljg5NyAzOTEuOTEzQzMyOC43OTIgMzkwLjA5OCAzNDAuMDQzIDM4Ny44OTcgMzQyLjkgMzg3LjAyMUMzNjkuODggMzc4Ljc0OSAzODMuNzQ4IDM1Ny40MDIgMzc5LjMxIDMzMC45NzhaIiBmaWxsPSIjRkYwMDdBIi8+CjxwYXRoIGQ9Ik00MDQuNzE5IDM3Ni4xMDVDMzk3LjM1NSAzNjAuMjczIDM5NS42NjQgMzQ0Ljk4OCAzOTkuNjk4IDMzMC43MzJDNDAwLjEzIDMyOS4yMDkgNDAwLjgyNCAzMjcuOTYyIDQwMS4yNDIgMzI3Ljk2MkM0MDEuNjU5IDMyNy45NjIgNDAzLjM5NyAzMjguOTAyIDQwNS4xMDMgMzMwLjA1QzQwOC40OTcgMzMyLjMzNSA0MTUuMzAzIDMzNi4xODIgNDMzLjQzNyAzNDYuMDY5QzQ1Ni4wNjUgMzU4LjQwNiA0NjguOTY2IDM2Ny45NTkgNDc3Ljc0IDM3OC44NzNDNDg1LjQyMyAzODguNDMyIDQ5MC4xNzggMzk5LjMxOCA0OTIuNDY3IDQxMi41OTNDNDkzLjc2MiA0MjAuMTEzIDQ5My4wMDMgNDM4LjIwNiA0OTEuMDc0IDQ0NS43NzhDNDg0Ljk5IDQ2OS42NTMgNDcwLjg1IDQ4OC40MDYgNDUwLjY4MiA0OTkuMzQ5QzQ0Ny43MjcgNTAwLjk1MiA0NDUuMDc1IDUwMi4yNjkgNDQ0Ljc4OCA1MDIuMjc1QzQ0NC41MDEgNTAyLjI4IDQ0NS41NzcgNDk5LjU0MyA0NDcuMTggNDk2LjE5MUM0NTMuOTY1IDQ4Mi4wMDkgNDU0LjczNyA0NjguMjE0IDQ0OS42MDggNDUyLjg1OUM0NDYuNDY3IDQ0My40NTcgNDQwLjA2NCA0MzEuOTg1IDQyNy4xMzUgNDEyLjU5NkM0MTIuMTAzIDM5MC4wNTQgNDA4LjQxNyAzODQuMDU0IDQwNC43MTkgMzc2LjEwNVoiIGZpbGw9IiNGRjAwN0EiLz4KPHBhdGggZD0iTTE5Ni41MTkgNDYxLjUyNUMyMTcuMDg5IDQ0NC4xNTcgMjQyLjY4MiA0MzEuODE5IDI2NS45OTYgNDI4LjAzMkMyNzYuMDQzIDQyNi4zOTkgMjkyLjc4IDQyNy4wNDcgMzAyLjA4NCA0MjkuNDI4QzMxNi45OTggNDMzLjI0NSAzMzAuMzM4IDQ0MS43OTMgMzM3LjI3NiA0NTEuOTc4QzM0NC4wNTcgNDYxLjkzMiAzNDYuOTY2IDQ3MC42MDYgMzQ5Ljk5NSA0ODkuOTA2QzM1MS4xODkgNDk3LjUxOSAzNTIuNDg5IDUwNS4xNjQgMzUyLjg4MiA1MDYuODk1QzM1NS4xNTYgNTE2Ljg5NyAzNTkuNTgzIDUyNC44OTIgMzY1LjA2NyA1MjguOTA3QzM3My43NzkgNTM1LjI4MyAzODguNzggNTM1LjY4IDQwMy41MzYgNTI5LjkyNEM0MDYuMDQxIDUyOC45NDcgNDA4LjIxNSA1MjguMjcxIDQwOC4zNjggNTI4LjQyNEM0MDguOTAzIDUyOC45NTUgNDAxLjQ3MyA1MzMuOTMgMzk2LjIzIDUzNi41NDhDMzg5LjE3NyA1NDAuMDcxIDM4My41NjggNTQxLjQzNCAzNzYuMTE1IDU0MS40MzRDMzYyLjYgNTQxLjQzNCAzNTEuMzc5IDUzNC41NTggMzQyLjAxNiA1MjAuNTM5QzM0MC4xNzQgNTE3Ljc4IDMzNi4wMzIgNTA5LjUxNiAzMzIuODEzIDUwMi4xNzZDMzIyLjkyOCA0NzkuNjI4IDMxOC4wNDYgNDcyLjc1OSAzMDYuNTY4IDQ2NS4yNDJDMjk2LjU3OSA0NTguNzAxIDI4My42OTcgNDU3LjUzIDI3NC4wMDYgNDYyLjI4MkMyNjEuMjc2IDQ2OC41MjMgMjU3LjcyNCA0ODQuNzkxIDI2Ni44NDIgNDk1LjEwMUMyNzAuNDY1IDQ5OS4xOTggMjc3LjIyMyA1MDIuNzMyIDI4Mi43NDkgNTAzLjQxOUMyOTMuMDg2IDUwNC43MDUgMzAxLjk3IDQ5Ni44NDEgMzAxLjk3IDQ4Ni40MDRDMzAxLjk3IDQ3OS42MjcgMjk5LjM2NSA0NzUuNzYgMjkyLjgwOCA0NzIuODAxQzI4My44NTIgNDY4Ljc2IDI3NC4yMjYgNDczLjQ4MyAyNzQuMjcyIDQ4MS44OTdDMjc0LjI5MiA0ODUuNDg0IDI3NS44NTQgNDg3LjczNyAyNzkuNDUgNDg5LjM2NEMyODEuNzU3IDQ5MC40MDggMjgxLjgxMSA0OTAuNDkxIDI3OS45MjkgNDkwLjFDMjcxLjcxMiA0ODguMzk2IDI2OS43ODcgNDc4LjQ5IDI3Ni4zOTQgNDcxLjkxM0MyODQuMzI2IDQ2NC4wMTggMzAwLjcyOSA0NjcuNTAyIDMwNi4zNjIgNDc4LjI3OUMzMDguNzI4IDQ4Mi44MDUgMzA5LjAwMyA0OTEuODIgMzA2Ljk0IDQ5Ny4yNjRDMzAyLjMyMiA1MDkuNDQ4IDI4OC44NTkgNTE1Ljg1NSAyNzUuMjAxIDUxMi4zNjhDMjY1LjkwMyA1MDkuOTk0IDI2Mi4xMTcgNTA3LjQyNCAyNTAuOTA2IDQ5NS44NzZDMjMxLjQyNSA0NzUuODA5IDIyMy44NjIgNDcxLjkyIDE5NS43NzcgNDY3LjUzNkwxOTAuMzk1IDQ2Ni42OTZMMTk2LjUxOSA0NjEuNTI1WiIgZmlsbD0iI0ZGMDA3QSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ5LjYyMDIgMTIuMDAzMUMxMTQuNjc4IDkwLjk2MzggMjE0Ljk3NyAyMTMuOTAxIDIxOS45NTcgMjIwLjc4NEMyMjQuMDY4IDIyNi40NjcgMjIyLjUyMSAyMzEuNTc2IDIxNS40NzggMjM1LjU4QzIxMS41NjEgMjM3LjgwNyAyMDMuNTA4IDI0MC4wNjMgMTk5LjQ3NiAyNDAuMDYzQzE5NC45MTYgMjQwLjA2MyAxODkuNzc5IDIzNy44NjcgMTg2LjAzOCAyMzQuMzE4QzE4My4zOTMgMjMxLjgxIDE3Mi43MjEgMjE1Ljg3NCAxNDguMDg0IDE3Ny42NDZDMTI5LjIzMyAxNDguMzk2IDExMy40NTcgMTI0LjEzMSAxMTMuMDI3IDEyMy43MjVDMTEyLjAzMiAxMjIuNzg1IDExMi4wNDkgMTIyLjgxNyAxNDYuMTYyIDE4My44NTRDMTY3LjU4MiAyMjIuMTgxIDE3NC44MTMgMjM1LjczMSAxNzQuODEzIDIzNy41NDNDMTc0LjgxMyAyNDEuMjI5IDE3My44MDggMjQzLjE2NiAxNjkuMjYxIDI0OC4yMzhDMTYxLjY4MSAyNTYuNjk0IDE1OC4yOTMgMjY2LjE5NSAxNTUuODQ3IDI4NS44NTlDMTUzLjEwNCAzMDcuOTAyIDE0NS4zOTQgMzIzLjQ3MyAxMjQuMDI2IDM1MC4xMjJDMTExLjUxOCAzNjUuNzIyIDEwOS40NzEgMzY4LjU4MSAxMDYuMzE1IDM3NC44NjlDMTAyLjMzOSAzODIuNzg2IDEwMS4yNDYgMzg3LjIyMSAxMDAuODAzIDM5Ny4yMTlDMTAwLjMzNSA0MDcuNzkgMTAxLjI0NyA0MTQuNjE5IDEwNC40NzcgNDI0LjcyNkMxMDcuMzA0IDQzMy41NzUgMTEwLjI1NSA0MzkuNDE3IDExNy44IDQ1MS4xMDRDMTI0LjMxMSA0NjEuMTg4IDEyOC4wNjEgNDY4LjY4MyAxMjguMDYxIDQ3MS42MTRDMTI4LjA2MSA0NzMuOTQ3IDEyOC41MDYgNDczLjk1IDEzOC41OTYgNDcxLjY3MkMxNjIuNzQxIDQ2Ni4yMTkgMTgyLjM0OCA0NTYuNjI5IDE5My4zNzUgNDQ0Ljg3N0MyMDAuMTk5IDQzNy42MDMgMjAxLjgwMSA0MzMuNTg2IDIwMS44NTMgNDIzLjYxOEMyMDEuODg3IDQxNy4wOTggMjAxLjY1OCA0MTUuNzMzIDE5OS44OTYgNDExLjk4MkMxOTcuMDI3IDQwNS44NzcgMTkxLjgwNCA0MDAuODAxIDE4MC4yOTIgMzkyLjkzMkMxNjUuMjA5IDM4Mi42MjEgMTU4Ljc2NyAzNzQuMzIgMTU2Ljk4NyAzNjIuOTA0QzE1NS41MjcgMzUzLjUzNyAxNTcuMjIxIDM0Ni45MjggMTY1LjU2NSAzMjkuNDRDMTc0LjIwMiAzMTEuMzM4IDE3Ni4zNDIgMzAzLjYyNCAxNzcuNzkgMjg1LjM3OEMxNzguNzI1IDI3My41ODkgMTgwLjAyIDI2OC45NCAxODMuNDA3IDI2NS4yMDlDMTg2LjkzOSAyNjEuMzE3IDE5MC4xMTkgMjYwIDE5OC44NjEgMjU4LjgwNUMyMTMuMTEzIDI1Ni44NTggMjIyLjE4OCAyNTMuMTcxIDIyOS42NDggMjQ2LjI5N0MyMzYuMTE5IDI0MC4zMzQgMjM4LjgyNyAyMzQuNTg4IDIzOS4yNDMgMjI1LjkzOEwyMzkuNTU4IDIxOS4zODJMMjM1Ljk0MiAyMTUuMTY2QzIyMi44NDYgMTk5Ljg5NiA0MC44NSAwIDQwLjA0NCAwQzM5Ljg3MTkgMCA0NC4xODEzIDUuNDAxNzggNDkuNjIwMiAxMi4wMDMxWk0xMzUuNDEyIDQwOS4xOEMxMzguMzczIDQwMy45MzcgMTM2LjggMzk3LjE5NSAxMzEuODQ3IDM5My45MDJDMTI3LjE2NyAzOTAuNzkgMTE5Ljg5NyAzOTIuMjU2IDExOS44OTcgMzk2LjMxMUMxMTkuODk3IDM5Ny41NDggMTIwLjU4MiAzOTguNDQ5IDEyMi4xMjQgMzk5LjI0M0MxMjQuNzIgNDAwLjU3OSAxMjQuOTA5IDQwMi4wODEgMTIyLjg2NiA0MDUuMTUyQzEyMC43OTcgNDA4LjI2MiAxMjAuOTY0IDQxMC45OTYgMTIzLjMzNyA0MTIuODU0QzEyNy4xNjIgNDE1Ljg0OSAxMzIuNTc2IDQxNC4yMDIgMTM1LjQxMiA0MDkuMThaIiBmaWxsPSIjRkYwMDdBIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjQ4LjU1MiAyNjIuMjQ0QzI0MS44NjIgMjY0LjI5OSAyMzUuMzU4IDI3MS4zOSAyMzMuMzQ0IDI3OC44MjZDMjMyLjExNiAyODMuMzYyIDIzMi44MTMgMjkxLjMxOSAyMzQuNjUzIDI5My43NzZDMjM3LjYyNSAyOTcuNzQ1IDI0MC40OTkgMjk4Ljc5MSAyNDguMjgyIDI5OC43MzZDMjYzLjUxOCAyOTguNjMgMjc2Ljc2NCAyOTIuMDk1IDI3OC4zMDQgMjgzLjkyNUMyNzkuNTY3IDI3Ny4yMjkgMjczLjc0OSAyNjcuOTQ4IDI2NS43MzYgMjYzLjg3NEMyNjEuNjAxIDI2MS43NzIgMjUyLjgwNyAyNjAuOTM4IDI0OC41NTIgMjYyLjI0NFpNMjY2LjM2NCAyNzYuMTcyQzI2OC43MTQgMjcyLjgzNCAyNjcuNjg2IDI2OS4yMjUgMjYzLjY5IDI2Ni43ODVDMjU2LjA4IDI2Mi4xMzggMjQ0LjU3MSAyNjUuOTgzIDI0NC41NzEgMjczLjE3M0MyNDQuNTcxIDI3Ni43NTIgMjUwLjU3MiAyODAuNjU2IDI1Ni4wNzQgMjgwLjY1NkMyNTkuNzM1IDI4MC42NTYgMjY0Ljc0NiAyNzguNDczIDI2Ni4zNjQgMjc2LjE3MloiIGZpbGw9IiNGRjAwN0EiLz4KPC9zdmc+Cg==",protocol:"uniswap_v2",slippage:!0,blockchains:["ethereum"],ethereum:{router:{address:"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",api:kx.ROUTER},factory:{address:"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",api:kx.FACTORY},pair:{api:kx.PAIR}}};var ZS=t=>new bx(Object.assign(qS,{scope:t,findPath:t=>kx.findPath({...t,exchange:qS}),pathExists:t=>kx.pathExists({...t,exchange:qS}),getAmounts:t=>kx.getAmounts({...t,exchange:qS}),getPrep:t=>kx.getPrep({...t,exchange:qS}),getTransaction:t=>kx.getTransaction({...t,exchange:qS})}));function JS(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}const XS="0x0000000000000000000000000000000000000001",KS="0x0000000000000000000000000000000000000002",$S=({blockchain:t,exchange:e,path:n})=>{if(!n)return;let r=n.map(((e,r)=>e===Vp[t].currency.address&&n[r+1]!=Vp[t].wrapped.address&&n[r-1]!=Vp[t].wrapped.address?Vp[t].wrapped.address:e));return r[0]==Vp[t].currency.address&&r[1]==Vp[t].wrapped.address?r.splice(0,1):r[r.length-1]==Vp[t].currency.address&&r[r.length-2]==Vp[t].wrapped.address&&r.splice(r.length-1,1),r},tj=async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,block:o})=>{if((n=$S({blockchain:t,exchange:e,path:n})).length>2)throw"Uniswap V3 can only check paths for up to 2 tokens!";try{let o=(await Promise.all(e.fees.map((r=>_E({blockchain:Vp[t].name,address:e[t].factory.address,method:"getPool",api:e[t].factory.api,cache:3600,params:[n[0],n[1],r]}).then((e=>({blockchain:t,address:e,path:n,fee:r,token0:[...n].sort()[0],token1:[...n].sort()[1]}))).catch((()=>{})))))).filter(Boolean);return o=o.filter((e=>e.address!=Vp[t].zero)),o=(await Promise.all(o.map((async t=>{try{let n;return n=r?await(async({exchange:t,pool:e,inputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactInput",params:{path:oE(["address","uint24","address"],[e.path[0],e.fee,e.path[1]]),amountIn:n},cache:5})).amountOut)({exchange:e,pool:t,inputAmount:r}):await(async({exchange:t,pool:e,outputAmount:n})=>(await _E({blockchain:e.blockchain,address:t[e.blockchain].quoter.address,api:t[e.blockchain].quoter.api,method:"quoteExactOutput",params:{path:oE(["address","uint24","address"],[e.path[1],e.fee,e.path[0]]),amountOut:n},cache:5})).amountIn)({exchange:e,pool:t,outputAmount:i}),{...t,amountIn:r||n,amountOut:i||n}}catch(t){}})))).filter(Boolean),r?o.sort(((t,e)=>e.amountOut.gt(t.amountOut)?1:-1))[0]:o.sort(((t,e)=>e.amountIn.lt(t.amountIn)?1:-1))[0]}catch(t){return}};let ej=({blockchain:t,exchange:e,path:n,pools:r,amountIn:i})=>r[r.length-1].amountOut,nj=async({blockchain:t,exchange:e,path:n,pools:r,amountOut:i,block:o})=>{if(void 0===o)return r[0].amountIn;{let n;2==r.length?n=oE(["address","uint24","address","uint24","address"],[r[1].path[1],r[1].fee,r[0].path[1],r[0].fee,r[0].path[0]]):1==r.length&&(n=oE(["address","uint24","address"],[r[0].path[1],r[0].fee,r[0].path[0]]));return(await _E({block:o,blockchain:t,address:e[t].quoter.address,api:e[t].quoter.api,method:"quoteExactOutput",params:{path:n,amountOut:i}})).amountIn}};var rj={findPath:async({blockchain:t,exchange:e,tokenIn:n,tokenOut:r,amountIn:i,amountOut:o,amountInMax:a,amountOutMin:s})=>{if([n,r].includes(Vp[t].currency.address)&&[n,r].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let u,c=[];if(c=[await tj({exchange:e,blockchain:t,path:[n,r],amountIn:i||a,amountOut:o||s})],c.filter(Boolean).length&&(u=[n,r]),u||n==Vp[t].wrapped.address||r==Vp[t].wrapped.address||(c=[],o||s?(c.push(await tj({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await tj({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountOut:c[0].amountIn}))):(c.push(await tj({exchange:e,blockchain:t,path:[n,Vp[t].wrapped.address],amountIn:i||a})),c.filter(Boolean).length&&c.push(await tj({exchange:e,blockchain:t,path:[Vp[t].wrapped.address,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length&&(u=[n,Vp[t].wrapped.address,r])),!u){c=[];let l=(await Promise.all(Vp[t].stables.usd.map((async u=>{let c=[];if(o||s?(c.push(await tj({exchange:e,blockchain:t,path:[u,r],amountOut:o||s})),c.filter(Boolean).length&&c.unshift(await tj({exchange:e,blockchain:t,path:[n,u],amountOut:c[0].amountIn}))):(c.push(await tj({exchange:e,blockchain:t,path:[n,u],amountIn:i||a})),c.filter(Boolean).length&&c.push(await tj({exchange:e,blockchain:t,path:[u,r],amountIn:c[0].amountOut}))),2===c.filter(Boolean).length)return[u,c]})))).filter(Boolean)[0];l&&(u=[n,l[0],r],c=l[1])}return JS([u,"optionalAccess",t=>t.length])&&u[0]==Vp[t].currency.address?u.splice(1,0,Vp[t].wrapped.address):JS([u,"optionalAccess",t=>t.length])&&u[u.length-1]==Vp[t].currency.address&&u.splice(u.length-1,0,Vp[t].wrapped.address),u||(c=[]),{path:u,pools:c,exchangePath:$S({blockchain:t,exchange:e,path:u})}},pathExists:async({blockchain:t,exchange:e,path:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>{try{return!!await tj({blockchain:t,exchange:e,path:n,amountIn:r||o,amountOut:i||a})}catch(t){return!1}},getAmounts:async({blockchain:t,exchange:e,path:n,pools:r,block:i,tokenIn:o,tokenOut:a,amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l})=>{if(s){if(null==(u=await nj({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:s,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(u){if(null==(s=await ej({blockchain:t,exchange:e,path:n,pools:r,amountIn:u,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}else if(l){if(null==(u=await nj({blockchain:t,exchange:e,block:i,path:n,pools:r,amountOut:l,tokenIn:o,tokenOut:a}))||c&&u.gt(c))return{};void 0===c&&(c=u)}else if(c){if(null==(s=await ej({blockchain:t,exchange:e,path:n,pools:r,amountIn:c,tokenIn:o,tokenOut:a}))||l&&s.lt(l))return{};void 0===l&&(l=s)}return{amountOut:s,amountIn:u,amountInMax:c,amountOutMin:l}},getPrep:async({exchange:t,blockchain:e,tokenIn:n,amountIn:r,account:i})=>{if(n===Vp[e].currency.address)return;if((await _E({blockchain:e,address:n,method:"allowance",api:Tk[e][20],params:[i,t[e].permit.address]})).lt(r)){return{transaction:{blockchain:e,from:i,to:n,api:Tk[e][20],method:"approve",params:[t[e].permit.address,Vp[e].maxInt]}}}{const o=await _E({blockchain:e,address:t[e].permit.address,method:"allowance",api:t[e].permit.api,params:[i,n,t[e].router.address]});if(o.amount.lt(r)||o.expiration-1800{let m,y=[],g=[],v="0";if(p){const t=Lf(p.signature).length;let e;65!==t&&64!==t||(e=function(t){return Df(xf([(t=Rf(t)).r,t.s,t.recoveryParam?"0x1c":"0x1b"]))}(Rf(p.signature))),y.push("0a"),g.push(Py.encode(["((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)","bytes"],[p,e]))}r[0]===Vp[t].currency.address&&(y.push("0b"),g.push(Py.encode(["address","uint256"],[KS,(i||o).toString()])),v=(i||o).toString()),1===n.length?m=oE(["address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1]]):2===n.length&&(m=oE(["address","uint24","address","uint24","address"],[n[0].path[0],n[0].fee,n[0].path[1],n[1].fee,n[1].path[1]])),h||u?(y.push("00"),g.push(Py.encode(["address","uint256","uint256","bytes","bool"],[r[r.length-1]===Vp[t].currency.address?KS:XS,(i||o).toString(),(a||s).toString(),m,r[0]!==Vp[t].currency.address&&!f]))):(y.push("01"),g.push(Py.encode(["address","uint256","uint256","bytes","bool"],[r[r.length-1]===Vp[t].currency.address?KS:XS,(a||s).toString(),(i||o).toString(),m,r[0]!==Vp[t].currency.address&&!f]))),r[r.length-1]===Vp[t].currency.address&&(y.push("0c"),g.push(Py.encode(["address","uint256"],[XS,(a||s).toString()])));return{blockchain:t,from:d,to:e[t].router.address,api:e[t].router.api,method:"execute",params:{commands:`0x${y.join("")}`,inputs:g},value:v}},ROUTER:[{inputs:[{components:[{internalType:"address",name:"permit2",type:"address"},{internalType:"address",name:"weth9",type:"address"},{internalType:"address",name:"seaportV1_5",type:"address"},{internalType:"address",name:"seaportV1_4",type:"address"},{internalType:"address",name:"openseaConduit",type:"address"},{internalType:"address",name:"nftxZap",type:"address"},{internalType:"address",name:"x2y2",type:"address"},{internalType:"address",name:"foundation",type:"address"},{internalType:"address",name:"sudoswap",type:"address"},{internalType:"address",name:"elementMarket",type:"address"},{internalType:"address",name:"nft20Zap",type:"address"},{internalType:"address",name:"cryptopunks",type:"address"},{internalType:"address",name:"looksRareV2",type:"address"},{internalType:"address",name:"routerRewardsDistributor",type:"address"},{internalType:"address",name:"looksRareRewardsDistributor",type:"address"},{internalType:"address",name:"looksRareToken",type:"address"},{internalType:"address",name:"v2Factory",type:"address"},{internalType:"address",name:"v3Factory",type:"address"},{internalType:"bytes32",name:"pairInitCodeHash",type:"bytes32"},{internalType:"bytes32",name:"poolInitCodeHash",type:"bytes32"}],internalType:"struct RouterParameters",name:"params",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"BalanceTooLow",type:"error"},{inputs:[],name:"BuyPunkFailed",type:"error"},{inputs:[],name:"ContractLocked",type:"error"},{inputs:[],name:"ETHNotAccepted",type:"error"},{inputs:[{internalType:"uint256",name:"commandIndex",type:"uint256"},{internalType:"bytes",name:"message",type:"bytes"}],name:"ExecutionFailed",type:"error"},{inputs:[],name:"FromAddressIsNotOwner",type:"error"},{inputs:[],name:"InsufficientETH",type:"error"},{inputs:[],name:"InsufficientToken",type:"error"},{inputs:[],name:"InvalidBips",type:"error"},{inputs:[{internalType:"uint256",name:"commandType",type:"uint256"}],name:"InvalidCommandType",type:"error"},{inputs:[],name:"InvalidOwnerERC1155",type:"error"},{inputs:[],name:"InvalidOwnerERC721",type:"error"},{inputs:[],name:"InvalidPath",type:"error"},{inputs:[],name:"InvalidReserves",type:"error"},{inputs:[],name:"InvalidSpender",type:"error"},{inputs:[],name:"LengthMismatch",type:"error"},{inputs:[],name:"SliceOutOfBounds",type:"error"},{inputs:[],name:"TransactionDeadlinePassed",type:"error"},{inputs:[],name:"UnableToClaim",type:"error"},{inputs:[],name:"UnsafeCast",type:"error"},{inputs:[],name:"V2InvalidPath",type:"error"},{inputs:[],name:"V2TooLittleReceived",type:"error"},{inputs:[],name:"V2TooMuchRequested",type:"error"},{inputs:[],name:"V3InvalidAmountOut",type:"error"},{inputs:[],name:"V3InvalidCaller",type:"error"},{inputs:[],name:"V3InvalidSwap",type:"error"},{inputs:[],name:"V3TooLittleReceived",type:"error"},{inputs:[],name:"V3TooMuchRequested",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsSent",type:"event"},{inputs:[{internalType:"bytes",name:"looksRareClaim",type:"bytes"}],name:"collectRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"commands",type:"bytes"},{internalType:"bytes[]",name:"inputs",type:"bytes[]"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes",name:"commands",type:"bytes"},{internalType:"bytes[]",name:"inputs",type:"bytes[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"execute",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155BatchReceived",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC721Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"uniswapV3SwapCallback",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],FACTORY:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!0,internalType:"int24",name:"tickSpacing",type:"int24"}],name:"FeeAmountEnabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token0",type:"address"},{indexed:!0,internalType:"address",name:"token1",type:"address"},{indexed:!0,internalType:"uint24",name:"fee",type:"uint24"},{indexed:!1,internalType:"int24",name:"tickSpacing",type:"int24"},{indexed:!1,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"address",name:"tokenA",type:"address"},{internalType:"address",name:"tokenB",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"}],name:"createPool",outputs:[{internalType:"address",name:"pool",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],name:"enableFeeAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint24",name:"",type:"uint24"}],name:"feeAmountTickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint24",name:"",type:"uint24"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"parameters",outputs:[{internalType:"address",name:"factory",type:"address"},{internalType:"address",name:"token0",type:"address"},{internalType:"address",name:"token1",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"int24",name:"tickSpacing",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_owner",type:"address"}],name:"setOwner",outputs:[],stateMutability:"nonpayable",type:"function"}],POOL:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"feeProtocol0Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol0New",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1New",type:"uint8"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Swap",type:"event"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8",name:"feeProtocol0",type:"uint8"},{internalType:"uint8",name:"feeProtocol1",type:"uint8"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint8",name:"feeProtocol",type:"uint8"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int16",name:"",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],QUOTER:[{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"quoteExactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactInputSingleParams",name:"params",type:"tuple"}],name:"quoteExactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"quoteExactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactOutputSingleParams",name:"params",type:"tuple"}],name:"quoteExactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"path",type:"bytes"}],name:"uniswapV3SwapCallback",outputs:[],stateMutability:"view",type:"function"}],PERMIT2:[{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"}],name:"AllowanceExpired",type:"error"},{inputs:[],name:"ExcessiveInvalidation",type:"error"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"InsufficientAllowance",type:"error"},{inputs:[{internalType:"uint256",name:"maxAmount",type:"uint256"}],name:"InvalidAmount",type:"error"},{inputs:[],name:"InvalidContractSignature",type:"error"},{inputs:[],name:"InvalidNonce",type:"error"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"InvalidSignatureLength",type:"error"},{inputs:[],name:"InvalidSigner",type:"error"},{inputs:[],name:"LengthMismatch",type:"error"},{inputs:[{internalType:"uint256",name:"signatureDeadline",type:"uint256"}],name:"SignatureExpired",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint160",name:"amount",type:"uint160"},{indexed:!1,internalType:"uint48",name:"expiration",type:"uint48"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"address",name:"spender",type:"address"}],name:"Lockdown",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint48",name:"newNonce",type:"uint48"},{indexed:!1,internalType:"uint48",name:"oldNonce",type:"uint48"}],name:"NonceInvalidation",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint160",name:"amount",type:"uint160"},{indexed:!1,internalType:"uint48",name:"expiration",type:"uint48"},{indexed:!1,internalType:"uint48",name:"nonce",type:"uint48"}],name:"Permit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"uint256",name:"word",type:"uint256"},{indexed:!1,internalType:"uint256",name:"mask",type:"uint256"}],name:"UnorderedNonceInvalidation",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"}],name:"approve",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint48",name:"newNonce",type:"uint48"}],name:"invalidateNonces",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"wordPos",type:"uint256"},{internalType:"uint256",name:"mask",type:"uint256"}],name:"invalidateUnorderedNonces",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"spender",type:"address"}],internalType:"struct IAllowanceTransfer.TokenSpenderPair[]",name:"approvals",type:"tuple[]"}],name:"lockdown",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"}],name:"nonceBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],internalType:"struct IAllowanceTransfer.PermitDetails[]",name:"details",type:"tuple[]"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"sigDeadline",type:"uint256"}],internalType:"struct IAllowanceTransfer.PermitBatch",name:"permitBatch",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],internalType:"struct IAllowanceTransfer.PermitDetails",name:"details",type:"tuple"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"sigDeadline",type:"uint256"}],internalType:"struct IAllowanceTransfer.PermitSingle",name:"permitSingle",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions",name:"permitted",type:"tuple"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails",name:"transferDetails",type:"tuple"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions[]",name:"permitted",type:"tuple[]"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitBatchTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails[]",name:"transferDetails",type:"tuple[]"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions",name:"permitted",type:"tuple"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails",name:"transferDetails",type:"tuple"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"witness",type:"bytes32"},{internalType:"string",name:"witnessTypeString",type:"string"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitWitnessTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct ISignatureTransfer.TokenPermissions[]",name:"permitted",type:"tuple[]"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct ISignatureTransfer.PermitBatchTransferFrom",name:"permit",type:"tuple"},{components:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"requestedAmount",type:"uint256"}],internalType:"struct ISignatureTransfer.SignatureTransferDetails[]",name:"transferDetails",type:"tuple[]"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"witness",type:"bytes32"},{internalType:"string",name:"witnessTypeString",type:"string"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"permitWitnessTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"address",name:"token",type:"address"}],internalType:"struct IAllowanceTransfer.AllowanceTransferDetails[]",name:"transferDetails",type:"tuple[]"}],name:"transferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"address",name:"token",type:"address"}],name:"transferFrom",outputs:[],stateMutability:"nonpayable",type:"function"}]};const ij={name:"uniswap_v3",label:"Uniswap v3",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIGRhdGEtdGVzdGlkPSJ1bmlzd2FwLWxvZ28iIGNsYXNzPSJyZ3c2ZXo0NHAgcmd3NmV6NGVqIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMzUyNiAxOS45MjQyQzIwLjI5MjggMjAuMTU0OSAyMC4xODg1IDIwLjM3MTUgMjAuMDQ1NSAyMC41NjE4QzE5Ljc3OTMgMjAuOTA4OCAxOS40MjcgMjEuMTc5NCAxOS4wMjM5IDIxLjM0NjZDMTguNjYxNCAyMS41MDM1IDE4LjI3NzQgMjEuNjA1IDE3Ljg4NDkgMjEuNjQ3NUMxNy44MDQyIDIxLjY1NzggMTcuNzIwNiAyMS42NjQxIDE3LjYzOTUgMjEuNjcwM0wxNy42MjYzIDIxLjY3MTNDMTcuMzc3NyAyMS42ODA4IDE3LjEzODcgMjEuNzcgMTYuOTQ0MiAyMS45MjU4QzE2Ljc0OTcgMjIuMDgxNyAxNi42MSAyMi4yOTYgMTYuNTQ1NSAyMi41MzczQzE2LjUxNiAyMi42NTc0IDE2LjQ5NCAyMi43NzkyIDE2LjQ3OTggMjIuOTAyMUMxNi40NTcyIDIzLjA4NzQgMTYuNDQ1NiAyMy4yNzcxIDE2LjQzMyAyMy40ODIzQzE2LjQyNCAyMy42Mjk1IDE2LjQxNDQgMjMuNzg0OCAxNi40IDIzLjk1MjFDMTYuMzE1NiAyNC42MzM3IDE2LjExOTMgMjUuMjk2NSAxNS44MTkyIDI1LjkxMzZDMTUuNzU3OSAyNi4wNDMzIDE1LjY5NTQgMjYuMTY5MSAxNS42MzM5IDI2LjI5MjZDMTUuMzA0OSAyNi45NTQ2IDE1LjAwNzYgMjcuNTUyNiAxNS4wOTI5IDI4LjM1MzVDMTUuMTU5NyAyOC45NzA2IDE1LjQ3NDQgMjkuMzg0MSAxNS44OTI1IDI5LjgxMDZDMTYuMDkxMSAzMC4wMTQ2IDE2LjM1NDQgMzAuMTg4OSAxNi42Mjc3IDMwLjM2OTlDMTcuMzkyNyAzMC44NzYzIDE4LjIzNjEgMzEuNDM0NyAxNy45NTgyIDMyLjg0MTVDMTcuNzMwOCAzMy45ODE0IDE1Ljg0OTQgMzUuMTc3NiAxMy4yMDUgMzUuNTk1NEMxMy40NjE1IDM1LjU1NjMgMTIuODk2NSAzNC41ODc5IDEyLjgzMzggMzQuNDgwNEwxMi44MyAzNC40NzM5QzEyLjc1NzEgMzQuMzU5MiAxMi42ODI0IDM0LjI0NjIgMTIuNjA3OSAzNC4xMzM0TDEyLjYwNzkgMzQuMTMzNEwxMi42MDc4IDM0LjEzMzRDMTIuMzkyNiAzMy44MDc2IDEyLjE3ODMgMzMuNDgzNSAxMi4wMTExIDMzLjEyNDFDMTEuNTY5MyAzMi4xODU2IDExLjM2NDUgMzEuMDk5OCAxMS41NDU1IDMwLjA3MTRDMTEuNzA5NSAyOS4xNDA3IDEyLjMyMjEgMjguMzk3MiAxMi45MTE4IDI3LjY4MTNMMTIuOTExOCAyNy42ODEzQzEzLjAwOCAyNy41NjQ2IDEzLjEwMzUgMjcuNDQ4NyAxMy4xOTY0IDI3LjMzMjhDMTMuOTg1MiAyNi4zNDg4IDE0LjgxMjggMjUuMDU5NSAxNC45OTU5IDIzLjc4MjJDMTUuMDExNCAyMy42NzEyIDE1LjAyNTIgMjMuNTUwMiAxNS4wMzk3IDIzLjQyMjlMMTUuMDM5NyAyMy40MjI5TDE1LjAzOTcgMjMuNDIyOUMxNS4wNjU3IDIzLjE5NSAxNS4wOTM5IDIyLjk0NjkgMTUuMTM4MiAyMi42OTk3QzE1LjIwMzkgMjIuMjcyOCAxNS4zMzcxIDIxLjg1OTEgMTUuNTMyNiAyMS40NzQzQzE1LjY2NiAyMS4yMjIgMTUuODQxNyAyMC45OTQ2IDE2LjA1MiAyMC44MDIxQzE2LjE2MTYgMjAuNjk5OSAxNi4yMzM5IDIwLjU2MzcgMTYuMjU3NCAyMC40MTUzQzE2LjI4MDggMjAuMjY3IDE2LjI1NCAyMC4xMTUgMTYuMTgxMyAxOS45ODM3TDExLjk2NTggMTIuMzY3M0wxOC4wMjA3IDE5Ljg3MzNDMTguMDg5NyAxOS45NjAzIDE4LjE3NjggMjAuMDMxIDE4LjI3NiAyMC4wODAzQzE4LjM3NTIgMjAuMTI5NiAxOC40ODQgMjAuMTU2NCAxOC41OTQ2IDIwLjE1ODhDMTguNzA1MyAyMC4xNjEyIDE4LjgxNTEgMjAuMTM5MSAxOC45MTYzIDIwLjA5NEMxOS4wMTc1IDIwLjA0OSAxOS4xMDc2IDE5Ljk4MjEgMTkuMTgwMiAxOS44OTgyQzE5LjI1NjkgMTkuODA4NCAxOS4zMDA0IDE5LjY5NDcgMTkuMzAzMyAxOS41NzYzQzE5LjMwNjMgMTkuNDU4IDE5LjI2ODUgMTkuMzQyMyAxOS4xOTYzIDE5LjI0ODdDMTguOTE0OCAxOC44ODczIDE4LjYyMTggMTguNTIxIDE4LjMzMDIgMTguMTU2M0wxOC4zMyAxOC4xNTZDMTguMjEyIDE4LjAwODUgMTguMDk0MyAxNy44NjEzIDE3Ljk3NzYgMTcuNzE0OEwxNi40NTM5IDE1LjgyMDVMMTMuMzk1NyAxMi4wMzgyTDEwIDhMMTMuNzg4IDExLjY5OTRMMTcuMDQzMyAxNS4zMTQ5TDE4LjY2NzMgMTcuMTI3QzE4LjgxNjUgMTcuMjk1OCAxOC45NjU3IDE3LjQ2MzEgMTkuMTE0OCAxNy42MzAzQzE5LjUwNDQgMTguMDY3MSAxOS44OTQgMTguNTAzOSAyMC4yODM2IDE4Ljk2NzNMMjAuMzcyIDE5LjA3NTVMMjAuMzkxNCAxOS4yNDMzQzIwLjQxNzYgMTkuNDcwOCAyMC40MDQ1IDE5LjcwMTIgMjAuMzUyNiAxOS45MjQyWk0zNS45MjQ3IDIyLjQ2OTdMMzUuOTMxMSAyMi40Nzk1QzM1LjkzIDIxLjY3MTkgMzUuNDMyMiAyMC4zMzk0IDM0LjQyNDcgMTkuMDU3N0wzNC40MDEgMTkuMDI2M0MzNC4wOTA2IDE4LjY0MSAzMy43NTI0IDE4LjI3OTIgMzMuMzg5MSAxNy45NDM4QzMzLjMyMTIgMTcuODc3OCAzMy4yNDggMTcuODEyOCAzMy4xNzM2IDE3Ljc0NzlDMzIuNzA4MSAxNy4zNDAxIDMyLjE5OTMgMTYuOTg1IDMxLjY1NjQgMTYuNjg5MkwzMS42MTc2IDE2LjY2OTdDMjkuOTExOCAxNS43MzY2IDI3LjY5MiAxNS4yNTYgMjQuOTU0OSAxNS43OTcyQzI0LjU4NzMgMTUuMzQ4OSAyNC4xOTE0IDE0LjkyNDggMjMuNzY5NiAxNC41Mjc1QzIzLjEyMzYgMTMuOTA5MSAyMi4zNjMyIDEzLjQyNDEgMjEuNTMxNSAxMy4wOTk3QzIwLjcwNzIgMTIuNzk2NiAxOS44MjQ0IDEyLjY4ODQgMTguOTUxNyAxMi43ODM2QzE5Ljc5MjkgMTIuODU5NyAyMC42MTIzIDEzLjA5NDcgMjEuMzY2NiAxMy40NzY0QzIyLjA5NTEgMTMuODY4NSAyMi43NTEyIDE0LjM4MzMgMjMuMzA2MiAxNC45OTg0QzIzLjg2ODggMTUuNjI2MyAyNC4zOTc2IDE2LjI4MzkgMjQuODkwMyAxNi45Njg1TDI1LjAxMzkgMTcuMTMwMkMyNS40OTYgMTcuNzYwOSAyNS45ODY4IDE4LjQwMyAyNi41OTgyIDE4Ljk3NDRDMjYuOTM0OCAxOS4yOTI1IDI3LjMxMDMgMTkuNTY2NCAyNy43MTU3IDE5Ljc4OTVDMjcuODIzNCAxOS44NDQ3IDI3LjkzMjMgMTkuODk2NiAyOC4wMzkgMTkuOTQyMUMyOC4xNDU2IDE5Ljk4NzYgMjguMjQ1OCAyMC4wMjk4IDI4LjM1MzYgMjAuMDY4OEMyOC41NjE2IDIwLjE0OTkgMjguNzc3MSAyMC4yMTcxIDI4Ljk5MjYgMjAuMjc4OEMyOS44NTQ3IDIwLjUyNTYgMzAuNzM3MiAyMC42MTQzIDMxLjU5OTMgMjAuNjYyQzMxLjcxOTIgMjAuNjY4MyAzMS44Mzg5IDIwLjY3NDIgMzEuOTU4MSAyMC42ODAxTDMxLjk1ODMgMjAuNjgwMUMzMi4yNjYyIDIwLjY5NTQgMzIuNTcxMyAyMC43MTA1IDMyLjg3MTkgMjAuNzMyM0MzMy4yODM3IDIwLjc1NjkgMzMuNjkyMiAyMC44MjE0IDM0LjA5MTcgMjAuOTI1QzM0LjY5MTggMjEuMDgyMiAzNS4yMjAxIDIxLjQ0MTMgMzUuNTg4NSAyMS45NDI1QzM1LjcxMzcgMjIuMTA5NSAzNS44MjYxIDIyLjI4NTcgMzUuOTI0NyAyMi40Njk3Wk0zMy40MDEzIDE3Ljk0NTFDMzMuMzU4IDE3LjkwNDkgMzMuMzEzOSAxNy44NjUxIDMzLjI3IDE3LjgyNTRMMzMuMjcgMTcuODI1NEMzMy4yNDE4IDE3Ljc5OTkgMzMuMjEzNiAxNy43NzQ1IDMzLjE4NTggMTcuNzQ5MUMzMy4yMDczIDE3Ljc2ODggMzMuMjI4OCAxNy43ODg3IDMzLjI1MDMgMTcuODA4N0MzMy4zMDA5IDE3Ljg1NTYgMzMuMzUxNCAxNy45MDI1IDMzLjQwMTMgMTcuOTQ1MVpNMzIuMzIzOCAyNS45MTcyQzI5LjU1MTYgMjQuNzg3MiAyNi42NTE4IDIzLjYwNTEgMjcuMDgzNSAyMC4yODc1QzI4LjAwOTEgMjEuMjgwMiAyOS40NjIgMjEuNDg4NCAzMS4wNDIyIDIxLjcxNDlDMzIuNDc1NyAyMS45MjAzIDM0LjAxMzkgMjIuMTQwNyAzNS4zNTgzIDIyLjk3NTNDMzguNTMwNiAyNC45NDMzIDM4LjA2NzMgMjguNzY2NiAzNi45ODk3IDMwLjE3MzlDMzcuMDg2OSAyNy44NTg3IDM0Ljc1NDQgMjYuOTA4IDMyLjMyMzggMjUuOTE3MlpNMjEuMTU1MSAyNC4yNTY3QzIxLjg4NjggMjQuMTg2MyAyMy40NDYxIDIzLjgwNDIgMjIuNzQ4OSAyMi41NzEyQzIyLjU5ODkgMjIuMzIwNCAyMi4zODE1IDIyLjExNzIgMjIuMTIxNyAyMS45ODQ4QzIxLjg2MTkgMjEuODUyNSAyMS41NzAyIDIxLjc5NjUgMjEuMjgwMSAyMS44MjMyQzIwLjk4NTggMjEuODU1IDIwLjcwODIgMjEuOTc2OSAyMC40ODUyIDIyLjE3MjVDMjAuMjYyMiAyMi4zNjgxIDIwLjEwNDQgMjIuNjI3OCAyMC4wMzM0IDIyLjkxNjVDMTkuODE2OCAyMy43MjMgMjAuMDQ2MyAyNC4zNjQ5IDIxLjE1NTEgMjQuMjU2N1pNMjAuOTQ0OCAxNC41MDE0QzIwLjQ4NTggMTMuOTY4OCAxOS43NzM1IDEzLjY4OTUgMTkuMDc1MiAxMy41ODc4QzE5LjA0OTEgMTMuNzYyNSAxOS4wMzI2IDEzLjkzODUgMTkuMDI1NyAxNC4xMTVDMTguOTk0NCAxNS41Njg3IDE5LjUwODQgMTcuMTY1NCAyMC41MDMgMTguMjc1QzIwLjgyMTIgMTguNjMzNyAyMS4yMDQ5IDE4LjkyNzYgMjEuNjMzNCAxOS4xNDFDMjEuODgxMiAxOS4yNjIyIDIyLjUzODYgMTkuNTYzMSAyMi43ODIxIDE5LjI5MjVDMjIuODAwNiAxOS4yNjc3IDIyLjgxMjMgMTkuMjM4NCAyMi44MTU5IDE5LjIwNzZDMjIuODE5NSAxOS4xNzY4IDIyLjgxNDkgMTkuMTQ1NiAyMi44MDI2IDE5LjExNzJDMjIuNzYyMiAxOS4wMDEzIDIyLjY4NDMgMTguODk2MSAyMi42MDY5IDE4Ljc5MTdDMjIuNTUyIDE4LjcxNzcgMjIuNDk3NCAxOC42NDQxIDIyLjQ1NjcgMTguNTY3MkMyMi40MTU1IDE4LjQ4OTggMjIuMzcxNCAxOC40MTQyIDIyLjMyNzQgMTguMzM4OEwyMi4zMjc0IDE4LjMzODhDMjIuMjQ0NyAxOC4xOTcgMjIuMTYyMiAxOC4wNTU1IDIyLjA5ODkgMTcuOTAxNUMyMS45MzE5IDE3LjQ5ODQgMjEuODQ1IDE3LjA2OTggMjEuNzU4MyAxNi42NDI1TDIxLjc1ODMgMTYuNjQyNEwyMS43NTgzIDE2LjY0MjRMMjEuNzU4MyAxNi42NDIzTDIxLjc1ODIgMTYuNjQyMkwyMS43NTgyIDE2LjY0MjFMMjEuNzU4MiAxNi42NDJDMjEuNzQwOSAxNi41NTY2IDIxLjcyMzYgMTYuNDcxMiAyMS43MDU2IDE2LjM4NkMyMS41NzMxIDE1LjcyNjggMjEuNDAzOSAxNS4wMzQgMjAuOTQ0OCAxNC41MDE0Wk0zMC43NTI0IDI2LjA5OEMzMC4wNDAzIDI4LjA5NDMgMzEuMTg4OCAyOS43ODA0IDMyLjMzMDYgMzEuNDU2NkMzMy42MDc3IDMzLjMzMTUgMzQuODc2NCAzNS4xOTQgMzMuNTIyOCAzNy40NjQyQzM2LjE1MzIgMzYuMzczMSAzNy40MDIxIDMzLjA3NjkgMzYuMzEwNSAzMC40NjE2QzM1LjYyMjcgMjguODA3NCAzMy45NjQ5IDI3LjkxMDYgMzIuNDI2MSAyNy4wNzgzTDMyLjQyNjEgMjcuMDc4M0wzMi40MjYgMjcuMDc4MkMzMS44MjkgMjYuNzU1MyAzMS4yNDk5IDI2LjQ0MjEgMzAuNzUyNCAyNi4wOThaTTIzLjA1NTIgMzAuODYzM0MyMi41Nzg1IDMxLjA1ODcgMjIuMTI5IDMxLjMxNTIgMjEuNzE3OSAzMS42MjY1QzIyLjY1MjcgMzEuMjg1OSAyMy42MzM5IDMxLjA5MTQgMjQuNjI3NCAzMS4wNDk1QzI0LjgwNzQgMzEuMDM4OCAyNC45ODg3IDMxLjAzMDQgMjUuMTcxNSAzMS4wMjE5TDI1LjE3MTcgMzEuMDIxOUwyNS4xNzIgMzEuMDIxOUMyNS40ODc4IDMxLjAwNzMgMjUuODA4NSAzMC45OTI1IDI2LjEzNiAzMC45NjUxQzI2LjY3MjkgMzAuOTI4NSAyNy4yMDI1IDMwLjgxOTIgMjcuNzEwMyAzMC42NDAzQzI4LjI0MjUgMzAuNDUzMyAyOC43MjY4IDMwLjE1MDEgMjkuMTI4NCAyOS43NTI3QzI5LjUzNDIgMjkuMzQyNCAyOS44MTg4IDI4LjgyNzIgMjkuOTUwNiAyOC4yNjQyQzMwLjA2NjYgMjcuNzMyNCAzMC4wNTAzIDI3LjE4MDEgMjkuOTAzMiAyNi42NTYyQzI5Ljc1NiAyNi4xMzIyIDI5LjQ4MjUgMjUuNjUyOCAyOS4xMDY5IDI1LjI2MDNDMjkuMjg4MSAyNS43MjIxIDI5LjM5OTYgMjYuMjA4NCAyOS40Mzc3IDI2LjcwMzNDMjkuNDcwNSAyNy4xNjQgMjkuNDA4MSAyNy42MjY1IDI5LjI1NDUgMjguMDYxOEMyOS4xMDQ1IDI4LjQ3NDQgMjguODU5MyAyOC44NDU0IDI4LjUzOSAyOS4xNDQzQzI4LjIwODEgMjkuNDQ2MiAyNy44MjUgMjkuNjg0NiAyNy40MDg2IDI5Ljg0NzlDMjYuODI5OSAzMC4wODIxIDI2LjE3NTUgMzAuMTc3OSAyNS40OTM5IDMwLjI3NzdDMjUuMTgzIDMwLjMyMzIgMjQuODY2NCAzMC4zNjk2IDI0LjU0ODcgMzAuNDMwM0MyNC4wMzc4IDMwLjUyNDMgMjMuNTM3NCAzMC42Njk0IDIzLjA1NTIgMzAuODYzM1pNMzEuMzE4NyAzOS4xMDQ2TDMxLjI3MyAzOS4xNDE1TDMxLjI3MyAzOS4xNDE2QzMxLjE1MjUgMzkuMjM4OSAzMS4wMzAxIDM5LjMzNzkgMzAuODk4MiAzOS40MjY4QzMwLjczMDEgMzkuNTM4IDMwLjU1NCAzOS42MzY1IDMwLjM3MTMgMzkuNzIxMkMyOS45OTA4IDM5LjkwNzcgMjkuNTcyNiA0MC4wMDI5IDI5LjE0OTMgMzkuOTk5NEMyOC4wMDI4IDM5Ljk3NzggMjcuMTkyNCAzOS4xMjA1IDI2LjcxODMgMzguMTUxNkMyNi41OTQgMzcuODk3NyAyNi40ODQ1IDM3LjYzNTkgMjYuMzc1IDM3LjM3NDFMMjYuMzc1IDM3LjM3NDFDMjYuMTk5NyAzNi45NTUxIDI2LjAyNDQgMzYuNTM2MSAyNS43ODgzIDM2LjE0OUMyNS4yMzk5IDM1LjI0OTUgMjQuMzAxMyAzNC41MjUzIDIzLjIwMjIgMzQuNjU5NUMyMi43NTM5IDM0LjcxNTggMjIuMzMzNiAzNC45MTgyIDIyLjA4NDcgMzUuMzA5QzIxLjQyOTUgMzYuMzI5OCAyMi4zNzAzIDM3Ljc1OTggMjMuNTY5NiAzNy41NTczQzIzLjY3MTYgMzcuNTQxNyAyMy43NzE0IDM3LjUxNDEgMjMuODY3IDM3LjQ3NTFDMjMuOTYyMyAzNy40MzQzIDI0LjA1MTIgMzcuMzggMjQuMTMxIDM3LjMxMzhDMjQuMjk4NiAzNy4xNzM2IDI0LjQyNDggMzYuOTkwMyAyNC40OTYzIDM2Ljc4MzRDMjQuNTc1MSAzNi41Njc2IDI0LjU5MjYgMzYuMzM0MSAyNC41NDcgMzYuMTA5QzI0LjQ5NzggMzUuODczNiAyNC4zNTk0IDM1LjY2NjggMjQuMTYxMiAzNS41MzJDMjQuMzkxNyAzNS42NDA0IDI0LjU3MTMgMzUuODM0NSAyNC42NjIzIDM2LjA3MzJDMjQuNzU2NiAzNi4zMTkgMjQuNzgwOSAzNi41ODYyIDI0LjczMjMgMzYuODQ1MUMyNC42ODUyIDM3LjExNDcgMjQuNTY2OSAzNy4zNjY3IDI0LjM4OTYgMzcuNTc0N0MyNC4yOTU1IDM3LjY4MTYgMjQuMTg2NiAzNy43NzQ2IDI0LjA2NjQgMzcuODUwN0MyMy45NDcyIDM3LjkyNTkgMjMuODE5NSAzNy45ODY2IDIzLjY4NiAzOC4wMzE1QzIzLjQxNTMgMzguMTI0NCAyMy4xMjcyIDM4LjE1NDQgMjIuODQzMyAzOC4xMTkyQzIyLjQ0NDcgMzguMDYyMSAyMi4wNjg4IDM3Ljg5ODMgMjEuNzU1IDM3LjY0NUMyMS42OTcgMzcuNTk5IDIxLjY0MTQgMzcuNTUwOCAyMS41ODc1IDM3LjUwMDhDMjEuMzc0IDM3LjMxNTggMjEuMTgwMiAzNy4xMDg3IDIxLjAwOTMgMzYuODgyOUMyMC45MzI2IDM2Ljc5ODEgMjAuODU0NyAzNi43MTQ0IDIwLjc3MzMgMzYuNjM0QzIwLjM4OTEgMzYuMjI5IDE5LjkzNTggMzUuODk2NSAxOS40MzQ5IDM1LjY1MjJDMTkuMDg5NSAzNS40OTk4IDE4LjcyOCAzNS4zODcyIDE4LjM1NzQgMzUuMzE2NkMxOC4xNzA5IDM1LjI3NzYgMTcuOTgyNCAzNS4yNDk1IDE3Ljc5MzggMzUuMjI1N0MxNy43NzMzIDM1LjIyMzYgMTcuNzM0IDM1LjIxNjcgMTcuNjg1IDM1LjIwODJMMTcuNjg0NyAzNS4yMDgxTDE3LjY4NDYgMzUuMjA4MUwxNy42ODQ2IDM1LjIwODFMMTcuNjg0NiAzNS4yMDgxTDE3LjY4NDUgMzUuMjA4MUMxNy41MjcxIDM1LjE4MDYgMTcuMjcxMSAzNS4xMzYgMTcuMjI1OSAzNS4xNzhDMTcuODA4OCAzNC42MzkgMTguNDQ0MSAzNC4xNjAzIDE5LjEyMjQgMzMuNzQ5MUMxOS44MTg5IDMzLjMzNCAyMC41NjY3IDMzLjAxMjYgMjEuMzQ2NiAzMi43OTMzQzIyLjE1NTEgMzIuNTY0NyAyMy4wMDA5IDMyLjQ5OTUgMjMuODM0NyAzMi42MDE3QzI0LjI2MzkgMzIuNjUzNSAyNC42ODQzIDMyLjc2MjcgMjUuMDg0NyAzMi45MjY0QzI1LjUwNDIgMzMuMDk0OCAyNS44OTE0IDMzLjMzNTEgMjYuMjI5MSAzMy42MzY2QzI2LjU2MzIgMzMuOTUyOCAyNi44MzMzIDM0LjMzMTEgMjcuMDI0MyAzNC43NTA0QzI3LjE5NjggMzUuMTQzMSAyNy4zMjU0IDM1LjU1MzcgMjcuNDA3OSAzNS45NzQ3QzI3LjQ1MjEgMzYuMjAxMyAyNy40ODU1IDM2LjQ1MDIgMjcuNTE5OSAzNi43MDc5TDI3LjUyIDM2LjcwNzlMMjcuNTIgMzYuNzA4TDI3LjUyIDM2LjcwOEMyNy42NzcxIDM3Ljg4MjMgMjcuODU4NSAzOS4yMzcyIDI5LjIwNDMgMzkuNDczM0MyOS4yODk4IDM5LjQ5IDI5LjM3NjEgMzkuNTAyMyAyOS40NjI5IDM5LjUxMDJMMjkuNzMxMiAzOS41MTY2QzI5LjkxNTcgMzkuNTAzNCAzMC4wOTkgMzkuNDc3IDMwLjI3OTcgMzkuNDM3NkMzMC42NTQxIDM5LjM0OTIgMzEuMDE5IDM5LjIyNDEgMzEuMzY5MSAzOS4wNjQyTDMxLjMxODcgMzkuMTA0NlpNMjEuMDgwMSAzNi45NjE5QzIxLjExMjMgMzYuOTk4OSAyMS4xNDQ5IDM3LjAzNTUgMjEuMTc3OSAzNy4wNzE4QzIxLjE2NDQgMzcuMDU2NyAyMS4xNTEgMzcuMDQxNSAyMS4xMzc1IDM3LjAyNjRMMjEuMTM3NSAzNy4wMjY0TDIxLjEzNzUgMzcuMDI2NEwyMS4xMzc1IDM3LjAyNjRDMjEuMTE4NCAzNy4wMDQ5IDIxLjA5OTMgMzYuOTgzNCAyMS4wODAxIDM2Ljk2MTlaIiBmaWxsPSJjdXJyZW50Q29sb3IiPjwvcGF0aD48L3N2Zz4K",protocol:"uniswap_v3",slippage:!0,fees:[100,500,3e3,1e4],blockchains:["ethereum","bsc","polygon","optimism","arbitrum"],ethereum:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},bsc:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x78D78E420Da98ad378D7799bE8f4AF69033EB077",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},polygon:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},optimism:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},arbitrum:{router:{address:"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",api:rj.ROUTER},factory:{address:"0x1F98431c8aD98523631AE4a59f267346ea31F984",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}},base:{router:{address:"0x198EF79F1F515F02dFE9e3115eD9fC07183f02fC",api:rj.ROUTER},factory:{address:"0x33128a8fC17869897dcE68Ed026d694621f6FDfD",api:rj.FACTORY},pool:{api:rj.POOL},quoter:{address:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",api:rj.QUOTER},permit:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",api:rj.PERMIT2}}};var oj=t=>new bx(Object.assign(ij,{scope:t,findPath:t=>rj.findPath({...t,exchange:ij}),pathExists:t=>rj.pathExists({...t,exchange:ij}),getAmounts:t=>rj.getAmounts({...t,exchange:ij}),getPrep:t=>rj.getPrep({...t,exchange:ij}),getTransaction:t=>rj.getTransaction({...t,exchange:ij})}));var aj={findPath:async({blockchain:t,tokenIn:e,tokenOut:n})=>{if(![e,n].includes(Vp[t].currency.address)||![e,n].includes(Vp[t].wrapped.address))return{path:void 0,exchangePath:void 0};let r=[e,n];return{path:r,exchangePath:r}},pathExists:async({blockchain:t,path:e})=>!(!e||2!==e.length)&&(e.includes(Vp[t].currency.address)&&e.includes(Vp[t].wrapped.address)),getAmounts:async({path:t,block:e,tokenIn:n,tokenOut:r,amountOut:i,amountIn:o,amountInMax:a,amountOutMin:s})=>(i?o=a=s=i:o?i=a=s=o:s?o=a=i=s:a&&(i=s=o=a),{amountOut:i,amountIn:o,amountInMax:a,amountOutMin:s}),getTransaction:({exchange:t,blockchain:e,path:n,amountIn:r,amountInMax:i,amountOut:o,amountOutMin:a,amountInInput:s,amountOutInput:u,amountInMaxInput:c,amountOutMinInput:l,account:h})=>{let d={blockchain:e,from:h,to:t[e].router.address,api:t[e].router.api};return n[0]===Vp[e].currency.address&&n[1]===Vp[e].wrapped.address?(d.method="deposit",d.value=r.toString(),d):n[0]===Vp[e].wrapped.address&&n[1]===Vp[e].currency.address?(d.method="withdraw",d.value=0,d.params={wad:r},d):void 0},WETH:[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"guy",type:"address"},{name:"wad",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"src",type:"address"},{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"",type:"address"},{name:"",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"guy",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"}]};const sj={name:"wavax",label:"Wrapped Avax",logo:Vp.avalanche.wrapped.logo,protocol:"weth",slippage:!1,blockchains:["avalanche"],avalanche:{router:{address:Vp.avalanche.wrapped.address,api:aj.WETH}}};var uj=t=>new bx(Object.assign(sj,{scope:t,findPath:t=>aj.findPath({...t,exchange:sj}),pathExists:t=>aj.pathExists({...t,exchange:sj}),getAmounts:t=>aj.getAmounts({...t,exchange:sj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:sj})}));const cj={name:"wbnb",label:"Wrapped BNB",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxOTIgMTkyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxOTIgMTkyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6I0YwQjkwQjt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik01NCw0MS4xbDQyLTI0LjJsNDIsMjQuMmwtMTUuNCw4LjlMOTYsMzQuOUw2OS40LDUwTDU0LDQxLjF6IE0xMzgsNzEuN2wtMTUuNC04LjlMOTYsNzhMNjkuNCw2Mi43bC0xNS40LDl2MTgKCUw4MC42LDEwNXYzMC41bDE1LjQsOWwxNS40LTlWMTA1TDEzOCw4OS43VjcxLjd6IE0xMzgsMTIwLjN2LTE4bC0xNS40LDguOXYxOEMxMjIuNiwxMjkuMSwxMzgsMTIwLjMsMTM4LDEyMC4zeiBNMTQ4LjksMTI2LjQKCWwtMjYuNiwxNS4zdjE4bDQyLTI0LjJWODdsLTE1LjQsOUMxNDguOSw5NiwxNDguOSwxMjYuNCwxNDguOSwxMjYuNHogTTEzMy41LDU2LjRsMTUuNCw5djE4bDE1LjQtOXYtMThsLTE1LjQtOUwxMzMuNSw1Ni40CglMMTMzLjUsNTYuNHogTTgwLjYsMTQ4LjN2MThsMTUuNCw5bDE1LjQtOXYtMThMOTYsMTU3LjFMODAuNiwxNDguM3ogTTU0LDEyMC4zbDE1LjQsOXYtMTguMUw1NCwxMDIuM0w1NCwxMjAuM0w1NCwxMjAuM3oKCSBNODAuNiw1Ni40bDE1LjQsOWwxNS40LTlMOTYsNDcuNUM5Niw0Ny40LDgwLjYsNTYuNCw4MC42LDU2LjRMODAuNiw1Ni40eiBNNDMuMSw2NS40bDE1LjQtOWwtMTUuNC05bC0xNS40LDl2MThsMTUuNCw5TDQzLjEsNjUuNAoJTDQzLjEsNjUuNHogTTQzLjEsOTUuOUwyNy43LDg3djQ4LjVsNDIsMjQuMnYtMThsLTI2LjYtMTUuM1Y5NS45TDQzLjEsOTUuOXoiLz4KPC9zdmc+Cg==",slippage:!1,blockchains:["bsc"],bsc:{router:{address:Vp.bsc.wrapped.address,api:aj.WETH}}};var lj=t=>new bx(Object.assign(cj,{scope:t,findPath:t=>aj.findPath({...t,exchange:cj}),pathExists:t=>aj.pathExists({...t,exchange:cj}),getAmounts:t=>aj.getAmounts({...t,exchange:cj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:cj})}));const hj={name:"weth",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["ethereum"],ethereum:{router:{address:Vp.ethereum.wrapped.address,api:aj.WETH}}};var dj=t=>new bx(Object.assign(hj,{scope:t,findPath:t=>aj.findPath({...t,exchange:hj}),pathExists:t=>aj.pathExists({...t,exchange:hj}),getAmounts:t=>aj.getAmounts({...t,exchange:hj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:hj})}));const pj={name:"weth_arbitrum",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["arbitrum"],arbitrum:{router:{address:Vp.arbitrum.wrapped.address,api:aj.WETH}}};var fj=t=>new bx(Object.assign(pj,{scope:t,findPath:t=>aj.findPath({...t,exchange:pj}),pathExists:t=>aj.pathExists({...t,exchange:pj}),getAmounts:t=>aj.getAmounts({...t,exchange:pj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:pj})}));const mj={name:"weth_optimism",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["optimism"],optimism:{router:{address:Vp.optimism.wrapped.address,api:aj.WETH}}};var yj=t=>new bx(Object.assign(mj,{scope:t,findPath:t=>aj.findPath({...t,exchange:mj}),pathExists:t=>aj.pathExists({...t,exchange:mj}),getAmounts:t=>aj.getAmounts({...t,exchange:mj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:mj})}));const gj={name:"weth_base",label:"Wrapped Ethereum",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIKCSBpZD0iTGF5ZXJfMSIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVF1YWxpdHkiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjgzLjUgMjgzLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMzQzNDM0O30KCS5zdDF7ZmlsbDojOEM4QzhDO30KCS5zdDJ7ZmlsbDojM0MzQzNCO30KCS5zdDN7ZmlsbDojMTQxNDE0O30KCS5zdDR7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQxLjcsMjUuOWwtMS41LDUuMnYxNTMuM2wxLjUsMS41bDcxLjItNDIuMUwxNDEuNywyNS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNS45TDcwLjYsMTQzLjhsNzEuMSw0Mi4xdi03NC40VjI1Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTE0MS43LDE5OS40bC0wLjgsMS4xdjU0LjZsMC44LDIuNWw3MS4yLTEwMC4zTDE0MS43LDE5OS40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNDEuNywyNTcuNnYtNTguMmwtNzEuMS00Mi4xTDE0MS43LDI1Ny42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNDEuNywxODUuOWw3MS4yLTQyLjFsLTcxLjItMzIuM1YxODUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNzAuNiwxNDMuOGw3MS4xLDQyLjF2LTc0LjRMNzAuNiwxNDMuOHoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["base"],base:{router:{address:Vp.base.wrapped.address,api:aj.WETH}}};var vj=t=>new bx(Object.assign(gj,{scope:t,findPath:t=>aj.findPath({...t,exchange:gj}),pathExists:t=>aj.pathExists({...t,exchange:gj}),getAmounts:t=>aj.getAmounts({...t,exchange:gj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:gj})}));const wj={name:"wftm",label:"Wrapped Fantom",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMTkyIDE5MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTkyIDE5MjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8ZyBpZD0iY2lyY2xlIj4KCTxnIGlkPSJGYW50b20tY2lyY2xlIj4KCQk8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsUnVsZT0iZXZlbm9kZCIgY2xpcFJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMxOTY5RkYiIGNsYXNzPSJzdDAiIGN4PSI5NiIgY3k9Ijk2IiByPSI4MC40Ii8+CgkJPHBhdGggaWQ9IlNoYXBlIiBmaWxsPSIjRkZGRkZGIiBkPSJNOTEuMSw0MS4yYzIuNy0xLjQsNi44LTEuNCw5LjUsMGwyNy42LDE0LjZjMS42LDAuOSwyLjUsMi4xLDIuNywzLjVoMHY3My4zCgkJCWMwLDEuNC0wLjksMi45LTIuNywzLjhsLTI3LjYsMTQuNmMtMi43LDEuNC02LjgsMS40LTkuNSwwbC0yNy42LTE0LjZjLTEuOC0wLjktMi42LTIuNC0yLjctMy44YzAtMC4xLDAtMC4zLDAtMC40bDAtNzIuNAoJCQljMC0wLjEsMC0wLjIsMC0wLjNsMC0wLjJoMGMwLjEtMS4zLDEtMi42LDIuNi0zLjVMOTEuMSw0MS4yeiBNMTI2LjYsOTkuOWwtMjYsMTMuN2MtMi43LDEuNC02LjgsMS40LTkuNSwwTDY1LjIsMTAwdjMyLjMKCQkJbDI1LjksMTMuNmMxLjUsMC44LDMuMSwxLjYsNC43LDEuN2wwLjEsMGMxLjUsMCwzLTAuOCw0LjYtMS41bDI2LjItMTMuOVY5OS45eiBNNTYuNSwxMzAuOWMwLDIuOCwwLjMsNC43LDEsNgoJCQljMC41LDEuMSwxLjMsMS45LDIuOCwyLjlsMC4xLDAuMWMwLjMsMC4yLDAuNywwLjQsMS4xLDAuN2wwLjUsMC4zbDEuNiwwLjlsLTIuMiwzLjdsLTEuNy0xLjFsLTAuMy0wLjJjLTAuNS0wLjMtMC45LTAuNi0xLjMtMC44CgkJCWMtNC4yLTIuOC01LjctNS45LTUuNy0xMi4zbDAtMC4ySDU2LjV6IE05My44LDgwLjVjLTAuMiwwLjEtMC40LDAuMS0wLjYsMC4yTDY1LjYsOTUuM2MwLDAtMC4xLDAtMC4xLDBsMCwwbDAsMGwwLjEsMGwyNy42LDE0LjYKCQkJYzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yVjgwLjV6IE05OC4yLDgwLjV2MjkuOGMwLjItMC4xLDAuNC0wLjEsMC42LTAuMmwyNy42LTE0LjZjMCwwLDAuMSwwLDAuMSwwbDAsMGwwLDBsLTAuMSwwTDk4LjgsODAuNwoJCQlDOTguNiw4MC42LDk4LjQsODAuNSw5OC4yLDgwLjV6IE0xMjYuNiw2NC40bC0yNC44LDEzbDI0LjgsMTNWNjQuNHogTTY1LjIsNjQuNHYyNi4xbDI0LjgtMTNMNjUuMiw2NC40eiBNOTguNyw0NS4xCgkJCWMtMS40LTAuOC00LTAuOC01LjUsMEw2NS42LDU5LjdjMCwwLTAuMSwwLTAuMSwwbDAsMGwwLDBsMC4xLDBsMjcuNiwxNC42YzEuNCwwLjgsNCwwLjgsNS41LDBsMjcuNi0xNC42YzAsMCwwLjEsMCwwLjEsMGwwLDBsMCwwCgkJCWwtMC4xLDBMOTguNyw0NS4xeiBNMTMwLjcsNDYuNWwxLjcsMS4xbDAuMywwLjJjMC41LDAuMywwLjksMC42LDEuMywwLjhjNC4yLDIuOCw1LjcsNS45LDUuNywxMi4zbDAsMC4yaC00LjNjMC0yLjgtMC4zLTQuNy0xLTYKCQkJYy0wLjUtMS4xLTEuMy0xLjktMi44LTIuOWwtMC4xLTAuMWMtMC4zLTAuMi0wLjctMC40LTEuMS0wLjdsLTAuNS0wLjNsLTEuNi0wLjlMMTMwLjcsNDYuNXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K",protocol:"weth",slippage:!1,blockchains:["fantom"],fantom:{router:{address:Vp.fantom.wrapped.address,api:aj.WETH}}};var bj=t=>new bx(Object.assign(wj,{scope:t,findPath:t=>aj.findPath({...t,exchange:wj}),pathExists:t=>aj.pathExists({...t,exchange:wj}),getAmounts:t=>aj.getAmounts({...t,exchange:wj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:wj})}));const Mj={name:"wmatic",label:"Wrapped MATIC",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0NS40IDQ1LjQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ1LjQgNDUuNDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiM4MjQ3RTU7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzEuOSwxNi42Yy0wLjctMC40LTEuNi0wLjQtMi4yLDBsLTUuMywzLjFsLTMuNSwybC01LjEsMy4xYy0wLjcsMC40LTEuNiwwLjQtMi4yLDBsLTQtMi40CgljLTAuNi0wLjQtMS4xLTEuMS0xLjEtMnYtNC42YzAtMC45LDAuNS0xLjYsMS4xLTJsNC0yLjNjMC43LTAuNCwxLjUtMC40LDIuMiwwbDQsMi40YzAuNywwLjQsMS4xLDEuMSwxLjEsMnYzLjFsMy41LTIuMXYtMy4yCgljMC0wLjktMC40LTEuNi0xLjEtMmwtNy41LTQuNGMtMC43LTAuNC0xLjUtMC40LTIuMiwwTDYsMTEuN2MtMC43LDAuNC0xLjEsMS4xLTEuMSwxLjh2OC43YzAsMC45LDAuNCwxLjYsMS4xLDJsNy42LDQuNAoJYzAuNywwLjQsMS41LDAuNCwyLjIsMGw1LjEtMi45bDMuNS0yLjFsNS4xLTIuOWMwLjctMC40LDEuNi0wLjQsMi4yLDBsNCwyLjNjMC43LDAuNCwxLjEsMS4xLDEuMSwydjQuNmMwLDAuOS0wLjQsMS42LTEuMSwyCglsLTMuOSwyLjNjLTAuNywwLjQtMS41LDAuNC0yLjIsMGwtNC0yLjNjLTAuNy0wLjQtMS4xLTEuMS0xLjEtMnYtMi45TDIxLDI4Ljd2My4xYzAsMC45LDAuNCwxLjYsMS4xLDJsNy41LDQuNAoJYzAuNywwLjQsMS41LDAuNCwyLjIsMGw3LjUtNC40YzAuNy0wLjQsMS4xLTEuMSwxLjEtMlYyM2MwLTAuOS0wLjQtMS42LTEuMS0yQzM5LjIsMjEsMzEuOSwxNi42LDMxLjksMTYuNnoiLz4KPC9zdmc+Cg==",protocol:"weth",slippage:!1,blockchains:["polygon"],polygon:{router:{address:Vp.polygon.wrapped.address,api:aj.WETH}}};var Aj=t=>new bx(Object.assign(Mj,{scope:t,findPath:t=>aj.findPath({...t,exchange:Mj}),pathExists:t=>aj.pathExists({...t,exchange:Mj}),getAmounts:t=>aj.getAmounts({...t,exchange:Mj}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:Mj})}));const Ej={name:"wxdai",label:"Wrapped XDAI",logo:Vp.gnosis.wrapped.logo,protocol:"weth",slippage:!1,blockchains:["gnosis"],gnosis:{router:{address:Vp.gnosis.wrapped.address,api:aj.WETH}}};var Nj=t=>new bx(Object.assign(Ej,{scope:t,findPath:t=>aj.findPath({...t,exchange:Ej}),pathExists:t=>aj.pathExists({...t,exchange:Ej}),getAmounts:t=>aj.getAmounts({...t,exchange:Ej}),getPrep:t=>{},getTransaction:t=>aj.getTransaction({...t,exchange:Ej})}));const Tj=[TS(),oj(),zS(),ZS(),kS(),GS(),PS(),RS(),xx(),dj(),yj(),vj(),fj(),lj(),Aj(),bj(),uj(),Nj()];Tj.forEach((t=>{Tj[t.name]=t})),Tj.ethereum=[oj("ethereum"),ZS("ethereum"),dj("ethereum")],Tj.ethereum.forEach((t=>{Tj.ethereum[t.name]=t})),Tj.bsc=[zS("bsc"),oj("bsc"),kS("bsc"),lj("bsc")],Tj.bsc.forEach((t=>{Tj.bsc[t.name]=t})),Tj.polygon=[oj("polygon"),PS("polygon"),Aj("polygon")],Tj.polygon.forEach((t=>{Tj.polygon[t.name]=t})),Tj.solana=[TS("solana")],Tj.solana.forEach((t=>{Tj.solana[t.name]=t})),Tj.optimism=[oj("optimism"),yj("optimism")],Tj.optimism.forEach((t=>{Tj.optimism[t.name]=t})),Tj.base=[oj("base"),vj("base")],Tj.base.forEach((t=>{Tj.base[t.name]=t})),Tj.arbitrum=[oj("arbitrum"),fj("arbitrum")],Tj.arbitrum.forEach((t=>{Tj.arbitrum[t.name]=t})),Tj.fantom=[RS("fantom"),bj("fantom")],Tj.fantom.forEach((t=>{Tj.fantom[t.name]=t})),Tj.avalanche=[GS("avalanche"),uj("avalanche")],Tj.avalanche.forEach((t=>{Tj.avalanche[t.name]=t})),Tj.gnosis=[xx("gnosis"),Nj("gnosis")],Tj.gnosis.forEach((t=>{Tj.gnosis[t.name]=t}));Tj.route=({blockchain:t,tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})=>Promise.all(Tj[t].map((t=>t.route({tokenIn:e,tokenOut:n,amountIn:r,amountOut:i,amountInMax:o,amountOutMin:a})))).then((t=>t.filter(Boolean).sort(((t,e)=>(r||o?BigInt(t.amountOut)BigInt(e.amountIn))?1:(r||o?BigInt(t.amountOut)>BigInt(e.amountOut):BigInt(t.amountIn)kj||(kj="object"==typeof r?r:window,kj);const xj=()=>(void 0===Lj()._Web3ClientConfiguration&&(Lj()._Web3ClientConfiguration={}),Lj()._Web3ClientConfiguration);function Sj(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}class jj extends ZA{constructor(t,e,n,r){super(t),this._network=e,this._endpoint=t,this._endpoints=n,this._failover=r,this._pendingBatch=[]}detectNetwork(){return Promise.resolve(Vp.findByName(this._network).id)}requestChunk(t,e){try{const n=t.map((t=>t.request));return $M(e,JSON.stringify(n)).then((e=>{t.forEach(((t,n)=>{const r=e[n];if(Sj([r,"optionalAccess",t=>t.error])){const e=new Error(r.error.message);e.code=r.error.code,e.data=r.error.data,t.reject(e)}else Sj([r,"optionalAccess",t=>t.result])?t.resolve(r.result):t.reject()}))})).catch((e=>{if(e&&"SERVER_ERROR"==e.code){const e=this._endpoints.indexOf(this._endpoint)+1;this._failover(),this._endpoint=e>=this._endpoints.length?this._endpoints[0]:this._endpoints[e],this.requestChunk(t,this._endpoint)}else t.forEach((t=>{t.reject(e)}))}))}catch(e){t.forEach((t=>{t.reject()}))}}send(t,e){const n={method:t,params:e,id:this._nextId++,jsonrpc:"2.0"};null==this._pendingBatch&&(this._pendingBatch=[]);const r={request:n,resolve:null,reject:null},i=new Promise(((t,e)=>{r.resolve=t,r.reject=e}));return this._pendingBatch.push(r),this._pendingBatchAggregator||(this._pendingBatchAggregator=setTimeout((()=>{const t=this._pendingBatch;this._pendingBatch=[],this._pendingBatchAggregator=null;const e=[];for(let n=0;n(t.map((t=>t.request)),this.requestChunk(t,this._endpoint))))}),xj().batchInterval||10)),i}}const Cj=()=>(null==Lj()._Web3ClientProviders&&(Lj()._Web3ClientProviders={}),Lj()._Web3ClientProviders),Dj=(t,e)=>{void 0===Cj()[t]&&(Cj()[t]=[]);const n=Cj()[t].indexOf(e);n>-1&&Cj()[t].splice(n,1),Cj()[t].unshift(e)},Oj=async(t,e,n=!0)=>{let r;Cj()[t]=e.map(((r,i)=>new jj(r,t,e,(()=>{1===Cj()[t].length?Oj(t,e,n):Cj()[t].splice(i,1)}))));let i=Lj();if(null==i.fetch||void 0!==k&&k.env&&"test"==k.env.NODE_ENV||void 0!==i.cy||!1===n)r=Cj()[t][0];else{let n=await Promise.all(e.map((t=>new Promise((async e=>{let n=(new Date).getTime();setTimeout((()=>e(900)),900);if(!(await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({method:"net_version",id:1,jsonrpc:"2.0"})})).ok)return e(999);let r=(new Date).getTime();e(r-n)})))));const i=Math.min(...n),o=n.indexOf(i);r=Cj()[t][o]}Dj(t,r)};var zj=async t=>{let e=Cj();if(e&&e[t])return e[t][0];let n=Lj();return n._Web3ClientGetProviderPromise&&n._Web3ClientGetProviderPromise[t]||(n._Web3ClientGetProviderPromise||(n._Web3ClientGetProviderPromise={}),n._Web3ClientGetProviderPromise[t]=new Promise((async e=>{await Oj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t][0])}))),await n._Web3ClientGetProviderPromise[t]},_j=async t=>{let e=Cj();if(e&&e[t])return e[t];let n=Lj();return n._Web3ClientGetProvidersPromise&&n._Web3ClientGetProvidersPromise[t]||(n._Web3ClientGetProvidersPromise||(n._Web3ClientGetProvidersPromise={}),n._Web3ClientGetProvidersPromise[t]=new Promise((async e=>{await Oj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t])}))),await n._Web3ClientGetProvidersPromise[t]};class Pj extends ql{constructor(t,e,n,r){super(t),this._provider=new ql(t),this._network=e,this._endpoint=t,this._endpoints=n,this._failover=r,this._pendingBatch=[],this._rpcRequest=this._rpcRequestReplacement.bind(this)}requestChunk(t){const e=t.map((t=>t.request)),n=e=>{if(e&&["Failed to fetch","limit reached","504","503","502","500","429","426","422","413","409","408","406","405","404","403","402","401","400"].some((t=>e.toString().match(t)))){const e=this._endpoints.indexOf(this._endpoint)+1;this._endpoint=e>=this._endpoints.length?this._endpoints[0]:this._endpoints[e],this._provider=new ql(this._endpoint),this.requestChunk(t)}else t.forEach((t=>{t.reject(e)}))};try{return this._provider._rpcBatchRequest(e).then((e=>{t.forEach(((t,n)=>{const r=e[n];if(function(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}([r,"optionalAccess",t=>t.error])){const e=new Error(r.error.message);e.code=r.error.code,e.data=r.error.data,t.reject(e)}else r?t.resolve(r):t.reject()}))})).catch(n)}catch(t){return n(t)}}_rpcRequestReplacement(t,e){const n={methodName:t,args:e};null==this._pendingBatch&&(this._pendingBatch=[]);const r={request:n,resolve:null,reject:null},i=new Promise(((t,e)=>{r.resolve=t,r.reject=e}));return this._pendingBatch.push(r),this._pendingBatchAggregator||(this._pendingBatchAggregator=setTimeout((()=>{const t=this._pendingBatch;this._pendingBatch=[],this._pendingBatchAggregator=null;const e=[];for(let n=0;n(t.map((t=>t.request)),this.requestChunk(t))))}),xj().batchInterval||10)),i}}const Bj=()=>(null==Lj()._Web3ClientProviders&&(Lj()._Web3ClientProviders={}),Lj()._Web3ClientProviders),Rj=(t,e)=>{void 0===Bj()[t]&&(Bj()[t]=[]);const n=Bj()[t].indexOf(e);n>-1&&Bj()[t].splice(n,1),Bj()[t].unshift(e)},Uj=async(t,e,n=!0)=>{let r;Bj()[t]=e.map(((r,i)=>new Pj(r,t,e,(()=>{1===Bj()[t].length?Uj(t,e,n):Bj()[t].splice(i,1)}))));let i=Lj();if(null==i.fetch||void 0!==k&&k.env&&"test"==k.env.NODE_ENV||void 0!==i.cy||!1===n)r=Bj()[t][0];else{let n=await Promise.all(e.map((t=>new Promise((async e=>{let n=(new Date).getTime();setTimeout((()=>e(900)),900);if(!(await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({method:"getIdentity",id:1,jsonrpc:"2.0"})})).ok)return e(999);let r=(new Date).getTime();e(r-n)})))));const i=Math.min(...n),o=n.indexOf(i);r=Bj()[t][o]}Rj(t,r)};var Wj=async t=>{let e=Bj();if(e&&e[t])return e[t][0];let n=Lj();return n._Web3ClientGetProviderPromise&&n._Web3ClientGetProviderPromise[t]||(n._Web3ClientGetProviderPromise||(n._Web3ClientGetProviderPromise={}),n._Web3ClientGetProviderPromise[t]=new Promise((async e=>{await Uj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t][0])}))),await n._Web3ClientGetProviderPromise[t]},Qj=async t=>{let e=Bj();if(e&&e[t])return e[t];let n=Lj();return n._Web3ClientGetProvidersPromise&&n._Web3ClientGetProvidersPromise[t]||(n._Web3ClientGetProvidersPromise||(n._Web3ClientGetProvidersPromise={}),n._Web3ClientGetProvidersPromise[t]=new Promise((async e=>{await Uj(t,Vp[t].endpoints),e(Lj()._Web3ClientProviders[t])}))),await n._Web3ClientGetProvidersPromise[t]};let Yj=["ethereum","bsc","polygon","solana","fantom","arbitrum","avalanche","gnosis","optimism","base"];Yj.evm=["ethereum","bsc","polygon","fantom","arbitrum","avalanche","gnosis","optimism","base"],Yj.solana=["solana"];let Fj=()=>(null==Lj()._Web3ClientCacheStore&&(Lj()._Web3ClientCacheStore={}),Lj()._Web3ClientCacheStore),Vj=()=>(null==Lj()._Web3ClientPromiseStore&&(Lj()._Web3ClientPromiseStore={}),Lj()._Web3ClientPromiseStore),Hj=function({key:t}){Vj()[t]=void 0},Gj=function({call:t,key:e,expires:n=0}){return new Promise(((r,i)=>{let o,a=function({key:t}){return Vj()[t]}({key:e=JSON.stringify(e)});if(a)return a.then(r).catch(i);(function({key:t,promise:e}){return Vj()[t]=e,e})({key:e,promise:new Promise(((a,s)=>0===n?t().then((t=>{r(t),a(t)})).catch((t=>{i(t),s(t)})):(o=function({key:t,expires:e}){let n=Fj()[t];if(function(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}([n,"optionalAccess",t=>t.expiresAt])>Date.now())return n.value}({key:e,expires:n}),o?(r(o),a(o),o):void t().then((t=>{t&&function({key:t,value:e,expires:n}){Fj()[t]={expiresAt:Date.now()+n,value:e}}({key:e,value:t,expires:n}),r(t),a(t)})).catch((t=>{i(t),s(t)})))))}).then((()=>{Hj({key:e})})).catch((()=>{Hj({key:e})}))}))};const qj=async t=>{if(Yj.evm.includes(t))return await zj(t);if(Yj.solana.includes(t))return await Wj(t);throw"Unknown blockchain: "+t};const Zj=({address:t,api:e,method:n,params:r,provider:i,block:o})=>{const a=new _M(t,e,i),s=(({contract:t,method:e,params:n})=>t.interface.fragments.find((t=>t.name==e)).inputs.map(((t,e)=>Array.isArray(n)?n[e]:n[t.name])))({contract:a,method:n,params:r}),u=a.interface.fragments.find((t=>t.name===n));return void 0===a[n]&&(n=`${n}(${u.inputs.map((t=>t.type)).join(",")})`),u&&"nonpayable"===u.stateMutability?a.callStatic[n](...s,{blockTag:o}):a[n](...s,{blockTag:o})},Jj=({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a})=>n?Zj({address:e,api:n,method:r,params:i,provider:a,block:o}):"latestBlockNumber"===r?a.getBlockNumber():"balance"===r?(({address:t,provider:e})=>e.getBalance(t))({address:e,provider:a}):"transactionCount"===r?(({address:t,provider:e})=>e.getTransactionCount(t))({address:e,provider:a}):void 0;const Xj=async({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a,providers:s})=>{try{if(null==r||"getAccountInfo"===r)return null==n&&(n=ip),await(async({address:t,api:e,method:n,params:r,provider:i,block:o})=>{const a=await i.getAccountInfo(new Xs(t));if(a&&a.data)return e.decode(a.data)})({address:e,api:n,method:r,params:i,provider:a,block:o});if("getProgramAccounts"===r)return await a.getProgramAccounts(new Xs(e),i).then((t=>n?t.map((t=>(t.data=n.decode(t.account.data),t))):t));if("getTokenAccountBalance"===r)return await a.getTokenAccountBalance(new Xs(e));if("latestBlockNumber"===r)return await a.getSlot(i||void 0);if("balance"===r)return await(({address:t,provider:e})=>e.getBalance(new Xs(t)))({address:e,provider:a})}catch(u){if(s&&u&&["Failed to fetch","limit reached","504","503","502","500","429","426","422","413","409","408","406","405","404","403","402","401","400"].some((t=>u.toString().match(t)))){let u=s[s.indexOf(a)+1]||s[0];return Xj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:u,providers:s})}throw u}};const Kj=async function(t,e){const{blockchain:n,address:r,method:i}=(t=>{if("object"==typeof t)return t;let e=t.match(/(?\w+):\/\/(?[\w\d]+)(\/(?[\w\d]+)*)?/);return null==e.groups.part2?e.groups.part1.match(/\d/)?{blockchain:e.groups.blockchain,address:e.groups.part1}:{blockchain:e.groups.blockchain,method:e.groups.part1}:{blockchain:e.groups.blockchain,address:e.groups.part1,method:e.groups.part2}})(t),{api:o,params:a,cache:s,block:u,timeout:c,strategy:l,cacheKey:h}=("object"==typeof t?t:e)||{};return await Gj({expires:s||0,key:h||[n,r,i,a,u],call:async()=>{if(Yj.evm.includes(n))return await(async({blockchain:t,address:e,api:n,method:r,params:i,block:o,timeout:a,strategy:s})=>{if(s=s||xj().strategy||"failover",a=a||xj().timeout||void 0,"fastest"===s){const s=await _j(t);let u=[];const c=s.map((a=>new Promise((s=>{u.push(Jj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a}).then(s))})))),l=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a||1e4)));return u=Promise.all(u.map((t=>new Promise((e=>{t.catch(e)}))))).then((()=>{})),Promise.race([...c,l,u])}{const s=await zj(t),u=Jj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:s});return a?(a=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a))),Promise.race([u,a])):u}})({blockchain:n,address:r,api:o,method:i,params:a,block:u,strategy:l,timeout:c});if(Yj.solana.includes(n))return await(async({blockchain:t,address:e,api:n,method:r,params:i,block:o,timeout:a,strategy:s})=>{s=s||xj().strategy||"failover",a=a||xj().timeout||void 0;const u=await Qj(t);if("fastest"===s){let s=[];const c=u.map((a=>new Promise((u=>{s.push(Xj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:a}).then(u))})))),l=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a||1e4)));return s=Promise.all(s.map((t=>new Promise((e=>{t.catch(e)}))))).then((()=>{})),Promise.race([...c,l,s])}{const s=await Wj(t),c=Xj({blockchain:t,address:e,api:n,method:r,params:i,block:o,provider:s,providers:u});return a?(a=new Promise(((t,e)=>setTimeout((()=>{e(new Error("Web3ClientTimeout"))}),a))),Promise.race([c,a])):c}})({blockchain:n,address:r,api:o,method:i,params:a,block:u,strategy:l,timeout:c});throw"Unknown blockchain: "+n}})},$j=async({wSolSenderAccountKeypair:t,paymentRoute:e})=>{if(!t)return;const n=e.fromToken.address===Vp.solana.currency.address?new rp(e.fromAmount):new rp("0"),r=await qj("solana"),i=new rp(await r.getMinimumBalanceForRentExemption(Tk.solana.TOKEN_LAYOUT.span)),o=e.fromAddress,a=n.add(i);return[Yu.createAccount({fromPubkey:new Xs(o),newAccountPubkey:t.publicKey,programId:new Xs(Tk.solana.TOKEN_PROGRAM),space:Tk.solana.TOKEN_LAYOUT.span,lamports:a}),Tk.solana.initializeAccountInstruction({account:t.publicKey.toString(),token:Vp.solana.wrapped.address,owner:o})]},tC=async({wSolEscrowAccountKeypair:t,paymentRoute:e})=>{if(!t)return;const n=await qj("solana"),r=new rp(await n.getMinimumBalanceForRentExemption(Tk.solana.TOKEN_LAYOUT.span)),i=await pC();return[Yu.createAccount({fromPubkey:new Xs(e.fromAddress),newAccountPubkey:t.publicKey,programId:new Xs(Tk.solana.TOKEN_PROGRAM),space:Tk.solana.TOKEN_LAYOUT.span,lamports:r}),Tk.solana.initializeAccountInstruction({account:t.publicKey.toString(),token:Vp.solana.wrapped.address,owner:i.toString()})]},eC=({paymentRoute:t})=>{let e=[...t.exchangeRoutes[0].path];return e.indexOf(Vp.solana.currency.address)>-1&&e.splice(e.indexOf(Vp.solana.currency.address),1),e.indexOf(t.fromToken.address)>-1&&e.splice(e.indexOf(t.fromToken.address),1),e.indexOf(t.toToken.address)>-1&&e.splice(e.indexOf(t.toToken.address),1),2===e.length&&e[0]===Vp.solana.wrapped.address?e[1]:e[0]},nC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:eC({paymentRoute:t}),owner:t.fromAddress}),rC=async({paymentRoute:t})=>{if(0===t.exchangeRoutes.length||gC(t.exchangeRoutes[0].path).length<=2)return;return await(async({paymentRoute:t})=>await Kj({blockchain:"solana",address:await nC({paymentRoute:t}),api:Tk.solana.TOKEN_LAYOUT,cache:1e3}))({paymentRoute:t})?void 0:Tk.solana.createAssociatedTokenAccountInstruction({token:eC({paymentRoute:t}),owner:t.fromAddress,payer:t.fromAddress})},iC=async({wSolSenderAccountKeypair:t,paymentRoute:e})=>{if(t)return Tk.solana.closeAccountInstruction({account:t.publicKey.toString(),owner:e.fromAddress})},oC=async({from:t})=>{let e=[np.from("payments"),new Xs(t).toBuffer()],[n]=await Xs.findProgramAddress(e,new Xs(Ij.solana.address));return n},aC=async({from:t})=>{let e=(await oC({from:t})).toString();return await Kj({blockchain:"solana",address:e,api:pp([gp("anchorDiscriminator"),gp("nonce")]),cache:1e3})},sC=async({from:t})=>{if(await aC({from:t}))return;const e=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(t),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t}),isSigner:!1,isWritable:!0}],n=np.alloc(Ij.solana.api.createPaymentsAccount.layout.span);return Ij.solana.api.createPaymentsAccount.layout.encode({anchorDiscriminator:Ij.solana.api.createPaymentsAccount.anchorDiscriminator},n),new gu({keys:e,programId:new Xs(Ij.solana.address),data:n})},uC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:t.fromToken.address,owner:t.fromAddress}),cC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:t.toToken.address,owner:t.toAddress}),lC=async({paymentRoute:t})=>{if(t.toToken.address===Vp.solana.currency.address){const e=await Kj({blockchain:"solana",method:"balance",address:t.toAddress}),n=await qj("solana"),r=new rp(await n.getMinimumBalanceForRentExemption(0)),i=new rp(t.toAmount);if(new rp(e).add(i).gt(r))return;return Yu.transfer({fromPubkey:new Xs(t.fromAddress),toPubkey:new Xs(t.toAddress),lamports:r.sub(i)})}{const e=t.toToken.address;if(await(async({paymentRoute:t})=>await Tk.solana.findAccount({token:t.toToken.address,owner:t.toAddress}))({paymentRoute:t}))return;return Tk.solana.createAssociatedTokenAccountInstruction({token:e,owner:t.toAddress,payer:t.fromAddress})}},hC=async({paymentRoute:t})=>await Tk.solana.findProgramAddress({token:t.toToken.address,owner:t.fee.receiver}),dC=async({paymentRoute:t})=>{if(t.fee){if(t.toToken.address===Vp.solana.currency.address){const e=await Kj({blockchain:"solana",method:"balance",address:t.fee.receiver}),n=await qj("solana"),r=new rp(await n.getMinimumBalanceForRentExemption(0)),i=new rp(t.feeAmount);if(new rp(e).add(i).gt(r))return;return Yu.transfer({fromPubkey:new Xs(t.fromAddress),toPubkey:new Xs(t.fee.receiver),lamports:r.sub(i)})}{const e=t.toToken.address;if(await(async({paymentRoute:t})=>await Tk.solana.findAccount({token:t.toToken.address,owner:t.fee.receiver}))({paymentRoute:t}))return;return Tk.solana.createAssociatedTokenAccountInstruction({token:e,owner:t.fee.receiver,payer:t.fromAddress})}}},pC=async()=>{let t=[np.from("escrow_sol")],[e,n]=await Xs.findProgramAddress(t,new Xs(Ij.solana.address));return e},fC=async({paymentRoute:t})=>{let e=[np.from("escrow"),new Xs(t.toToken.address===Vp.solana.currency.address?Vp.solana.wrapped.address:t.toToken.address).toBuffer()],[n,r]=await Xs.findProgramAddress(e,new Xs(Ij.solana.address));return n},mC=async({paymentRoute:t})=>{if(0===t.exchangeRoutes.length||t.toToken.address===Vp.solana.currency.address)return;if(await(async({paymentRoute:t})=>await Kj({blockchain:"solana",address:(await fC({paymentRoute:t})).toString(),api:Tk.solana.TOKEN_LAYOUT,cache:1e3}))({paymentRoute:t}))return;const e=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:new Xs(t.toToken.address===Vp.solana.currency.address?Vp.solana.wrapped.address:t.toToken.address),isSigner:!1,isWritable:!0},{pubkey:await fC({paymentRoute:t}),isSigner:!1,isWritable:!0}],n=np.alloc(Ij.solana.api.createEscrowTokenAccount.layout.span);return Ij.solana.api.createEscrowTokenAccount.layout.encode({anchorDiscriminator:Ij.solana.api.createEscrowTokenAccount.anchorDiscriminator},n),new gu({keys:e,programId:new Xs(Ij.solana.address),data:n})},yC=async({paymentRoute:t})=>{if(0===t.exchangeRoutes.length||t.toToken.address!=Vp.solana.currency.address)return;if(await(async({paymentRoute:t})=>await Kj({blockchain:"solana",address:(await pC()).toString(),api:pp([gp("amount"),lp("owner")]),cache:1e3}))({paymentRoute:t}))return;const e=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await pC(),isSigner:!1,isWritable:!0}],n=np.alloc(Ij.solana.api.createEscrowSolAccount.layout.span);return Ij.solana.api.createEscrowSolAccount.layout.encode({anchorDiscriminator:Ij.solana.api.createEscrowSolAccount.anchorDiscriminator},n),new gu({keys:e,programId:new Xs(Ij.solana.address),data:n})},gC=t=>t.filter((t=>t!==Vp.solana.currency.address)),vC=async({paymentRoute:t,wSolSenderAccountKeypair:e,wSolEscrowAccountKeypair:n,nonce:r,deadline:i})=>{switch((({paymentRoute:t})=>{if(t.fromToken.address===Vp.solana.currency.address&&t.toToken.address===Vp.solana.currency.address)return"routeSol";if(t.fromToken.address!==Vp.solana.currency.address&&t.toToken.address!==Vp.solana.currency.address&&0===t.exchangeRoutes.length)return"routeToken";if(t.exchangeRoutes.length>0&&2===gC(t.exchangeRoutes[0].path).length)return t.toToken.address===Vp.solana.currency.address?"routeOrcaSwapSolOut":"routeOrcaSwap";if(t.exchangeRoutes.length>0&&gC(t.exchangeRoutes[0].path).length>2)return t.toToken.address===Vp.solana.currency.address?"routeOrcaTwoHopSwapSolOut":"routeOrcaTwoHopSwap";throw"Payment method does not exist!"})({paymentRoute:t})){case"routeSol":return await(async({paymentRoute:t,nonce:e,deadline:n})=>{const r=new Xs(t.toAddress),i=t.fee?new Xs(t.fee.receiver):r,o=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0}],a=np.alloc(Ij.solana.api.routeSol.layout.span);return Ij.solana.api.routeSol.layout.encode({anchorDiscriminator:Ij.solana.api.routeSol.anchorDiscriminator,nonce:e,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(n)},a),new gu({keys:o,programId:new Xs(Ij.solana.address),data:a})})({paymentRoute:t,nonce:r,deadline:i});case"routeToken":return await(async({paymentRoute:t,nonce:e,deadline:n})=>{const r=await uC({paymentRoute:t}),i=await cC({paymentRoute:t}),o=t.fee?await hC({paymentRoute:t}):i,a=[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:new Xs(r),isSigner:!1,isWritable:!0},{pubkey:new Xs(i),isSigner:!1,isWritable:!0},{pubkey:new Xs(o),isSigner:!1,isWritable:!0}],s=np.alloc(Ij.solana.api.routeToken.layout.span);return Ij.solana.api.routeToken.layout.encode({anchorDiscriminator:Ij.solana.api.routeToken.anchorDiscriminator,nonce:e,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(n)},s),new gu({keys:a,programId:new Xs(Ij.solana.address),data:s})})({paymentRoute:t,nonce:r,deadline:i});case"routeOrcaSwap":return await(async({paymentRoute:t,nonce:e,wSolSenderAccountKeypair:n,deadline:r})=>{const i=n?n.publicKey:await uC({paymentRoute:t}),o=await cC({paymentRoute:t}),a=t.fee?await hC({paymentRoute:t}):o,s=await fC({paymentRoute:t}),u=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),c=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),fp("sqrtPriceLimit"),op("amountSpecifiedIsInput"),op("aToB")]).decode(u.data),l=[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:new Xs(i),isSigner:!1,isWritable:!0},u.keys[2],u.keys[4],u.keys[6],u.keys[7],u.keys[8],u.keys[9],u.keys[10],{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:new Xs(o),isSigner:!1,isWritable:!0},{pubkey:new Xs(a),isSigner:!1,isWritable:!0}],h=np.alloc(Ij.solana.api.routeOrcaSwap.layout.span);return Ij.solana.api.routeOrcaSwap.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaSwap.anchorDiscriminator,nonce:e,amountIn:c.amount,sqrtPriceLimit:c.sqrtPriceLimit,amountSpecifiedIsInput:c.amountSpecifiedIsInput,aToB:c.aToB,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},h),new gu({keys:l,programId:new Xs(Ij.solana.address),data:h})})({paymentRoute:t,nonce:r,wSolSenderAccountKeypair:e,deadline:i});case"routeOrcaSwapSolOut":return await(async({paymentRoute:t,nonce:e,wSolEscrowAccountKeypair:n,deadline:r})=>{const i=await uC({paymentRoute:t}),o=n.publicKey,a=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),s=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),fp("sqrtPriceLimit"),op("amountSpecifiedIsInput"),op("aToB")]).decode(a.data),u=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:new Xs(i),isSigner:!1,isWritable:!0},a.keys[2],a.keys[4],a.keys[6],a.keys[7],a.keys[8],a.keys[9],a.keys[10],{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:await pC(),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.toAddress),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.fee?t.fee.receiver:t.toAddress),isSigner:!1,isWritable:!0}],c=np.alloc(Ij.solana.api.routeOrcaSwapSolOut.layout.span);return Ij.solana.api.routeOrcaSwapSolOut.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaSwapSolOut.anchorDiscriminator,nonce:e,amountIn:s.amount,sqrtPriceLimit:s.sqrtPriceLimit,amountSpecifiedIsInput:s.amountSpecifiedIsInput,aToB:s.aToB,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},c),new gu({keys:u,programId:new Xs(Ij.solana.address),data:c})})({paymentRoute:t,nonce:r,wSolEscrowAccountKeypair:n,deadline:i});case"routeOrcaTwoHopSwap":return await(async({paymentRoute:t,nonce:e,wSolSenderAccountKeypair:n,deadline:r})=>{const i=new Xs(await cC({paymentRoute:t})),o=t.fee?new Xs(await hC({paymentRoute:t})):i,a=await fC({paymentRoute:t}),s=new Xs(await nC({paymentRoute:t})),u=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),c=n?n.publicKey:new Xs(await uC({paymentRoute:t})),l=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),op("amountSpecifiedIsInput"),op("aToBOne"),op("aToBTwo"),fp("sqrtPriceLimitOne"),fp("sqrtPriceLimitTwo")]).decode(u.data),h=[{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},u.keys[2],u.keys[3],{pubkey:c,isSigner:!1,isWritable:!0},u.keys[5],u.keys[7],{pubkey:s,isSigner:!1,isWritable:!0},u.keys[9],u.keys[11],u.keys[12],u.keys[13],u.keys[14],u.keys[15],u.keys[16],u.keys[17],u.keys[18],u.keys[19],{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],d=np.alloc(Ij.solana.api.routeOrcaTwoHopSwap.layout.span);return Ij.solana.api.routeOrcaTwoHopSwap.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaTwoHopSwap.anchorDiscriminator,nonce:e,amountIn:l.amount,amountSpecifiedIsInput:l.amountSpecifiedIsInput,aToBOne:l.aToBOne,aToBTwo:l.aToBTwo,sqrtPriceLimitOne:l.sqrtPriceLimitOne,sqrtPriceLimitTwo:l.sqrtPriceLimitTwo,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},d),new gu({keys:h,programId:new Xs(Ij.solana.address),data:d})})({paymentRoute:t,nonce:r,wSolSenderAccountKeypair:e,deadline:i});case"routeOrcaTwoHopSwapSolOut":return await(async({paymentRoute:t,nonce:e,wSolEscrowAccountKeypair:n,deadline:r})=>{const i=new Xs(await nC({paymentRoute:t})),o=(await t.exchangeRoutes[0].getTransaction({account:t.fromAddress})).instructions.find((t=>t.programId.toString()===Ij.solana.ammProgram)),a=new Xs(await uC({paymentRoute:t})),s=pp([gp("anchorDiscriminator"),gp("amount"),gp("otherAmountThreshold"),op("amountSpecifiedIsInput"),op("aToBOne"),op("aToBTwo"),fp("sqrtPriceLimitOne"),fp("sqrtPriceLimitTwo")]).decode(o.data),u=[{pubkey:Yu.programId,isSigner:!1,isWritable:!1},{pubkey:new Xs(Tk.solana.TOKEN_PROGRAM),isSigner:!1,isWritable:!1},{pubkey:new Xs(Ij.solana.ammProgram),isSigner:!1,isWritable:!1},{pubkey:new Xs(t.fromAddress),isSigner:!0,isWritable:!0},{pubkey:await oC({from:t.fromAddress}),isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},o.keys[2],o.keys[3],o.keys[5],o.keys[7],{pubkey:i,isSigner:!1,isWritable:!0},o.keys[9],o.keys[11],o.keys[12],o.keys[13],o.keys[14],o.keys[15],o.keys[16],o.keys[17],o.keys[18],o.keys[19],{pubkey:n.publicKey,isSigner:!1,isWritable:!0},{pubkey:await pC(),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.toAddress),isSigner:!1,isWritable:!0},{pubkey:new Xs(t.fee?t.fee.receiver:t.toAddress),isSigner:!1,isWritable:!0}],c=np.alloc(Ij.solana.api.routeOrcaTwoHopSwapSolOut.layout.span);return Ij.solana.api.routeOrcaTwoHopSwapSolOut.layout.encode({anchorDiscriminator:Ij.solana.api.routeOrcaTwoHopSwapSolOut.anchorDiscriminator,nonce:e,amountIn:s.amount,amountSpecifiedIsInput:s.amountSpecifiedIsInput,aToBOne:s.aToBOne,aToBTwo:s.aToBTwo,sqrtPriceLimitOne:s.sqrtPriceLimitOne,sqrtPriceLimitTwo:s.sqrtPriceLimitTwo,paymentAmount:new rp(t.toAmount.toString()),feeAmount:new rp((t.feeAmount||"0").toString()),deadline:new rp(r)},c),new gu({keys:u,programId:new Xs(Ij.solana.address),data:c})})({paymentRoute:t,nonce:r,wSolEscrowAccountKeypair:n,deadline:i})}},wC=async({paymentRoute:t})=>{const e=await aC({from:t.fromAddress}),n=Math.ceil((new Date).getTime()/1e3)+1800,r=(t=>t?t.nonce:new rp("0"))(e),i=await(async({paymentRoute:t})=>{if(t.fromToken.address===Vp.solana.currency.address&&t.toToken.address!==Vp.solana.currency.address)return Zl.generate()})({paymentRoute:t}),o=await(async({paymentRoute:t})=>{if(t.fromToken.address!==Vp.solana.currency.address&&t.toToken.address===Vp.solana.currency.address)return Zl.generate()})({paymentRoute:t});let a=(await Promise.all([sC({from:t.fromAddress}),$j({paymentRoute:t,wSolSenderAccountKeypair:i}),rC({paymentRoute:t}),lC({paymentRoute:t}),dC({paymentRoute:t}),yC({paymentRoute:t}),tC({paymentRoute:t,wSolEscrowAccountKeypair:o}),mC({paymentRoute:t}),vC({paymentRoute:t,wSolSenderAccountKeypair:i,wSolEscrowAccountKeypair:o,nonce:r,deadline:n}),iC({paymentRoute:t,wSolSenderAccountKeypair:i})])).filter(Boolean).flat();const s={blockchain:t.blockchain,instructions:a,signers:[i,o].filter(Boolean),alts:[Ij.solana.alt]};return s.deadline=n,s.nonce=r.toString(),s},bC=[{inputs:[{internalType:"address",name:"_PERMIT2",type:"address"},{internalType:"address",name:"_FORWARDER",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"ExchangeCallFailed",type:"error"},{inputs:[],name:"ExchangeCallMissing",type:"error"},{inputs:[],name:"ExchangeNotApproved",type:"error"},{inputs:[],name:"ForwardingPaymentFailed",type:"error"},{inputs:[],name:"InsufficientBalanceInAfterPayment",type:"error"},{inputs:[],name:"InsufficientBalanceOutAfterPayment",type:"error"},{inputs:[],name:"NativeFeePaymentFailed",type:"error"},{inputs:[],name:"NativePaymentFailed",type:"error"},{inputs:[],name:"PaymentDeadlineReached",type:"error"},{inputs:[],name:"PaymentToZeroAddressNotAllowed",type:"error"},{inputs:[],name:"WrongAmountPaidIn",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"exchange",type:"address"}],name:"Disabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"exchange",type:"address"}],name:"Enabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"InternalTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{inputs:[],name:"FORWARDER",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"PERMIT2",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"acceptOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"exchange",type:"address"},{internalType:"bool",name:"enabled",type:"bool"}],name:"enable",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"exchanges",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"bool",name:"permit2",type:"bool"},{internalType:"uint256",name:"paymentAmount",type:"uint256"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"address",name:"tokenInAddress",type:"address"},{internalType:"address",name:"exchangeAddress",type:"address"},{internalType:"address",name:"tokenOutAddress",type:"address"},{internalType:"address",name:"paymentReceiverAddress",type:"address"},{internalType:"address",name:"feeReceiverAddress",type:"address"},{internalType:"uint8",name:"exchangeType",type:"uint8"},{internalType:"uint8",name:"receiverType",type:"uint8"},{internalType:"bytes",name:"exchangeCallData",type:"bytes"},{internalType:"bytes",name:"receiverCallData",type:"bytes"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct IDePayRouterV2.Payment",name:"payment",type:"tuple"}],name:"pay",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"bool",name:"permit2",type:"bool"},{internalType:"uint256",name:"paymentAmount",type:"uint256"},{internalType:"uint256",name:"feeAmount",type:"uint256"},{internalType:"address",name:"tokenInAddress",type:"address"},{internalType:"address",name:"exchangeAddress",type:"address"},{internalType:"address",name:"tokenOutAddress",type:"address"},{internalType:"address",name:"paymentReceiverAddress",type:"address"},{internalType:"address",name:"feeReceiverAddress",type:"address"},{internalType:"uint8",name:"exchangeType",type:"uint8"},{internalType:"uint8",name:"receiverType",type:"uint8"},{internalType:"bytes",name:"exchangeCallData",type:"bytes"},{internalType:"bytes",name:"receiverCallData",type:"bytes"},{internalType:"uint256",name:"deadline",type:"uint256"}],internalType:"struct IDePayRouterV2.Payment",name:"payment",type:"tuple"},{components:[{components:[{internalType:"address",name:"token",type:"address"},{internalType:"uint160",name:"amount",type:"uint160"},{internalType:"uint48",name:"expiration",type:"uint48"},{internalType:"uint48",name:"nonce",type:"uint48"}],internalType:"struct IPermit2.PermitDetails",name:"details",type:"tuple"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"sigDeadline",type:"uint256"}],internalType:"struct IPermit2.PermitSingle",name:"permitSingle",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"pay",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"payable",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdraw",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var MC={ethereum:{address:"0x6466F27B169C908Ba8174d80aEfa7173CbC3D0c7",api:bC},bsc:{address:"0x7ea09401db4692a8AEF4111b75bD32AE758f552A",api:bC},polygon:{address:"0x50CFAB577623B1359602E11514a9482B061A941e",api:bC},fantom:{address:"0xFee05C41195985909DDfc9127Db1f94559c46db3",api:bC},avalanche:{address:"0xFee05C41195985909DDfc9127Db1f94559c46db3",api:bC},gnosis:{address:"0xFee05C41195985909DDfc9127Db1f94559c46db3",api:bC},arbitrum:{address:"0xA1cfbeeF344A52e18f748fd6a126f9426A40fbc7",api:bC},optimism:{address:"0x8698E529E9867eEbcC68b4792daC627cd8870736",api:bC},base:{address:"0x8B127D169D232D5F3ebE1C3D06CE343FD7C1AA11",api:bC}},AC={...MC,...Ij},EC="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:{},NC="object"==typeof EC&&EC&&EC.Object===Object&&EC,TC="object"==typeof self&&self&&self.Object===Object&&self,IC=(NC||TC||Function("return this")()).Symbol;IC&&IC.toStringTag,IC&&IC.toStringTag;const kC=t=>{switch(t){case"solana":return 125e-6;case"gnosis":return.009;case"polygon":return.01;case"fantom":return.05;case"avalanche":return.1;case"bsc":return.2;case"base":return.25;case"arbitrum":return.3;case"optimism":return.4;case"ethereum":return 10;default:return 100}},LC={arbitrum:{[Vp.arbitrum.wrapped.address]:"0x7E655088214d0657251A51aDccE9109CFd23B5B5"},avalanche:{[Vp.avalanche.wrapped.address]:"0x2d0a6275eaDa0d03226919ce6D93661E589B2d59"},base:{[Vp.base.wrapped.address]:"0xD1711710843B125a6a01FfDF9b95fDc3064BeF7A"},bsc:{[Vp.bsc.wrapped.address]:"0xeEb80d14abfB058AA78DE38813fe705c3e3b243E"},ethereum:{[Vp.ethereum.wrapped.address]:"0x298f4980525594b3b982779cf74ba76819708D43"},fantom:{[Vp.fantom.wrapped.address]:"0x2d0a6275eaDa0d03226919ce6D93661E589B2d59"},gnosis:{[Vp.gnosis.wrapped.address]:"0x2d0a6275eaDa0d03226919ce6D93661E589B2d59"},optimism:{[Vp.optimism.wrapped.address]:"0x69594057e2C0224deb1180c7a5Df9ec9d5B611B5"},polygon:{[Vp.polygon.wrapped.address]:"0xaE59C9d3E055BdFAa583E169aA5Ebe395689476a"},solana:{}},xC=({paymentRoute:t})=>t.directTransfer&&!t.fee?t.toToken.address==Vp[t.blockchain].currency.address?t.toAddress:t.toToken.address:MC[t.blockchain].address,SC=({paymentRoute:t})=>t.directTransfer&&!t.fee?t.toToken.address==Vp[t.blockchain].currency.address?void 0:Tk[t.blockchain].DEFAULT:MC[t.blockchain].api,jC=({paymentRoute:t})=>t.directTransfer&&!t.fee?t.toToken.address==Vp[t.blockchain].currency.address?void 0:"transfer":"pay",CC=async({paymentRoute:t})=>{if(t.directTransfer&&!t.fee)return t.toToken.address==Vp[t.blockchain].currency.address?void 0:[t.toAddress,t.toAmount];{const e=Math.ceil(new Date/1e3)+3600,n=t.exchangeRoutes[0],r=(({exchangeRoute:t,blockchain:e})=>void 0===t?0:"uniswap_v3"===t.exchange.name||t.exchange[e].router.address===Vp[e].wrapped.address?2:1)({exchangeRoute:n,blockchain:t.blockchain}),i=n?await n.getTransaction({account:MC[t.blockchain].address,inputTokenPushed:2===r}):void 0,o=i?(({exchangeTransaction:t})=>{const e=new _M(t.to,t.api),n=t.method,r=t.params;let i,o,a;return o=e.interface.fragments.find((t=>!(t.name!=n||t.inputs&&r&&"object"==typeof r&&t.inputs.length!=Object.keys(r).length))),1===o.inputs.length&&"tuple"===o.inputs[0].type?(i=n,a=[r[o.inputs[0].name]]):(i=`${n}(${o.inputs.map((t=>t.type)).join(",")})`,a=o.inputs.map((t=>{if("tuple"===t.type){let e={};return t.components.forEach(((n,i)=>{e[n.name]=r[t.name][i]})),i=n,e}return r[t.name]}))),e.interface.encodeFunctionData(i,a)})({exchangeTransaction:i}):Vp[t.blockchain].zero;let a=Vp[t.blockchain].zero;return n&&(a="bsc"===t.blockchain&&"pancakeswap_v3"===n.exchange.name&&t.toToken.address===Vp[t.blockchain].currency.address?n.exchange[t.blockchain].smartRouter.address:LC[i.blockchain][n.exchange[t.blockchain].router.address]||n.exchange[t.blockchain].router.address),{payment:{amountIn:t.fromAmount,paymentAmount:t.toAmount,feeAmount:t.feeAmount||0,tokenInAddress:t.fromToken.address,exchangeAddress:a,tokenOutAddress:t.toToken.address,paymentReceiverAddress:t.toAddress,feeReceiverAddress:t.fee?t.fee.receiver:Vp[t.blockchain].zero,exchangeType:r,receiverType:0,exchangeCallData:o,receiverCallData:Vp[t.blockchain].zero,deadline:e}}}},DC=({paymentRoute:t})=>t.fromToken.address==Vp[t.blockchain].currency.address?t.directTransfer?t.toAmount.toString():t.fromAmount.toString():Ff.from("0").toString();let OC=["ethereum","bsc","polygon","solana","fantom","arbitrum","avalanche","gnosis","optimism","base"];OC.evm=["ethereum","bsc","polygon","fantom","arbitrum","avalanche","gnosis","optimism","base"],OC.solana=["solana"];const zC=({paymentRoute:t,fee:e})=>{if(OC.evm.includes(t.blockchain))return(async({paymentRoute:t})=>({blockchain:t.blockchain,to:xC({paymentRoute:t}),api:SC({paymentRoute:t}),method:jC({paymentRoute:t}),params:await CC({paymentRoute:t}),value:DC({paymentRoute:t})}))({paymentRoute:t,fee:e});if(OC.solana.includes(t.blockchain))return wC({paymentRoute:t,fee:e});throw"Blockchain not supported!"};function _C(t){let e,n=t[0],r=1;for(;rn.call(e,...t))),e=void 0)}return n}class PC{constructor({blockchain:t,fromAddress:e,fromToken:n,fromAmount:r,fromDecimals:i,fromBalance:o,toToken:a,toAmount:s,toDecimals:u,toAddress:c,fee:l,feeAmount:h,exchangeRoutes:d,approvalRequired:p,approvalTransaction:f,directTransfer:m}){this.blockchain=t,this.fromAddress=e,this.fromToken=n,this.fromAmount=_C([r||s,"optionalAccess",t=>t.toString,"call",t=>t()]),this.fromDecimals=i,this.fromBalance=o,this.toToken=a,this.toAmount=_C([s,"optionalAccess",t=>t.toString,"call",t=>t()]),this.toDecimals=u,this.toAddress=c,this.fee=l,this.feeAmount=h,this.exchangeRoutes=d||[],this.approvalRequired=p,this.approvalTransaction=f,this.directTransfer=m,this.getTransaction=async()=>await zC({paymentRoute:this})}}function BC({assets:t,blacklist:e,accept:n,from:r}){return Promise.resolve(UC({assets:t,blacklist:e})).then((t=>function({assets:t,accept:e,from:n}){return Promise.all(t.map((async t=>{let r=e.filter((e=>e.blockchain==t.blockchain)),i=new Tk(t);return Promise.all(r.map((async e=>{if(e.token&&e.amount){let r=e.blockchain,o=t.decimals,a=new Tk({blockchain:r,address:e.token}),s=await a.decimals(),u=(await a.BigNumber(e.amount)).toString();return new PC({blockchain:r,fromToken:i,fromDecimals:o,toToken:a,toAmount:u,toDecimals:s,fromBalance:t.balance,fromAddress:n[e.blockchain],toAddress:e.toAddress,fee:e.fee})}if(e.fromToken&&e.fromAmount&&i.address.toLowerCase()==e.fromToken.toLowerCase()){let r=e.blockchain,o=(await i.BigNumber(e.fromAmount)).toString(),a=t.decimals,s=new Tk({blockchain:r,address:e.toToken}),u=await s.decimals();return new PC({blockchain:r,fromToken:i,fromDecimals:a,fromAmount:o,toToken:s,toDecimals:u,fromBalance:t.balance,fromAddress:n[e.blockchain],toAddress:e.toAddress,fee:e.fee})}})))}))).then((t=>t.flat().filter((t=>t))))}({assets:t,accept:n,from:r}))).then((t=>VC({routes:t}))).then(WC).then(QC).then(YC).then((t=>ZC({routes:t}))).then(FC).then(XC).then(JC).then((t=>t.map((t=>new PC(t)))))}function RC({accept:t,from:e,whitelist:n,blacklist:r,drip:i}){if(t.some((t=>t&&t.fee&&"string"==typeof t.fee.amount&&t.fee.amount.match(/\.\d\d+\%/))))throw"Only up to 1 decimal is supported for fee amounts!";return new Promise((async(o,a)=>{let s=[],u=[];if(n)for(const t in n)(n[t]||[]).forEach((e=>{u.push(t),s.push({blockchain:t,address:e})}));else t.forEach((t=>{u.push(t.blockchain),s.push({blockchain:t.blockchain,address:t.token||t.toToken})}));[...new Set(u)].forEach((t=>{s.find((e=>e.blockchain===t&&e.address===Vp[t].currency.address))||s.push({blockchain:t,address:Vp[t].currency.address})})),s.sort(((t,e)=>kC(t.blockchain)[t.blockchain,t.address.toLowerCase()].join(""))),p=()=>Math.ceil(new Date),f=p();setTimeout((()=>{l.forEach((t=>m(RC,!1)))}),3e3);const m=(t,e=!0)=>{try{const n={blockchain:t.blockchain,address:t.fromToken.address},r=[n.blockchain,n.address.toLowerCase()].join(""),o=p()-f>3e3;if(h.indexOf(r)>-1)return;if(d.indexOf(r)===c){if(h.push(r),i(t),c+=1,!e)return;l.forEach((e=>m(t,!1)))}else c>=d.length||o?(-1===d.indexOf(r)||c>=d.length||o)&&(h.push(r),i(t)):l.find((t=>t.blockchain===n.blockchain&&t.address.toLowerCase()===n.address.toLowerCase()))||(l.push(n),l.sort(((t,e)=>((t,e,n)=>{if(!t||0===t.length)return 0;let r=t.indexOf([e.blockchain,e.address.toLowerCase()].join("")),i=t.indexOf([n.blockchain,n.address.toLowerCase()].join(""));return-1!==r&&-1===i?-1:-1!==i&&-1===r?1:r{BC({assets:[n],blacklist:r,accept:t,from:e}).then((t=>{_C([t,"optionalAccess",t=>t.length])&&m(t[0])}))}:void 0});let g=await BC({assets:y,blacklist:r,accept:t,from:e})||[];g.assets=y,o(g)}))}let UC=({assets:t,blacklist:e})=>null==e?t:t.filter((t=>null==e[t.blockchain]||!e[t.blockchain].find((e=>e.toLowerCase()==t.address.toLowerCase())))),WC=async t=>await Promise.all(t.map((t=>t.directTransfer?[]:t.toToken&&t.toAmount?Tj.route({blockchain:t.blockchain,tokenIn:t.fromToken.address,tokenOut:t.toToken.address,amountOutMin:t.toAmount,fromAddress:t.fromAddress,toAddress:t.toAddress}):t.fromToken&&t.fromAmount?Tj.route({blockchain:t.blockchain,tokenIn:t.fromToken.address,tokenOut:t.toToken.address,amountIn:t.fromAmount,fromAddress:t.fromAddress,toAddress:t.toAddress}):void 0))).then((e=>t.map(((t,n)=>(t.exchangeRoutes=e[n],t))))),QC=t=>t.filter((t=>0!=t.exchangeRoutes.length||t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase())),YC=async t=>t.filter((t=>t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase()?Ff.from(t.fromBalance).gte(Ff.from(t.toAmount)):t.fromAmount&&t.toAmount?Ff.from(t.fromBalance).gte(Ff.from(t.exchangeRoutes[0].amountInMax)):t.exchangeRoutes[0]&&t.exchangeRoutes[0].amountIn?Ff.from(t.fromBalance).gte(Ff.from(t.exchangeRoutes[0].amountIn)):void 0)),FC=t=>Promise.all(t.map((t=>"solana"===t.blockchain?Promise.resolve(Vp.solana.maxInt):t.fromToken.allowance(t.fromAddress,AC[t.blockchain].address).catch((()=>{}))))).then((e=>(t.map(((n,r)=>{void 0===e[r]||n.directTransfer||n.fromToken.address.toLowerCase()==Vp[n.blockchain].currency.address.toLowerCase()||"solana"===n.blockchain?t[r].approvalRequired=!1:(t[r].approvalRequired=Ff.from(n.fromAmount).gte(Ff.from(e[r])),t[r].approvalRequired&&(t[r].approvalTransaction={blockchain:n.blockchain,to:n.fromToken.address,api:Tk[n.blockchain].DEFAULT,method:"approve",params:[AC[n.blockchain].address,Vp[n.blockchain].maxInt]}))})),t))),VC=({routes:t})=>t.map((t=>(OC.evm.includes(t.blockchain)?t.directTransfer=t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase()&&null==t.fee:"solana"===t.blockchain&&(t.directTransfer=t.fromToken.address.toLowerCase()==t.toToken.address.toLowerCase()),t))),HC=({paymentRoute:t,exchangeRoute:e})=>{let n,r,i;return e?(e&&e.exchange.wrapper,n=e.amountIn.toString(),r=GC({amount:e.amountOutMin.toString(),paymentRoute:t})):(n=t.fromAmount,r=GC({amount:t.fromAmount,paymentRoute:t})),t.fee&&(i=qC({paymentRoute:t})),{fromAmount:n,toAmount:r,feeAmount:i}},GC=({amount:t,paymentRoute:e})=>{if(e.fee){let n=qC({paymentRoute:e});return Ff.from(t).sub(n).toString()}return t},qC=({paymentRoute:t})=>{if("string"==typeof t.fee.amount&&t.fee.amount.match("%"))return Ff.from(t.toAmount).mul(10*parseFloat(t.fee.amount)).div(1e3).toString();if("string"==typeof t.fee.amount)return t.fee.amount;if("number"==typeof t.fee.amount)return cE(t.fee.amount.toString(),t.toDecimals).toString();throw"Unknown fee amount type!"},ZC=({routes:t})=>t.map((t=>{if(OC.evm.includes(t.blockchain))if(t.directTransfer&&!t.fee)t.fromAmount=t.toAmount;else{let{fromAmount:e,toAmount:n,feeAmount:r}=HC({paymentRoute:t,exchangeRoute:t.exchangeRoutes[0]});t.fromAmount=e,t.toAmount=n,t.fee&&(t.feeAmount=r)}else if(OC.solana.includes(t.blockchain)){let{fromAmount:e,toAmount:n,feeAmount:r}=HC({paymentRoute:t,exchangeRoute:t.exchangeRoutes[0]});t.fromAmount=e,t.toAmount=n,t.fee&&(t.feeAmount=r)}return t})),JC=t=>t.filter(((e,n)=>null==t.find(((t,r)=>e.fromToken.address==t.fromToken.address&&(e.fromToken.blockchain==t.fromToken.blockchain&&(!(!t.directTransfer||e.directTransfer)||(!(!Ff.from(t.fromAmount).lt(Ff.from(e.fromAmount))||e.directTransfer)||(t.fromAmount==e.fromAmount&&r{let e=-1;return t.sort(((t,n)=>kC(t.fromToken.blockchain) arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","/*#if _EVM\n\nlet supported = ['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'base', 'avalanche', 'gnosis', 'fantom']\nsupported.evm = ['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'base', 'avalanche', 'gnosis', 'fantom']\nsupported.svm = []\nsupported.solana = []\n\n/*#elif _SOLANA\n\nlet supported = ['solana']\nsupported.evm = []\nsupported.svm = ['solana']\nsupported.solana = ['solana']\n\n//#else */\n\nlet supported = ['ethereum', 'bsc', 'polygon', 'solana', 'arbitrum', 'optimism', 'base', 'avalanche', 'gnosis', 'fantom']\nsupported.evm = ['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'base', 'avalanche', 'gnosis', 'fantom']\nsupported.svm = ['solana']\nsupported.solana = ['solana']\n\n//#endif\n\nexport { supported }\n","/*#if _EVM\n\nimport { wallets } from '@depay/web3-wallets-evm'\n\n/*#elif _SOLANA\n\nimport { wallets } from '@depay/web3-wallets-solana'\n\n//#else */\n\nimport { wallets } from '@depay/web3-wallets'\n\n//#endif\n\nimport Blockchains from '@depay/web3-blockchains'\nimport { supported } from '../blockchains'\n\nexport default [\n {\n \"name\": \"Coinbase\",\n \"extensions\": [\"CoinbaseEVM\", \"CoinbaseSVM\"],\n \"desktop\": { \"qr\": \"WalletLink\" },\n \"mobile\": { \n \"ios\": { \"native\": \"cbwallet://dapp\", \"universal\": \"https://go.cb-w.com/dapp\", \"open\": ()=>`cbwallet://dapp?url=${encodeURIComponent(window.location.toString())}` },\n \"android\": { \"native\": \"cbwallet://dapp\", \"universal\": \"https://go.cb-w.com/dapp\", \"open\": ()=>`https://go.cb-w.com/dapp?cb_url=${encodeURIComponent(window.location.toString())}` },\n },\n \"logo\": wallets.CoinbaseEVM?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"MetaMask\",\n \"extension\": \"MetaMask\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"metamask:\", \"universal\": \"https://metamask.app.link\", \"qr\": \"WalletConnectV1\", \"connect\":\"WalletConnectV2\" },\n \"android\": { \"native\": \"metamask:\", \"universal\": \"https://metamask.app.link\", \"qr\": \"WalletConnectV1\", \"connect\":\"WalletConnectV2\" },\n },\n \"logo\": wallets.MetaMask?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Phantom\",\n \"extensions\": [\"PhantomSVM\", \"PhantomEVM\"],\n \"desktop\": {\n \"solanaPay\": true,\n \"qr\": ()=>`phantom://browse/${encodeURIComponent(window.location.toString())}?ref=${encodeURIComponent(window.location.origin.toString())}`\n },\n \"mobile\": {\n \"ios\": {\n \"native\": \"phantom:\",\n \"open\": ()=>`https://phantom.app/ul/browse/${encodeURIComponent(window.location.toString())}?ref=${encodeURIComponent(window.location.origin.toString())}`,\n \"qr\": ()=>`phantom://browse/${encodeURIComponent(window.location.toString())}?ref=${encodeURIComponent(window.location.origin.toString())}`,\n \"solanaPay\": true,\n },\n \"android\": {\n \"native\": \"phantom:\",\n \"connect\": \"SolanaMobileWalletAdapter\",\n \"qr\": ()=>`phantom://browse/${encodeURIComponent(window.location.toString())}?ref=${encodeURIComponent(window.location.origin.toString())}`,\n \"solanaPay\": true,\n },\n },\n \"logo\": wallets.PhantomSVM?.info?.logo,\n \"blockchains\": [...supported.solana]\n },\n {\n \"name\": \"Trust Wallet\",\n \"extensions\": [\"TrustEVM\", \"TrustSVM\"],\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"trust:\", \"universal\": \"https://link.trustwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"trust:\", \"universal\": \"https://link.trustwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": wallets.TrustEVM?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Binance Wallet\",\n \"extension\": \"Binance\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bnc://app.binance.com/cedefi/\", \"universal\": \"https://app.binance.com/cedefi\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bnc://app.binance.com/cedefi/\", \"universal\": \"https://app.binance.com/cedefi\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": wallets.Binance?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Crypto.com | DeFi Wallet\",\n \"extension\": \"CryptoCom\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"dfw://\", \"universal\": \"https://wallet.crypto.com\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"dfw://\", \"universal\": \"https://wallet.crypto.com\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": wallets.CryptoCom?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Coin98\",\n \"extensions\": [\"Coin98EVM\", \"Coin98SVM\"],\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"coin98:\", \"universal\": \"https://coin98.services\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"coin98:\", \"universal\": \"https://coin98.services\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": wallets.Coin98EVM?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Brave\",\n \"extension\": \"Brave\",\n \"logo\": wallets.Brave?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Rainbow\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"rainbow:\", \"universal\": \"https://rnbwapp.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"rainbow:\", \"universal\": \"https://rnbwapp.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/rainbow.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Timeless Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"timeless-wallet:\", \"universal\": \"https://timelesswallet.xyz\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"timeless-wallet:\", \"universal\": \"https://timelesswallet.xyz\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/timeless.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Uniswap Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"uniswap:\", \"universal\": \"https://uniswap.org/app\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"uniswap:\", \"universal\": \"https://uniswap.org/app\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/uniswap_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Safe\",\n \"desktop\": { \"qr\": \"WalletConnectV1\", \"copyLink\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"safe\", \"universal\": \"https://app.safe.global\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"safe\", \"universal\": \"https://app.safe.global\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/safe.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Rabby\",\n \"extension\": \"Rabby\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": wallets.Rabby?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Backpack\",\n \"extension\": \"Backpack\",\n \"desktop\": {\n \"qr\": \"SolanaPay\",\n },\n \"mobile\": {\n \"ios\": {\n \"qr\": \"SolanaPay\",\n },\n \"android\": {\n \"qr\": \"SolanaPay\",\n },\n },\n \"logo\": wallets.Backpack?.info?.logo,\n \"blockchains\": [...supported.solana]\n },\n {\n \"name\": \"Glow\",\n \"extension\": \"Glow\",\n \"desktop\": {\n \"qr\": ()=>window.location.toString(),\n \"solanaPay\": \"true\",\n },\n \"mobile\": {\n \"ios\": {\n \"qr\": ()=>window.location.toString(),\n \"solanaPay\": \"true\",\n },\n \"android\": {\n \"connect\": \"SolanaMobileWalletAdapter\",\n \"qr\": ()=>window.location.toString(),\n \"solanaPay\": \"true\",\n },\n },\n \"logo\": wallets.Glow?.info?.logo,\n \"blockchains\": [...supported.solana]\n },\n {\n \"name\": \"Solflare\",\n \"extension\": \"Solflare\",\n \"desktop\": {\n \"solanaPay\": true,\n },\n \"mobile\": {\n \"ios\": {\n \"native\": \"solflare:\",\n \"universal\": \"https://solflare.com/ul\",\n \"open\": ()=>`https://solflare.com/ul/v1/browse/${encodeURIComponent(window.location.toString())}?ref=${window.location.origin.toString()}`,\n \"solanaPay\": true,\n },\n \"android\": {\n \"native\": \"solflare:\",\n \"universal\": \"https://solflare.com/ul\",\n \"connect\": \"SolanaMobileWalletAdapter\",\n \"solanaPay\": true,\n },\n },\n \"logo\": wallets.Solflare?.info?.logo,\n \"blockchains\": [...supported.solana]\n },\n {\n \"name\": \"imToken\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"imtokenv2:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"imtokenv2:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/imtoken.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"MEW wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"mewwallet:\" , \"universal\": \"https://mewwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"mewwallet:\" , \"universal\": \"https://mewwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/mew_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ONTO\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ontoprovider:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ontoprovider:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/onto.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Zerion\",\n \"desktop\": { \"native\": \"zerion://\", \"qr\": \"WalletConnectV1\", \"connect\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"zerion://\", \"universal\": \"https://wallet.zerion.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"zerion://\", \"universal\": \"https://wallet.zerion.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/zerion.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Spot\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"spot://\", \"universal\": \"https://spot.so\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"spot://\", \"universal\": \"https://spot.so\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/spot.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"BitGet (BitKeep)\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bitget://\", \"universal\": \"https://bkapp.vip\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"bitget://\", \"universal\": \"https://bkapp.vip\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bitget.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Unstoppable Domains\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://unstoppabledomains.com/mobile\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://unstoppabledomains.com/mobile\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/unstoppable_domains.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Omni\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"omni:\", \"universal\": \"https://links.omni.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"omni:\", \"universal\": \"https://links.omni.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/omni.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"KEYRING PRO\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"keyring:\", \"universal\": \"https://keyring.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"keyring:\", \"universal\": \"https://keyring.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/keyring_pro.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"TP Wallet (TokenPocket)\",\n \"extension\": \"TokenPocket\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"tpoutside:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"tpoutside:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/token_pocket.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"BitPay\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bitpay:\", \"universal\": \"https://link.bitpay.com/wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bitpay:\", \"universal\": \"https://link.bitpay.com/wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bitpay.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"MathWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"mathwallet:\", \"universal\": \"https://www.mathwallet.org\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"mathwallet:\", \"universal\": \"https://www.mathwallet.org\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/math_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Ledger Live\",\n \"desktop\": { \"native\": \"ledgerlive:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\", \"copyLink\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ledgerlive:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"ledgerlive:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/ledger_live.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"1inch Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"oneinch://\", \"universal\": \"https://wallet.1inch.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"oneinch://\", \"universal\": \"https://wallet.1inch.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/1inch_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"iToken Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"huobiwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"huobiwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/i_token_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Huddln\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"huddln:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"huddln:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/huddln.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Eidoo\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"eidoo:\", \"universal\": \"https://eidoo.io/crypto-wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"eidoo:\", \"universal\": \"https://eidoo.io/crypto-wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/eidoo.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"CoolWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"coolwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"coolwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/cool_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Unstoppable Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"unstoppable.money://\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"universal\": \"unstoppable.money://\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/unstoppable.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"AlphaWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"awallet:\", \"universal\": \"https://aw.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"awallet:\", \"universal\": \"https://aw.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/alpha_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Pillar\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"pillarwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"pillarwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/pillar.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"D'CENT Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"dcent:\", \"universal\": \"https://link.dcentwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"dcent:\", \"universal\": \"https://link.dcentwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/dcent.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ZelCore\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"zel:\", \"universal\": \"https://link.zel.network\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"zel:\", \"universal\": \"https://link.zel.network\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/zel_core.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Nash\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"nash:\", \"universal\": \"https://nash.io/walletconnect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"nash:\", \"universal\": \"https://nash.io/walletconnect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/nash.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Coinomi\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://coinomi.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://coinomi.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/coinomi.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"CYBAVO Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"cybavowallet:\", \"universal\": \"https://cdn.cybavo.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"cybavowallet:\", \"universal\": \"https://cdn.cybavo.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/cybavo.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Tokenary\",\n \"desktop\": { \"native\": \"tokenary:\", \"universal\": \"https://tokenary.io\", \"connect\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/tokenary.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Torus\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/torus.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"SafePal\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"safepalwallet\", \"universal\": \"https://link.safepal.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"safepalwallet\", \"universal\": \"https://link.safepal.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/safepal.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Infinity Wallet\",\n \"desktop\": { \"native\": \"infinity:\", \"universal\": \"https://infinitywallet.io/\", \"connect\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/infinity_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bridge Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bridgewallet:\", \"universal\": \"https://bridge.mtpelerin.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bridgewallet:\", \"universal\": \"https://bridge.mtpelerin.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/mtperlin.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"SparkPoint\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"sparkpoint:\", \"universal\": \"https://sparkpoint.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"sparkpoint:\", \"universal\": \"https://sparkpoint.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/sparkpoint.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"PEAKDEFI Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"peakdefiwallet:\", \"universal\": \"https://peakdefi.com/download\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"peakdefiwallet:\", \"universal\": \"https://peakdefi.com/download\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/peakdefi.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"AT.Wallet\",\n \"desktop\": { \"native\": \"atwallet:\", \"qr\": \"WalletConnectV1\", \"connect\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"atwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"atwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/atwallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Ellipal\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ellipal:\", \"universal\": \"https://www.ellipal.com/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ellipal:\", \"universal\": \"https://www.ellipal.com/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/ellipal.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Aktionariat\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"aktionariat:\", \"universal\": \"https://app.aktionariat.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"aktionariat:\", \"universal\": \"https://app.aktionariat.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/aktionariat.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Talken Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"talken-wallet:\", \"universal\": \"https://talken.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"talken-wallet:\", \"universal\": \"https://talken.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/talken.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"KyberSwap\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"kyberswap:\", \"universal\": \"https://kyberswapnew.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"kyberswap:\", \"universal\": \"https://kyberswapnew.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/kyberswap.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Tongue Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"tongue:\", \"universal\": \"https://www.tongue.fi\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"tongue:\", \"universal\": \"https://www.tongue.fi\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/tongue.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"RWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"rwallet:\", \"universal\": \"https://www.rwallet.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"rwallet:\", \"universal\": \"https://www.rwallet.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/rwallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"O3Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"o3wallet:\", \"universal\": \"https://o3.network\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"o3wallet:\", \"universal\": \"https://o3.network\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/o3wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"HashKey Me\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"hashme:\", \"universal\": \"https://me.hashkey.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"hashme:\", \"universal\": \"https://me.hashkey.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/hashkeyme.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Guarda Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/guarda.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Defiant\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"defiantapp:\", \"universal\": \"https://defiantapp.tech\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"defiantapp:\", \"universal\": \"https://defiantapp.tech\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/defiant.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Valora\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"celo://wallet\", \"universal\": \"https://valoraapp.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"celo://wallet\", \"universal\": \"https://valoraapp.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/valora.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Celo Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"celowallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"celowallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/celo.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Elastos Essentials\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"essentials:\", \"universal\": \"https://essentials.elastos.net\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"essentials:\", \"universal\": \"https://essentials.elastos.net\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/elastos_essentials.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Stasis\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"stasis:\", \"universal\": \"https://app.stasis.net\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"stasis:\", \"universal\": \"https://app.stasis.net\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/stasis.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"JulWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"julwallet:\", \"universal\": \"https://justliquidity.org\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"julwallet:\", \"universal\": \"https://justliquidity.org\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/julwallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bitpie\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bitpie:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bitpie:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bitpie.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Minerva Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"minerva:\", \"universal\": \"https://minerva.digital\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"minerva:\", \"universal\": \"https://minerva.digital\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/minerva.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Tangem\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"tangem:\", \"universal\": \"https://app.tangem.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"tangem:\", \"universal\": \"https://app.tangem.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/tangem.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ioPay\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"iopay:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"iopay:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/io_pay.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Coinhub\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/coinhub.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Go Pocket\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/gopocket.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Wallet 3\",\n \"desktop\": { \"native\": \"wallet3:\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"wallet3:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"wallet3:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/wallet3.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"yiToken\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"yitoken:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"yitoken:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/yitoken.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"DID Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"abt:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"abt:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/didwallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Shinobi Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"shinobi-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"shinobi-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/shinobi_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"AirGap Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"airgap-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"airgap-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/air_gap_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"SecuX\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"secux://\", \"universal\": \"https://wsweb.secuxtech.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"secux://\", \"universal\": \"https://wsweb.secuxtech.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/secux.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Orange\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"orangewallet:\", \"universal\": \"https://link.orangewallet.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"orangewallet:\", \"universal\": \"https://link.orangewallet.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/orange.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Krystal\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"krystalWallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"krystalWallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/krystal.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Kriptomat\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"kriptomatapp://wallet-connect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"kriptomatapp://wallet-connect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/kriptomat.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Ambire Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ambire:\", \"universal\": \"https://mobile.ambire.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ambire:\", \"universal\": \"https://mobile.ambire.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/ambire_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"PayBolt\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"paybolt://Wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"paybolt://Wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/pay_bolt.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"OKX Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"okex://main\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"okex://main\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/okx_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Mask Network\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/mask_network.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Uniblow\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/uniblow.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Autonomy: Digital Art Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"autonomy-wc\", \"universal\": \"https://autonomy.io/apps/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"autonomy-wc\", \"universal\": \"https://autonomy.io/apps/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/autonomy.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Lilico\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"lilico://\", \"universal\": \"https://link.lilico.app/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"lilico://\", \"universal\": \"https://link.lilico.app/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/lilico.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Fireblocks\",\n \"desktop\": { \"universal\": \"https://console.fireblocks.io/v2\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"fireblocks-wc://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"fireblocks-wc://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/fireblocks.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"WATT ME\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"wattwallet://wallet-connect/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"wattwallet://wallet-connect/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/wattme.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Coingrig\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"coingrig://\", \"universal\": \"https://link.coingrig.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"coingrig://\", \"universal\": \"https://link.coingrig.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/coingrig.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Cryptnox Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/cryptnox_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"bobablocks\",\n \"desktop\": { \"native\": \"bobablocks://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bobablocks://\", \"universal\": \"https://app.bobablocks.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bobablocks://\", \"universal\": \"https://app.bobablocks.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bobablocks.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Plasma Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"plasmawallet:\", \"universal\": \"https://plasma-wallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"plasmawallet:\", \"universal\": \"https://plasma-wallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/plasma_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"HUMBL WALLET\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"humblwallet:\", \"universal\": \"https://wallet.search3.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"humblwallet:\", \"universal\": \"https://wallet.search3.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/humbl_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Zelus\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"zeluswallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"zeluswallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/zelus.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Earth Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"earthwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"earthwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/earth_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Boba Multisig\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/boba_multisig.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"EASY\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"co.theeasy.app://\", \"universal\": \"https://link.easy.me\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"co.theeasy.app://\", \"universal\": \"https://link.easy.me\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/easy.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ISLAMIwallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"islamiwallet://islami.com/path/\", \"universal\": \"https://islamiwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"islamiwallet://islami.com/path/\", \"universal\": \"https://islamiwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/islam_iwallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Card Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"cardwallet://\", \"universal\": \"https://wallet.cardstack.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"cardwallet://\", \"universal\": \"https://wallet.cardstack.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/card_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"GameStop Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/game_stop_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"RealT Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/real_t_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"PLTwallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"pltwallet:\", \"universal\": \"https://pltwallet.io/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"pltwallet:\", \"universal\": \"https://pltwallet.io/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/pl_twallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Avacus\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"avacus://\", \"universal\": \"https://avacus.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"avacus://\", \"universal\": \"https://avacus.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/avacus.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"StrikeX Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"strikex://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"strikex://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/strike_x_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"BCERTin wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/bcer_tin_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Edge Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"edge://\", \"universal\": \"https://deep.edge.app\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"edge://\", \"universal\": \"https://deep.edge.app\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/edge_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Freedom Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"freedom-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"freedom-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/freedom_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Assure\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"assure://\", \"universal\": \"https://www.assure.pro/Official\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"assure://\", \"universal\": \"https://www.assure.pro/Official\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/assure.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Cosmostation\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"cosmostation://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"cosmostation://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/cosmostation.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"THORWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"thorwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"thorwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/thor_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Gryfyn\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/gryfyn.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"CoinStats\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"coinstats:\", \"universal\": \"https://coinstats.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"coinstats:\", \"universal\": \"https://coinstats.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/coin_stats.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Abra Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"abra:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"abra:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/abra_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Opera Crypto Browser\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"cryptobrowser://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"cryptobrowser://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/opera_crypto_browser.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Keywallet Touch\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"keywalletTouch://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"keywalletTouch://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/keywallet_touch.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Enno Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ennowallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ennowallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/enno_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"A4 Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/a4_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bitcoin.com Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bitcoincom://\", \"universal\": \"https://wallet.bitcoin.com/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bitcoincom://\", \"universal\": \"https://wallet.bitcoin.com/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bitcoincom.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Defiant\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"defiantapp://\", \"universal\": \"https://defiantapp.tech/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"defiantapp://\", \"universal\": \"https://defiantapp.tech/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/defiant.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Chain\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/chain.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Verso\",\n \"desktop\": { \"native\": \"verso\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"verso\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"verso\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/verso.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"LOBSTR Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"lobstr://\", \"universal\": \"https://lobstr.co/uni/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"lobstr://\", \"universal\": \"https://lobstr.co/uni/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/lobstr_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bifrost Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bifrostwallet:\", \"universal\": \"https://app.bifrostwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bifrostwallet:\", \"universal\": \"https://app.bifrostwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bifrost_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Okse Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"oksewallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"oksewallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/okse_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"BRISE Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/brise_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"HyperPay\",\n \"extension\": \"HyperPay\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": wallets.HyperPay?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ATON\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/aton.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Frontier\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"frontier://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"frontier://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/frontier.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"MDAO Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ttmwalletapp://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ttmwalletapp://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/mdao_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"TTM Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ttmwalletapp:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ttmwalletapp:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/ttm_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Opto Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"opto://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"opto://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/opto_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"XFUN Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"xfunwallet://\", \"universal\": \"https://xfun.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"xfunwallet://\", \"universal\": \"https://xfun.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/xfun_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Exodus\",\n \"extensions\": [\"ExodusEVM\", \"ExodusSVM\"],\n \"desktop\": { \"native\": \"exodus://\", \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"exodus://\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"exodus://\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/exodus.jpg\",\n \"blockchains\": [...supported]\n },\n {\n \"name\": \"Uvtoken\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"UvToken://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"UvToken://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/uv_token.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"PREMA Wallet\",\n \"desktop\": { \"native\": \"premawallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"premawallet:\", \"universal\": \"https://premanft.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"premawallet:\", \"universal\": \"https://premanft.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/prema_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Shinobi-Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"shinobi-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"shinobi-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/shinobi.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ByteBank\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"hideoutWallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"hideoutWallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/byte_bank.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Ancrypto Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ancrypto://app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ancrypto://app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/ancrypto_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bee Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"beewallet.app://\", \"universal\": \"https://beewallet.app/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"beewallet.app://\", \"universal\": \"https://beewallet.app/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bee_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"LATOKEN Multichain DeFi Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"dfwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"dfwallet:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/latoken_multichain_de_fi_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"TK Finance\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"tk://\", \"universal\": \"https://trustkeys.network\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"tk://\", \"universal\": \"https://trustkeys.network\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/tk_finance.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Oxalus Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"oxalus://\", \"universal\": \"https://deeplink.oxalus.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"oxalus://\", \"universal\": \"https://deeplink.oxalus.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/oxalus_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"3S Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bhcwallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bhcwallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/3_s_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Klever Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"kleverwallet:\", \"universal\": \"https://klever.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"kleverwallet:\", \"universal\": \"https://klever.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/klever_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"OneKey\",\n \"desktop\": { \"native\": \"onekey-wallet://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"onekey-wallet://\", \"universal\": \"https://app.onekey.so/wc/connect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"onekey-wallet://\", \"universal\": \"https://app.onekey.so/wc/connect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/one_key.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"helix id\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"helix-id://helix-id.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"helix-id://helix-id.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/helix_id.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ABC Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"abc-wallet://abcwc\", \"universal\": \"https://abcwalletconnect.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"abc-wallet://abcwc\", \"universal\": \"https://abcwalletconnect.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/abcwallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"HaHa\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"haha://\", \"universal\": \"https://haha.me\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"haha://\", \"universal\": \"https://haha.me\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/haha.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Volt: DeFi\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"volt:\", \"universal\": \"https://get.voltage.finance\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"volt:\", \"universal\": \"https://get.voltage.finance\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/volt.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Wirex Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"wirexwallet://\", \"universal\": \"https://wwallet.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"wirexwallet://\", \"universal\": \"https://wwallet.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/wirex_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Robinhood Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"mobile\": { \n \"ios\": { \"native\": \"robinhood-wallet:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n \"android\": { \"native\": \"robinhood-wallet:\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV2\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/robinhood_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"RiceWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"ricewallet\", \"universal\": \"https://ricewallet.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"ricewallet\", \"universal\": \"https://ricewallet.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/rice_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"SafeMoon\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"safemoon:\", \"universal\": \"https://safemoon.net/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"safemoon:\", \"universal\": \"https://safemoon.net/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/safemoon.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"SimpleHold\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"simplehold://\", \"universal\": \"https://simplehold.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"simplehold://\", \"universal\": \"https://simplehold.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/simple_hold.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"GoldBit\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"goldbit://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"goldbit://\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/gold_bit.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ioPay\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"iopay:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"iopay:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/iopay.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bitizen\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"bitizen://wallet\", \"universal\": \"https://bitizen.org/wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bitizen://wallet\", \"universal\": \"https://bitizen.org/wallet\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bitizen.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Slavi Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"slaviwallet:\", \"universal\": \"https://www.slaviwallet.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"slaviwallet:\", \"universal\": \"https://www.slaviwallet.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/slavi_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Nufinetes\",\n \"desktop\": { \"native\": \"vimwallet:/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"vimwallet:/\", \"universal\": \"https://apple.vimworld.org\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"vimwallet:/\", \"universal\": \"https://apple.vimworld.org\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/nufinetes.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Arianee Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"com.arianee.wallet\", \"universal\": \"https://arianee.net\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"com.arianee.wallet\", \"universal\": \"https://arianee.net\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/arianee_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"NOW Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"walletnow://\", \"universal\": \"https://walletnow.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"walletnow://\", \"universal\": \"https://walletnow.app.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/now_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Arculus Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\": \"arculuswc:\", \"universal\": \"https://gw.arculus.co/app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"arculuswc:\", \"universal\": \"https://gw.arculus.co/app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/arculus_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Linen\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"native\":\"linen:\", \"universal\": \"https://linen.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\":\"linen:\", \"universal\": \"https://linen.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/linen.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Nitrogen Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://nitrogen.org/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://nitrogen.org/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/nitrogen_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ApolloX\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://app.apollox.finance\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://app.apollox.finance\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/apollo_x.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ID Pocket\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/id_pocket.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"CoinCircle\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://coincircle.com/app/walletconnect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://coincircle.com/app/walletconnect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/coin_circle.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"SahalWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/sahal_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"UPBOND Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/upbond_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Sequence Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://sequence.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://sequence.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/sequence_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"LocalTrade Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://ws.lab.localtrade.cc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://ws.lab.localtrade.cc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/local_trade_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Loopring Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/loopring_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Vision: Crypto Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": { \n \"ios\": { \"universal\": \"https://app.vision-crypto.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://app.vision-crypto.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/vision.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Ballet Crypto\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/ballet_crypto.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Pitaka\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"native\": \"pitaka://\", \"universal\": \"https://app.pitaka.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"pitaka://\", \"universal\": \"https://app.pitaka.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/pitaka.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"AbsoluteWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/absolute_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"The Parallel\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/the_parallel.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"CypherD Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/cypher_d_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Keplr\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/keplr.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"MyWalliD\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/my_walli_d.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Status\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/status.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Monarch Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://monarchwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://monarchwallet.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/monarch_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Marble\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://app.marblewallet.com/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://app.marblewallet.com/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/marble.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Flooz\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://wallet.flooz.trade/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://wallet.flooz.trade/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/flooz.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Blockchain.com\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://login.blockchain.com/deeplink/login/wallet-connect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://login.blockchain.com/deeplink/login/wallet-connect\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/blockchaincom.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Dohrnii Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/dohrnii_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"UniPass\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://wallet.unipass.id\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://wallet.unipass.id\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/uni_pass.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ZenGo\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"native\": \"zengo://get.zengo.com/\", \"universal\": \"https://get.zengo.com\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"zengo://get.zengo.com/\", \"universal\": \"https://get.zengo.com\", \"connect\": \"WalletConnectV2\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/zengo2.png\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Locker Token\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/locker_token.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Keeper\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://link.keeper-wallet.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://link.keeper-wallet.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/keeper.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"XDEFI Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/xdefi_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Numio\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/numio.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Neon Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/neon_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Nabox\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://nabox.io/app/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://nabox.io/app/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/nabox.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Snowball\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://app.snowball.exchange/app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://app.snowball.exchange/app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/snowball.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"KryptoGO Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://kryptogo.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://kryptogo.page.link\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/krypto_go_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Payperless\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/payperless.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Brave Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/brave_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Crossmint\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/crossmint.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Safematrix\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://safematrix.io/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://safematrix.io/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/safematrix.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"pier\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://pierwallet.com/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://pierwallet.com/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/pier.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"FILWallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://h5.filwallet.co\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://h5.filwallet.co\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/fil_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"ParaSwap Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://wallet.paraswap.io/#/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://wallet.paraswap.io/#/\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/para_swap_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Bitski\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"native\": \"bitski:\", \"universal\": \"https://wallet.bitski.com/walletconnect/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"bitski:\", \"universal\": \"https://wallet.bitski.com/walletconnect/wc\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/bitski.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Hippo Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"native\": \"hippowallet://\", \"universal\": \"https://hippowallet.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"hippowallet://\", \"universal\": \"https://hippowallet.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/hippo_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Core\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://core.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://core.app\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/core.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Xcapit\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://app.xcapit.com/links\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://app.xcapit.com/links\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/xcapit.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Paper\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"universal\": \"https://withpaper.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"universal\": \"https://withpaper.com\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/paper_wallet.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"MetaOne\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"native\": \"metaone:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"metaone:\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/metaone.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Enjin Wallet\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"mobile\": {\n \"ios\": { \"native\": \"enjinwallet:\", \"universal\": \"https://deeplink.wallet.enjin.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n \"android\": { \"native\": \"enjinwallet:\", \"universal\": \"https://deeplink.wallet.enjin.io\", \"connect\": \"WalletConnectV1\", \"qr\": \"WalletConnectV1\" },\n },\n \"logo\": \"https://img1.depay.com/wallets/enjin.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"BC Vault\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"https://img1.depay.com/wallets/bc_vault.jpg\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Ethereum Wallet\",\n \"extension\": \"WindowEthereum\",\n \"logo\": wallets.WindowEthereum?.info?.logo,\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"Solana Pay\",\n \"desktop\": {\n \"solanaPay\": true\n },\n \"mobile\": {\n \"ios\": {\n \"solanaPay\": true\n },\n \"android\": {\n \"solanaPay\": true\n }\n },\n \"logo\": Blockchains.solana?.logo,\n \"blockchains\": [...supported.solana]\n },\n {\n \"name\": \"Solana Wallet\",\n \"extension\": \"WindowSolana\",\n \"desktop\": {\n \"solanaPay\": true\n },\n \"mobile\": {\n \"ios\": {\n \"solanaPay\": true\n },\n \"android\": {\n \"solanaPay\": true\n }\n },\n \"logo\": wallets.WindowSolana?.info?.logo,\n \"blockchains\": [...supported.solana]\n },\n {\n \"name\": \"WalletConnect V2\",\n \"desktop\": { \"qr\": \"WalletConnectV2\" },\n \"logo\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz48IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjUuNC4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLT48c3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgNTAwIDUwMCcgc3R5bGU9J2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAwIDUwMDsnIHhtbDpzcGFjZT0ncHJlc2VydmUnPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+IC5zdDB7ZmlsbDojNTk5MUNEO30KPC9zdHlsZT48ZyBpZD0nUGFnZS0xJz48ZyBpZD0nd2FsbGV0Y29ubmVjdC1sb2dvLWFsdCc+PHBhdGggaWQ9J1dhbGxldENvbm5lY3QnIGNsYXNzPSdzdDAnIGQ9J00xMDIuNywxNjJjODEuNS03OS44LDIxMy42LTc5LjgsMjk1LjEsMGw5LjgsOS42YzQuMSw0LDQuMSwxMC41LDAsMTQuNEwzNzQsMjE4LjkgYy0yLDItNS4zLDItNy40LDBsLTEzLjUtMTMuMmMtNTYuOC01NS43LTE0OS01NS43LTIwNS44LDBsLTE0LjUsMTQuMWMtMiwyLTUuMywyLTcuNCwwTDkxLjksMTg3Yy00LjEtNC00LjEtMTAuNSwwLTE0LjQgTDEwMi43LDE2MnogTTQ2Ny4xLDIyOS45bDI5LjksMjkuMmM0LjEsNCw0LjEsMTAuNSwwLDE0LjRMMzYyLjMsNDA1LjRjLTQuMSw0LTEwLjcsNC0xNC44LDBjMCwwLDAsMCwwLDBMMjUyLDMxMS45IGMtMS0xLTIuNy0xLTMuNywwaDBsLTk1LjUsOTMuNWMtNC4xLDQtMTAuNyw0LTE0LjgsMGMwLDAsMCwwLDAsMEwzLjQsMjczLjZjLTQuMS00LTQuMS0xMC41LDAtMTQuNGwyOS45LTI5LjIgYzQuMS00LDEwLjctNCwxNC44LDBsOTUuNSw5My41YzEsMSwyLjcsMSwzLjcsMGMwLDAsMCwwLDAsMGw5NS41LTkzLjVjNC4xLTQsMTAuNy00LDE0LjgsMGMwLDAsMCwwLDAsMGw5NS41LDkzLjUgYzEsMSwyLjcsMSwzLjcsMGw5NS41LTkzLjVDNDU2LjQsMjI1LjksNDYzLDIyNS45LDQ2Ny4xLDIyOS45eicvPjwvZz48L2c+PC9zdmc+Cg==\",\n \"blockchains\": [...supported.evm]\n },\n {\n \"name\": \"WalletConnect\",\n \"desktop\": { \"qr\": \"WalletConnectV1\" },\n \"logo\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz48IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjUuNC4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLT48c3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgNTAwIDUwMCcgc3R5bGU9J2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAwIDUwMDsnIHhtbDpzcGFjZT0ncHJlc2VydmUnPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+IC5zdDB7ZmlsbDojNTk5MUNEO30KPC9zdHlsZT48ZyBpZD0nUGFnZS0xJz48ZyBpZD0nd2FsbGV0Y29ubmVjdC1sb2dvLWFsdCc+PHBhdGggaWQ9J1dhbGxldENvbm5lY3QnIGNsYXNzPSdzdDAnIGQ9J00xMDIuNywxNjJjODEuNS03OS44LDIxMy42LTc5LjgsMjk1LjEsMGw5LjgsOS42YzQuMSw0LDQuMSwxMC41LDAsMTQuNEwzNzQsMjE4LjkgYy0yLDItNS4zLDItNy40LDBsLTEzLjUtMTMuMmMtNTYuOC01NS43LTE0OS01NS43LTIwNS44LDBsLTE0LjUsMTQuMWMtMiwyLTUuMywyLTcuNCwwTDkxLjksMTg3Yy00LjEtNC00LjEtMTAuNSwwLTE0LjQgTDEwMi43LDE2MnogTTQ2Ny4xLDIyOS45bDI5LjksMjkuMmM0LjEsNCw0LjEsMTAuNSwwLDE0LjRMMzYyLjMsNDA1LjRjLTQuMSw0LTEwLjcsNC0xNC44LDBjMCwwLDAsMCwwLDBMMjUyLDMxMS45IGMtMS0xLTIuNy0xLTMuNywwaDBsLTk1LjUsOTMuNWMtNC4xLDQtMTAuNyw0LTE0LjgsMGMwLDAsMCwwLDAsMEwzLjQsMjczLjZjLTQuMS00LTQuMS0xMC41LDAtMTQuNGwyOS45LTI5LjIgYzQuMS00LDEwLjctNCwxNC44LDBsOTUuNSw5My41YzEsMSwyLjcsMSwzLjcsMGMwLDAsMCwwLDAsMGw5NS41LTkzLjVjNC4xLTQsMTAuNy00LDE0LjgsMGMwLDAsMCwwLDAsMGw5NS41LDkzLjUgYzEsMSwyLjcsMSwzLjcsMGw5NS41LTkzLjVDNDU2LjQsMjI1LjksNDYzLDIyNS45LDQ2Ny4xLDIyOS45eicvPjwvZz48L2c+PC9zdmc+Cg==\",\n \"blockchains\": [...supported.evm]\n },\n].filter((wallet)=>wallet.blockchains.filter(Boolean).length > 0)\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","module.exports = require(\"regenerator-runtime\");\n","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import React from 'react'\nexport default React.createContext()\n","import React from 'react'\nexport default React.createContext()\n","import ClosableContext from '../contexts/ClosableContext'\nimport React, { useState, useEffect, useContext } from 'react'\nimport UpdatableContext from '../contexts/UpdatableContext'\n\nexport default (props)=>{\n \n const [closable, setClosable] = useState(true)\n const [open, setOpen] = useState(true)\n const { setUpdatable } = useContext(UpdatableContext)\n\n const close = ()=>{\n if(props.closable === false) { return }\n if(!closable) { return }\n let close = true\n if(typeof closable === 'string') {\n close = confirm(closable)\n }\n if(close) {\n setUpdatable(false)\n setOpen(false)\n setTimeout(props.unmount, 300)\n }\n }\n\n useEffect(()=>{\n const preventReload = (event) => {\n if(!closable || props.closable === false) {\n const msg = 'Payment is still pending. Please wait!'\n event.preventDefault()\n event.returnValue = msg\n return msg\n } else if (typeof closable === 'string') {\n const msg = closable\n event.preventDefault()\n event.returnValue = msg\n return msg\n }\n }\n setTimeout(()=>{\n window.addEventListener('beforeunload', preventReload);\n }, 800) // timeout to prevent beforeunload error in case browser redirects to wallet (e.g. Solana Mobile Wallet Adapter)\n return ()=>{\n window.removeEventListener('beforeunload', preventReload);\n }\n }, [closable, props.closable])\n\n return(\n \n { props.children }\n \n )\n}\n","import React from 'react'\nexport default React.createContext({ accept: [] })\n","import React from 'react'\n\nexport default (props)=>{\n return(\n \n \n \n )\n}\n","import React from 'react'\n\nexport default ()=>{\n return(\n \n \n \n )\n}\n","import ChevronLeft from './ChevronLeft'\nimport ClosableContext from '../contexts/ClosableContext'\nimport CloseIcon from './CloseIcon'\nimport React, { useContext } from 'react'\nimport { NavigateStackContext } from '@depay/react-dialog-stack'\n\nexport default (props)=>{\n\n const { navigate } = useContext(NavigateStackContext)\n const { close, closable } = useContext(ClosableContext)\n\n return(\n
\n \n
\n { props.stacked &&\n
\n \n
\n }\n { closable && props.closable !== false &&\n
\n { props.alternativeHeaderAction }\n \n
\n }\n { props.header }\n
\n\n
\n { props.body }\n
\n\n { props.footer !== false &&\n
\n { props.footer }\n
\n }\n
\n )\n}\n","export default 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyNTAgMjUwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAgMjUwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTE3Mi44LDY4LjNjLTQuOS0yLjItNy40LTguNC00LjUtMTMuNmM1LjMtOS40LDEwLTE4LjYsNC4zLTI5LjFjLTctMTIuNy0yNC4xLTE3LjQtMzYuNi0xMGMtMTUuNCw5LjEtMTMuNCwyNS42LTUuMSwzOC45CgkJYzMuMyw1LjIsMC45LDExLjYtNC4yLDEzLjlsLTYxLjIsMC4xbDAsMC44bDAuMSwyMS44bDAuMSwzNy45Yy0xLjksNS41LTguNyw4LjQtMTQuMSw1Yy0xMy40LTguMy0yOS44LTEwLjEtMzguOSw1LjMKCQljLTcuMywxMi41LTIuNSwyOS43LDEwLjIsMzYuNWMxMC41LDUuNywxOS43LDEsMjkuMS00LjRjNS40LTMuMSwxMS45LTAuMywxMy44LDVsMC4xLDU5LjhsNTcuMi0wLjFjMC4xLDAsMC4yLDAsMC4zLDBsMy42LDAKCQljNS0yLjMsNy40LTguNyw0LjItMTMuOWMtOC4zLTEzLjMtMTAuMy0yOS44LDUuMS0zOC45YzEyLjUtNy40LDI5LjYtMi43LDM2LjYsMTBjNS43LDEwLjUsMS4xLDE5LjctNC4zLDI5LjEKCQljLTIuOSw1LjItMC41LDExLjQsNC41LDEzLjZsMy42LDBjMC4xLDAsMC4yLDAsMC4zLDBsNTYuNS0wLjFsLTAuMS01OC44Yy0xLjQtNi42LTcuOC05LjItMTQuMS01LjhjLTkuNSw1LjItMTcuOSw5LjgtMjguNCw0LjEKCQljLTEyLjgtNi45LTE4LjItMjMuNy0xMC45LTM2LjNjOS0xNS40LDI1LjUtMTMuNiwzOC45LTUuM2M1LjcsMy41LDEyLjksMC4yLDE0LjQtNS45bC0wLjEtMzUuNEwyMzMuMyw2OWwwLTAuOEwxNzIuOCw2OC4zeiIvPgo8L2c+Cjwvc3ZnPgo='\n","const isMobile = ()=> {\n if (typeof window !== 'undefined') {\n return Boolean(\n window.matchMedia('(pointer:coarse)').matches ||\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|Opera Mini/u.test(navigator.userAgent)\n )\n }\n\n return false\n}\n\nexport default isMobile\n","export default 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik00NTkuNjU0LDIzMy4zNzNsLTkwLjUzMSw5MC41Yy00OS45NjksNTAtMTMxLjAzMSw1MC0xODEsMGMtNy44NzUtNy44NDQtMTQuMDMxLTE2LjY4OC0xOS40MzgtMjUuODEzDQoJbDQyLjA2My00Mi4wNjNjMi0yLjAxNiw0LjQ2OS0zLjE3Miw2LjgyOC00LjUzMWMyLjkwNiw5LjkzOCw3Ljk4NCwxOS4zNDQsMTUuNzk3LDI3LjE1NmMyNC45NTMsMjQuOTY5LDY1LjU2MywyNC45MzgsOTAuNSwwDQoJbDkwLjUtOTAuNWMyNC45NjktMjQuOTY5LDI0Ljk2OS02NS41NjMsMC05MC41MTZjLTI0LjkzOC0yNC45NTMtNjUuNTMxLTI0Ljk1My05MC41LDBsLTMyLjE4OCwzMi4yMTkNCgljLTI2LjEwOS0xMC4xNzItNTQuMjUtMTIuOTA2LTgxLjY0MS04Ljg5MWw2OC41NzgtNjguNTc4YzUwLTQ5Ljk4NCwxMzEuMDMxLTQ5Ljk4NCwxODEuMDMxLDANCglDNTA5LjYyMywxMDIuMzQyLDUwOS42MjMsMTgzLjM4OSw0NTkuNjU0LDIzMy4zNzN6IE0yMjAuMzI2LDM4Mi4xODZsLTMyLjIwMywzMi4yMTljLTI0Ljk1MywyNC45MzgtNjUuNTYzLDI0LjkzOC05MC41MTYsMA0KCWMtMjQuOTUzLTI0Ljk2OS0yNC45NTMtNjUuNTYzLDAtOTAuNTMxbDkwLjUxNi05MC41YzI0Ljk2OS0yNC45NjksNjUuNTQ3LTI0Ljk2OSw5MC41LDBjNy43OTcsNy43OTcsMTIuODc1LDE3LjIwMywxNS44MTMsMjcuMTI1DQoJYzIuMzc1LTEuMzc1LDQuODEzLTIuNSw2LjgxMy00LjVsNDIuMDYzLTQyLjA0N2MtNS4zNzUtOS4xNTYtMTEuNTYzLTE3Ljk2OS0xOS40MzgtMjUuODI4Yy00OS45NjktNDkuOTg0LTEzMS4wMzEtNDkuOTg0LTE4MS4wMTYsMA0KCWwtOTAuNSw5MC41Yy00OS45ODQsNTAtNDkuOTg0LDEzMS4wMzEsMCwxODEuMDMxYzQ5Ljk4NCw0OS45NjksMTMxLjAzMSw0OS45NjksMTgxLjAxNiwwbDY4LjU5NC02OC41OTQNCglDMjc0LjU2MSwzOTUuMDkyLDI0Ni40MiwzOTIuMzQyLDIyMC4zMjYsMzgyLjE4NnoiLz4NCjwvc3ZnPg0K'\n","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyAgUFVCTElDICctLy9XM0MvL0RURCBTVkcgMS4xLy9FTicgICdodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQnPgo8c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMDAgMTAwMCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMWUzIDFlMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1ldGFkYXRhPiBTdmcgVmVjdG9yIEljb25zIDogaHR0cDovL3d3dy5vbmxpbmV3ZWJmb250cy5jb20vaWNvbiA8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUxMSkgc2NhbGUoLjEgLS4xKSI+PHBhdGggZD0ibTEwMCAyNzk3LjF2LTIyMTIuOWg0NDI1Ljh2NDQyNS44aC00NDI1Ljh2LTIyMTIuOXptMzQ3Ny40IDB2LTEyNjQuNWgtMjUyOXYyNTI5aDI1Mjl2LTEyNjQuNXoiLz48cGF0aCBkPSJtMTY4MC42IDI3OTcuMXYtNjMyLjNoMTI2NC42djEyNjQuNmgtMTI2NC42di02MzIuM3oiLz48cGF0aCBkPSJtNTQ3NC4yIDI3OTcuMXYtMjIxMi45aDQ0MjUuOHY0NDI1LjhoLTQ0MjUuOHYtMjIxMi45em0zNDc3LjQgMHYtMTI2NC41aC0yNTI5djI1MjloMjUyOXYtMTI2NC41eiIvPjxwYXRoIGQ9Im03MDU0LjggMjc5Ny4xdi02MzIuM2gxMjY0LjZ2MTI2NC42aC0xMjY0LjZ2LTYzMi4zeiIvPjxwYXRoIGQ9Im0xMDAtMjU3Ny4xdi0yMjEyLjloNDQyNS44djQ0MjUuOGgtNDQyNS44di0yMjEyLjl6bTM0NzcuNCAwdi0xMjY0LjVoLTI1Mjl2MjUyOWgyNTI5di0xMjY0LjV6Ii8+PHBhdGggZD0ibTE2ODAuNi0yNTc3LjF2LTYzMi4zaDEyNjQuNnYxMjY0LjZoLTEyNjQuNnYtNjMyLjN6Ii8+PHBhdGggZD0ibTU0NzQuMi05MTcuNHYtNTUzLjJoMTEwNi40di0xMTA2LjRoLTExMDYuNHYtMTEwNi40aDExMDYuNHYtMTEwNi42aDExMDYuNHYxMTA2LjRoMTEwNi40di0xMTA2LjRoMTEwNi42djExMDYuNGgtMTEwNi40djExMDYuNGgxMTA2LjR2MTEwNi40aC0xMTA2LjR2MTEwNi40aC0xMTA2LjR2LTExMDYuNGgtMTEwNi40djExMDYuNGgtMTEwNi40di01NTN6bTMzMTkuMy0xMTA2LjV2LTU1My4yaC0xMTA2LjR2LTExMDYuNGgtMTEwNi40djExMDYuNGgxMTA2LjR2MTEwNi40aDExMDYuNHYtNTUzLjJ6Ii8+PC9nPgo8L3N2Zz4K\"\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '